@agilehub/docx-converter 0.1.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -30
- package/dist/contracts/conversion.d.ts +7 -2
- package/dist/docx-converter.browser.js +1138 -1092
- package/dist/docx-converter.umd.cjs +9 -9
- package/dist/domain/document.d.ts +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/modules/images/drawing-rasterizer.d.ts +3 -1
- package/dist/node.cjs +1 -1
- package/dist/node.js +1 -1
- package/dist/{pdf-renderer-BTmknVBG.js → pdf-renderer-B240GmbE.js} +1 -1
- package/dist/{pdf-renderer-CU-4XhDW.cjs → pdf-renderer-BNN_rF1o.cjs} +1 -1
- package/dist/{pdf-renderer-uqNvipxr.cjs → pdf-renderer-Bv1oV5Qg.cjs} +1 -1
- package/dist/{pdf-renderer-DCYP1p-_.js → pdf-renderer-CAGo1KfA.js} +1 -1
- package/dist/rendering/html/math-image-renderer.d.ts +2 -1
- package/dist/rendering/math-image-source.d.ts +10 -2
- package/dist/{src-DpHhavCo.cjs → src-CdiWe9zB.cjs} +7 -7
- package/dist/{src-_9BR_chc.js → src-Dvw44Jag.js} +1088 -1041
- package/docs/architecture.md +3 -3
- package/package.json +1 -1
|
@@ -42,7 +42,7 @@ export interface MathNode {
|
|
|
42
42
|
mathml: string;
|
|
43
43
|
latex?: string;
|
|
44
44
|
display: boolean;
|
|
45
|
-
/** Self-contained SVG URL when formulaOutput is image and rendering succeeds. */
|
|
45
|
+
/** Self-contained PNG or SVG data URL when formulaOutput is image and rendering succeeds. */
|
|
46
46
|
src?: string;
|
|
47
47
|
}
|
|
48
48
|
export interface LinkNode {
|
package/dist/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-CdiWe9zB.cjs");exports.DocxError=e.a,exports.convertToHtml=e.n,exports.convertToJson=e.r,exports.convertToPdf=e.t;
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { a as DocxError, n as convertToHtml, r as convertToJson, t as convertToPdf } from "./src-
|
|
1
|
+
export { a as DocxError, n as convertToHtml, r as convertToJson, t as convertToPdf } from "./src-Dvw44Jag.js";
|
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/** Rasterize trusted internal SVG without allowing external resources. */
|
|
2
|
+
export declare function svgToPng(svg: string, displayWidth: number, displayHeight: number, background?: string | null): Promise<Uint8Array>;
|
|
3
|
+
/** Grouped drawings use a white page background. */
|
|
2
4
|
export declare function drawingToPng(svg: string, displayWidth: number, displayHeight: number): Promise<Uint8Array>;
|
package/dist/node.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./src-CdiWe9zB.cjs");let t=require("node:fs/promises"),n=require("node:child_process"),r=require("node:os"),i=require("node:path"),a=require("node:util");async function o(n,r){if((await(0,t.stat)(n)).size>(r.limits?.inputBytes??e.i.inputBytes))throw new e.a(`INPUT_LIMIT`,`输入文件超过大小限制`);return(0,t.readFile)(n)}async function s(t,n={}){return e.n(await o(t,n),n)}async function c(t,n={}){return e.r(await o(t,n),n)}async function l(t,n={}){return e.t(await o(t,n),n)}var u=(0,a.promisify)(n.execFile);function d(e=`magick`){return async n=>{if(!n.formula||!/\.(wmf|emf)$/i.test(n.path)||n.bytes.length>8388608)return;let a=n.path.toLowerCase().endsWith(`.emf`)?`emf`:`wmf`,o=await(0,t.mkdtemp)((0,i.join)((0,r.tmpdir)(),`docx-converter-preview-`)),s=(0,i.join)(o,`preview.${a}`),c=(0,i.join)(o,`preview.png`);try{await(0,t.writeFile)(s,n.bytes),await u(e,[`-background`,`none`,s,`-resize`,`1600x1600>`,`PNG32:${c}`],{timeout:15e3,maxBuffer:1048576,windowsHide:!0});let r=await(0,t.readFile)(c);return r.length>16777216?void 0:{bytes:new Uint8Array(r),mimeType:`image/png`}}catch{return}finally{await(0,t.unlink)(s).catch(()=>{}),await(0,t.unlink)(c).catch(()=>{}),await(0,t.rmdir)(o)}}}exports.DocxError=e.a,exports.convertToHtml=e.n,exports.convertToHtmlFile=s,exports.convertToJson=e.r,exports.convertToJsonFile=c,exports.convertToPdf=e.t,exports.convertToPdfFile=l,exports.createImageMagickPreviewConverter=d;
|
package/dist/node.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as e, i as t, n, r, t as i } from "./src-
|
|
1
|
+
import { a as e, i as t, n, r, t as i } from "./src-Dvw44Jag.js";
|
|
2
2
|
import { mkdtemp as a, readFile as o, rmdir as s, stat as c, unlink as l, writeFile as u } from "node:fs/promises";
|
|
3
3
|
import { execFile as d } from "node:child_process";
|
|
4
4
|
import { tmpdir as f } from "node:os";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require("./src-
|
|
1
|
+
const e=require("./src-CdiWe9zB.cjs");var t=32767;function n(){let e=globalThis.navigator,t=e?.userAgent??``;return/iPhone|iPad|iPod/.test(t)||/Macintosh/.test(t)&&(e?.maxTouchPoints??0)>1?16e6:12e7}async function r(r,i){let[{default:a},{default:o}]=await Promise.all([import(`html2pdf.js`),import(`html2canvas`)]),s=a(),c=globalThis.document,l=c.createElement(`iframe`);l.setAttribute(`sandbox`,`allow-same-origin allow-scripts`),l.style.cssText=`position:fixed;left:-20000px;top:0;width:900px;height:1000px;border:0`;let u=()=>{if(i.signal?.aborted)throw new e.a(`ABORTED`,`转换已取消`)},d;try{await new Promise((t,n)=>{let i=setTimeout(()=>n(new e.a(`PDF_TIMEOUT`,`PDF 预览加载超时`)),3e4);l.onload=()=>{clearTimeout(i),t()},l.srcdoc=r,c.body.append(l)}),u();let a=l.contentDocument;await a.fonts.ready,await Promise.all(Array.from(a.images).map(e=>e.decode())),u();let f=i.pdf??{},p=f.scale??2,m={scale:p,useCORS:!0,backgroundColor:`#ffffff`,logging:!1},h=s.set({margin:f.margin??15,html2canvas:m,jsPDF:{unit:`mm`,format:f.format??`a4`,orientation:f.landscape?`landscape`:`portrait`},pagebreak:{mode:[`css`,`legacy`],avoid:[`tr`,`img`]}}).from(a.querySelector(`.docx-document`));await h.toContainer();let g=e=>h.get(e),_=await g(`container`);d=await g(`overlay`);let v=await g(`pageSize`);u();let y=Math.ceil(_.getBoundingClientRect().width),b=Math.max(1,Math.ceil(Math.max(_.scrollHeight,_.getBoundingClientRect().height))),x=Math.floor(y*p),S=Math.floor(x*v.inner.ratio),C=S/p,w=Math.max(1,Math.ceil(b/C-1e-6)),T=Math.max(1,Math.min(Math.floor(t/S),Math.floor(n()/(x*S))));for(let e=0;e<w;e+=T){u();let t=e+T>=w,n=e*C,r=t?b-n:T*C,i=await o(_,{...m,x:0,y:n,width:y,height:r});u(),e>0&&await h.get(`pdf`,e=>e.addPage()),await h.set({canvas:i,enableLinks:t}).toPdf(),i.width=i.height=0}u();let E=await h.outputPdf(`arraybuffer`);return u(),new Uint8Array(E)}finally{d?.remove(),l.remove()}}exports.renderPdf=r;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require("./src-
|
|
1
|
+
const e=require("./src-CdiWe9zB.cjs");let t=require("playwright-core");async function n(n,r){let i=r.pdf??{},a=await t.chromium.launch(i.executablePath?{executablePath:i.executablePath,headless:!0}:{channel:`chrome`,headless:!0}),o=()=>{a.close().catch(()=>{})};r.signal?.addEventListener(`abort`,o,{once:!0});try{if(r.signal?.aborted)throw new e.a(`ABORTED`,`转换已取消`);let t=await a.newPage();await t.setContent(n,{waitUntil:`load`,timeout:3e4}),await t.evaluate(`Promise.race([Promise.all([document.fonts.ready, ...Array.from(document.images).map(image => image.decode())]), new Promise((_, reject) => setTimeout(() => reject(new Error("PDF image/font load timed out")), 15000))])`),await t.addStyleTag({content:`table{width:auto;max-width:100%}tr,img{break-inside:avoid}body{padding:0!important}`});let o=`${i.margin??15}mm`;return new Uint8Array(await t.pdf({format:i.format===`letter`?`Letter`:`A4`,landscape:i.landscape,margin:{top:o,right:o,bottom:o,left:o},printBackground:!0}))}catch(t){throw r.signal?.aborted?new e.a(`ABORTED`,`转换已取消`):t}finally{r.signal?.removeEventListener(`abort`,o),await a.close()}}exports.renderPdf=n;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { MathNode } from '../../domain/document.js';
|
|
2
2
|
import type { RenderContext } from '../../contracts/ports.js';
|
|
3
|
-
|
|
3
|
+
import type { MathImageFormat } from '../math-image-source.js';
|
|
4
|
+
export declare function renderMathImage(node: MathNode, context: RenderContext, format: MathImageFormat): Promise<string>;
|
|
@@ -12,5 +12,13 @@ import '@mathjax/mathjax-stix2-font/js/svg/dynamic/upright.js';
|
|
|
12
12
|
import '@mathjax/mathjax-stix2-font/js/svg/dynamic/variants.js';
|
|
13
13
|
import type { MathNode } from '../domain/document.js';
|
|
14
14
|
import type { RenderContext } from '../contracts/ports.js';
|
|
15
|
-
|
|
16
|
-
export
|
|
15
|
+
export type MathImageFormat = 'png' | 'svg';
|
|
16
|
+
export interface MathImageOutput {
|
|
17
|
+
src: string;
|
|
18
|
+
format: MathImageFormat;
|
|
19
|
+
widthEx: number;
|
|
20
|
+
heightEx: number;
|
|
21
|
+
verticalAlignEx?: number;
|
|
22
|
+
}
|
|
23
|
+
/** Resolve a formula to PNG or SVG while preserving its Word-relative display size. */
|
|
24
|
+
export declare function resolveMathImageOutput(node: MathNode, context: RenderContext, format: MathImageFormat): Promise<MathImageOutput | undefined>;
|