feat: 实现 DOCX 可编辑字体嵌入
This commit is contained in:
@@ -28,6 +28,11 @@ import {
|
||||
type DynamicReferenceDocxResult
|
||||
} from "./reference-builder.js";
|
||||
import { finalizeGeneratedDocxStructure } from "./document-structure-transform.js";
|
||||
import {
|
||||
prepareDocxFonts,
|
||||
type DocxFontSource
|
||||
} from "./font-embedding.js";
|
||||
import { embedFontsInGeneratedDocx } from "./font-package-transform.js";
|
||||
import type { DynamicReferenceDocxOptions } from "./reference-options.js";
|
||||
import { preparePandocMedia } from "./pandoc-media.js";
|
||||
import { createPandocStructurePlan } from "./pandoc-structure.js";
|
||||
@@ -67,6 +72,7 @@ export interface PandocDocxConversionInput {
|
||||
exportConfig: ExportConfig;
|
||||
theme: ThemeManifest;
|
||||
themeTokens: DocxThemeTokenSet;
|
||||
fonts: DocxFontSource[];
|
||||
metadata: MarkdownDocumentMetadata;
|
||||
semanticDocument: SemanticDocumentModel;
|
||||
media: PreparedDocxMedia;
|
||||
@@ -225,8 +231,10 @@ export class PandocDocxConverter {
|
||||
): Promise<PandocDocxConversionResult> {
|
||||
let preparedMedia;
|
||||
let structurePlan;
|
||||
let preparedFonts;
|
||||
try {
|
||||
preparedMedia = preparePandocMedia(input.media);
|
||||
preparedFonts = await prepareDocxFonts(input.fonts);
|
||||
structurePlan = createPandocStructurePlan(
|
||||
input.semanticDocument,
|
||||
input.themeTokens,
|
||||
@@ -367,7 +375,10 @@ export class PandocDocxConverter {
|
||||
structurePlan,
|
||||
input.themeTokens
|
||||
);
|
||||
docx = finalized.content;
|
||||
docx = embedFontsInGeneratedDocx(
|
||||
finalized.content,
|
||||
preparedFonts
|
||||
).content;
|
||||
if (docx.byteLength > this.maximumOutputBytes) {
|
||||
throw new Error("DOCX 结构收口后的输出大小无效");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user