feat: 实现 Pandoc DOCX 转换服务

This commit is contained in:
SkyJourney
2026-07-30 15:05:50 +08:00
parent fa159d916f
commit bf43433d38
32 changed files with 2908 additions and 61 deletions
+18 -11
View File
@@ -38,7 +38,8 @@ export interface DocxMediaCaptureOutput {
export interface DocxMediaCaptureAdapter {
capture(
request: DocxMediaCaptureRequest
request: DocxMediaCaptureRequest,
signal?: AbortSignal
): Promise<DocxMediaCaptureOutput>;
}
@@ -161,18 +162,24 @@ function validateCaptures(
export async function prepareDocxMedia(
prepared: PreparedDocxExport,
adapter: DocxMediaCaptureAdapter
adapter: DocxMediaCaptureAdapter,
signal?: AbortSignal
): Promise<PreparedDocxMedia> {
signal?.throwIfAborted();
const dimensions = getDocxMediaRenderDimensions(prepared);
const output = await adapter.capture({
payload: createPagedDocumentPayload({
document: prepared.document,
fileName: prepared.request.fileName,
themeCss: prepared.theme.css,
exportConfig: prepared.request.exportConfig
}),
dimensions
});
const output = await adapter.capture(
{
payload: createPagedDocumentPayload({
document: prepared.document,
fileName: prepared.request.fileName,
themeCss: prepared.theme.css,
exportConfig: prepared.request.exportConfig
}),
dimensions
},
signal
);
signal?.throwIfAborted();
const parsedPlan = docxMediaCapturePlanSchema.safeParse(output.plan);
if (!parsedPlan.success) {
throw new Error("DOCX 媒体捕获计划无效");