feat: 完成 DOCX 通用结构映射与严格收口
This commit is contained in:
@@ -7,6 +7,7 @@ import {
|
||||
defaultExportConfig
|
||||
} from "@md-to-pdf/core";
|
||||
import { inspectDocxAcceptance } from "@md-to-pdf/docx-engine";
|
||||
import { DOCX_STYLE_SLOTS } from "@md-to-pdf/docx-theme-engine";
|
||||
import { buildApp } from "../dist/app.js";
|
||||
|
||||
const directory = path.dirname(fileURLToPath(import.meta.url));
|
||||
@@ -75,7 +76,66 @@ const exportConfig = {
|
||||
}
|
||||
}
|
||||
};
|
||||
const computedStyle = {
|
||||
fontFamily: '"Microsoft YaHei", sans-serif',
|
||||
fontSize: "16px",
|
||||
fontWeight: "400",
|
||||
fontStyle: "normal",
|
||||
color: "rgb(34, 34, 34)",
|
||||
backgroundColor: "rgba(0, 0, 0, 0)",
|
||||
lineHeight: "24px",
|
||||
letterSpacing: "normal",
|
||||
textAlign: "start",
|
||||
direction: "ltr",
|
||||
textIndent: "0px",
|
||||
textDecorationLine: "none",
|
||||
marginTop: "0px",
|
||||
marginRight: "0px",
|
||||
marginBottom: "8px",
|
||||
marginLeft: "0px",
|
||||
paddingTop: "0px",
|
||||
paddingRight: "0px",
|
||||
paddingBottom: "0px",
|
||||
paddingLeft: "0px",
|
||||
borderTop: "0px none rgb(34, 34, 34)",
|
||||
borderRight: "0px none rgb(34, 34, 34)",
|
||||
borderBottom: "0px none rgb(34, 34, 34)",
|
||||
borderLeft: "0px none rgb(34, 34, 34)",
|
||||
width: "640px",
|
||||
maxWidth: "none",
|
||||
minHeight: "0px",
|
||||
height: "24px",
|
||||
breakBefore: "auto",
|
||||
breakAfter: "auto",
|
||||
breakInside: "auto",
|
||||
display: "block",
|
||||
flexDirection: "row",
|
||||
alignItems: "normal",
|
||||
justifyContent: "normal",
|
||||
outline: "0px none rgb(34, 34, 34)",
|
||||
outlineOffset: "0px"
|
||||
};
|
||||
const mediaAdapter = {
|
||||
themeStyleBaseUrl:
|
||||
"http://localhost:5173/preview-frame.html",
|
||||
async captureThemeStyle(request) {
|
||||
return {
|
||||
schemaVersion: 1,
|
||||
themeId: request.themeId,
|
||||
themeFingerprint: request.themeFingerprint,
|
||||
viewport: {
|
||||
widthPx: 794,
|
||||
heightPx: 1123,
|
||||
deviceScaleFactor: 1
|
||||
},
|
||||
rootFontSizePx: 16,
|
||||
slots: DOCX_STYLE_SLOTS.map(({ name }) => ({
|
||||
slot: name,
|
||||
matched: true,
|
||||
computed: computedStyle
|
||||
}))
|
||||
};
|
||||
},
|
||||
async capture() {
|
||||
return {
|
||||
plan: {
|
||||
@@ -96,7 +156,7 @@ const pdfGenerator = {
|
||||
};
|
||||
const beforeTemporaryDirectories = temporaryDirectories();
|
||||
const app = buildApp({
|
||||
logger: false,
|
||||
logger: { level: "error" },
|
||||
pdfGenerator,
|
||||
docxMediaAdapter: mediaAdapter
|
||||
});
|
||||
@@ -128,7 +188,10 @@ try {
|
||||
await app.close();
|
||||
}
|
||||
|
||||
assert(response.statusCode === 200, `DOCX HTTP 返回 ${response.statusCode}`);
|
||||
assert(
|
||||
response.statusCode === 200,
|
||||
`DOCX HTTP 返回 ${response.statusCode}:${response.body}`
|
||||
);
|
||||
assert(
|
||||
response.headers["content-type"]?.includes(DOCX_MIME_TYPE),
|
||||
`DOCX MIME 无效:${response.headers["content-type"]}`
|
||||
|
||||
Reference in New Issue
Block a user