feat: 完成 DOCX 视觉门禁与字体兼容映射
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
readGeneratedDocxPackage,
|
||||
writeGeneratedDocxPackage
|
||||
} from "./reference-package.js";
|
||||
import { createWordFontMetadata } from "./word-font-metadata.js";
|
||||
|
||||
const FONT_RELATIONSHIP_TYPE =
|
||||
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/font";
|
||||
@@ -318,17 +319,49 @@ function updateFontTable(
|
||||
font
|
||||
])
|
||||
);
|
||||
const metadataFamilies = new Set<string>();
|
||||
for (const face of faces) {
|
||||
const family = face.font.metadata.family;
|
||||
let font = byName.get(normalizeFontName(family));
|
||||
const normalizedFamily = normalizeFontName(family);
|
||||
let font = byName.get(normalizedFamily);
|
||||
if (!font) {
|
||||
font = appendElement(root, WORD_NAMESPACE, "w:font", {
|
||||
"w:name": family
|
||||
});
|
||||
appendElement(font, WORD_NAMESPACE, "w:family", {
|
||||
"w:val": "auto"
|
||||
byName.set(normalizedFamily, font);
|
||||
}
|
||||
if (!metadataFamilies.has(normalizedFamily)) {
|
||||
const metadata = createWordFontMetadata(face.font.metadata);
|
||||
removeDirectChildren(
|
||||
font,
|
||||
WORD_NAMESPACE,
|
||||
"panose1",
|
||||
"charset",
|
||||
"family",
|
||||
"pitch",
|
||||
"sig"
|
||||
);
|
||||
appendElement(font, WORD_NAMESPACE, "w:panose1", {
|
||||
"w:val": metadata.panose1
|
||||
});
|
||||
byName.set(normalizeFontName(family), font);
|
||||
appendElement(font, WORD_NAMESPACE, "w:charset", {
|
||||
"w:val": metadata.charset
|
||||
});
|
||||
appendElement(font, WORD_NAMESPACE, "w:family", {
|
||||
"w:val": metadata.family
|
||||
});
|
||||
appendElement(font, WORD_NAMESPACE, "w:pitch", {
|
||||
"w:val": metadata.pitch
|
||||
});
|
||||
appendElement(font, WORD_NAMESPACE, "w:sig", {
|
||||
"w:usb0": metadata.signature.usb0,
|
||||
"w:usb1": metadata.signature.usb1,
|
||||
"w:usb2": metadata.signature.usb2,
|
||||
"w:usb3": metadata.signature.usb3,
|
||||
"w:csb0": metadata.signature.csb0,
|
||||
"w:csb1": metadata.signature.csb1
|
||||
});
|
||||
metadataFamilies.add(normalizedFamily);
|
||||
}
|
||||
appendElement(font, WORD_NAMESPACE, `w:${face.role}`, {
|
||||
"r:id": face.relationshipId,
|
||||
|
||||
Reference in New Issue
Block a user