reamkit 1.2.0 → 1.4.0
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 +10 -6
- package/dist/esm/core/converter/facade.d.ts +2 -2
- package/dist/esm/core/converter/facade.js +12 -0
- package/dist/esm/core/converter/ream.d.ts +1 -1
- package/dist/esm/core/converter/ream.js +14 -3
- package/dist/esm/core/document-model/types.d.ts +2 -0
- package/dist/esm/core/drawingml/chart-geometry.d.ts +1 -1
- package/dist/esm/core/drawingml/chart-geometry.js +79 -117
- package/dist/esm/core/drawingml/chart-parser.d.ts +3 -0
- package/dist/esm/core/drawingml/chart-parser.js +28 -1
- package/dist/esm/core/numbering/apply.js +2 -1
- package/dist/esm/core/opc/index.d.ts +3 -0
- package/dist/esm/core/opc/index.js +1 -0
- package/dist/esm/core/opc/opc-writer.d.ts +28 -0
- package/dist/esm/core/opc/opc-writer.js +60 -0
- package/dist/esm/core/opc/package.js +3 -2
- package/dist/esm/core/opc/relationship-types.d.ts +1 -0
- package/dist/esm/core/opc/relationship-types.js +5 -2
- package/dist/esm/excel/print-model.d.ts +3 -0
- package/dist/esm/excel/print-model.js +4 -8
- package/dist/esm/excel/sheet-drawing.d.ts +9 -0
- package/dist/esm/excel/sheet-drawing.js +113 -0
- package/dist/esm/excel/worksheet-parser.d.ts +1 -0
- package/dist/esm/excel/worksheet-parser.js +4 -1
- package/dist/esm/excel/xlsx-reader.js +41 -0
- package/dist/esm/excel/xlsx-to-pdf.js +25 -18
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +2 -1
- package/dist/esm/layout/page-doc.d.ts +1 -0
- package/dist/esm/layout/styled-layout.d.ts +2 -0
- package/dist/esm/layout/styled-layout.js +321 -171
- package/dist/esm/pdf/encryption.d.ts +34 -0
- package/dist/esm/pdf/encryption.js +143 -0
- package/dist/esm/pdf/index.d.ts +2 -1
- package/dist/esm/pdf/styled-page-emitter.d.ts +2 -0
- package/dist/esm/pdf/styled-page-emitter.js +25 -7
- package/dist/esm/pdf/styled-page-renderer.d.ts +1 -0
- package/dist/esm/pdf/styled-page-renderer.js +17 -2
- package/dist/esm/pdf/writer.d.ts +2 -0
- package/dist/esm/pdf/writer.js +6 -1
- package/dist/esm/word/document-parser.js +51 -13
- package/dist/esm/word/docx-reader.js +7 -11
- package/dist/esm/word/docx-to-pdf.js +23 -13
- package/dist/esm/word/docx-writer.d.ts +4 -0
- package/dist/esm/word/docx-writer.js +602 -0
- package/dist/esm/word/drawing-parser.d.ts +1 -0
- package/dist/esm/word/drawing-parser.js +37 -2
- package/package.json +4 -3
|
@@ -2,10 +2,6 @@ import { eighthPtToPt, halfPtToPt, twipsToPt } from "../core/ir/units.js";
|
|
|
2
2
|
import { parseAreaRef, parseTitleRowRange } from "./defined-name-ref.js";
|
|
3
3
|
import { applyNumberFormat } from "./number-format.js";
|
|
4
4
|
import "./index.js";
|
|
5
|
-
//#region src/excel/print-model.ts
|
|
6
|
-
var TWIPS_PER_EXCEL_CHAR = 105;
|
|
7
|
-
var DEFAULT_COL_TWIPS = 960;
|
|
8
|
-
var DEFAULT_ROW_TWIPS = 300;
|
|
9
5
|
var TWIPS_PER_POINT = 20;
|
|
10
6
|
var TWIPS_PER_INCH = 1440;
|
|
11
7
|
var PAPER_SIZES_TWIPS = new Map([
|
|
@@ -154,9 +150,9 @@ function worksheetToBody(worksheet, sharedStrings, styles, date1904, print) {
|
|
|
154
150
|
const cEnd = Math.min(m.endColumn, colWindowEnd);
|
|
155
151
|
for (let r = Math.max(m.startRow, rowStart); r <= rEnd; r++) for (let c = Math.max(m.startColumn, colStart); c <= cEnd; c++) if (!(r === m.startRow && c === m.startColumn)) insideMerge.add(key(r, c));
|
|
156
152
|
}
|
|
157
|
-
const columnWidths = new Array(colCount).fill(
|
|
153
|
+
const columnWidths = new Array(colCount).fill(960);
|
|
158
154
|
for (const col of worksheet.columns) {
|
|
159
|
-
const twips = Math.round(col.widthChars *
|
|
155
|
+
const twips = Math.round(col.widthChars * 105);
|
|
160
156
|
for (let abs = col.min - 1; abs <= col.max - 1; abs++) {
|
|
161
157
|
const i = abs - colStart;
|
|
162
158
|
if (i >= 0 && i < colCount) columnWidths[i] = twips;
|
|
@@ -164,7 +160,7 @@ function worksheetToBody(worksheet, sharedStrings, styles, date1904, print) {
|
|
|
164
160
|
}
|
|
165
161
|
const totalGridTwips = columnWidths.reduce((sum, w) => sum + w, 0);
|
|
166
162
|
let totalGridHeightTwips = 0;
|
|
167
|
-
for (let r = 0; r < rowCount; r++) totalGridHeightTwips += rowHeightMap.get(r)?.heightTwips ??
|
|
163
|
+
for (let r = 0; r < rowCount; r++) totalGridHeightTwips += rowHeightMap.get(r)?.heightTwips ?? 300;
|
|
168
164
|
const printScale = computePrintScale(worksheet, totalGridTwips, sheetContentWidthTwips(worksheet), totalGridHeightTwips, sheetContentHeightTwips(worksheet));
|
|
169
165
|
const scaled = printScale < .999;
|
|
170
166
|
const breakRows = new Set(worksheet.rowBreaks ?? []);
|
|
@@ -217,7 +213,7 @@ function worksheetToBody(worksheet, sharedStrings, styles, date1904, print) {
|
|
|
217
213
|
cc++;
|
|
218
214
|
}
|
|
219
215
|
if (cc < colCount) {
|
|
220
|
-
const charsFit = Math.max(1, Math.round(availTwips /
|
|
216
|
+
const charsFit = Math.max(1, Math.round(availTwips / 105));
|
|
221
217
|
if (text.length > charsFit) text = text.slice(0, charsFit);
|
|
222
218
|
}
|
|
223
219
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { OpcPackage } from '../core/opc/index.js';
|
|
2
|
+
import { ParsedWorksheet } from './worksheet-parser.js';
|
|
3
|
+
export interface SheetChartRef {
|
|
4
|
+
readonly chartPartPath: string;
|
|
5
|
+
readonly widthPt: number;
|
|
6
|
+
readonly heightPt: number;
|
|
7
|
+
readonly anchorRow: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function parseSheetDrawing(drawingXml: Uint8Array, drawingPartPath: string, pkg: OpcPackage, worksheet: ParsedWorksheet): Array<SheetChartRef>;
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { emuToPt } from "../core/ir/units.js";
|
|
2
|
+
import "./print-model.js";
|
|
3
|
+
import { XMLParser } from "fast-xml-parser";
|
|
4
|
+
//#region src/excel/sheet-drawing.ts
|
|
5
|
+
var CHART_URI = "http://schemas.openxmlformats.org/drawingml/2006/chart";
|
|
6
|
+
var parser = new XMLParser({
|
|
7
|
+
ignoreAttributes: false,
|
|
8
|
+
attributeNamePrefix: "@_",
|
|
9
|
+
removeNSPrefix: true,
|
|
10
|
+
parseTagValue: false
|
|
11
|
+
});
|
|
12
|
+
var TWIPS_PER_PT = 20;
|
|
13
|
+
function parseSheetDrawing(drawingXml, drawingPartPath, pkg, worksheet) {
|
|
14
|
+
const root = parser.parse(new TextDecoder().decode(drawingXml))["wsDr"];
|
|
15
|
+
if (!root || typeof root !== "object") return [];
|
|
16
|
+
const rootObj = root;
|
|
17
|
+
const colWidthPt = makeColWidthPt(worksheet);
|
|
18
|
+
const rowHeightPt = makeRowHeightPt(worksheet);
|
|
19
|
+
const rels = pkg.getPartRelationships(drawingPartPath);
|
|
20
|
+
const out = [];
|
|
21
|
+
for (const kind of [
|
|
22
|
+
"twoCellAnchor",
|
|
23
|
+
"oneCellAnchor",
|
|
24
|
+
"absoluteAnchor"
|
|
25
|
+
]) for (const anchor of asArray(rootObj[kind])) {
|
|
26
|
+
if (!anchor || typeof anchor !== "object") continue;
|
|
27
|
+
const a = anchor;
|
|
28
|
+
const chartRelId = chartRelIdOf(a);
|
|
29
|
+
if (!chartRelId) continue;
|
|
30
|
+
const rel = rels.find((r) => r.id === chartRelId);
|
|
31
|
+
const resolved = rel ? pkg.resolveRelatedPart(drawingPartPath, rel) : void 0;
|
|
32
|
+
if (!resolved) continue;
|
|
33
|
+
const from = cellMarker(a["from"]);
|
|
34
|
+
let widthPt = 0;
|
|
35
|
+
let heightPt = 0;
|
|
36
|
+
if (kind === "twoCellAnchor") {
|
|
37
|
+
const to = cellMarker(a["to"]);
|
|
38
|
+
if (!from || !to) continue;
|
|
39
|
+
widthPt = spanPt(from.col, from.colOffPt, to.col, to.colOffPt, colWidthPt);
|
|
40
|
+
heightPt = spanPt(from.row, from.rowOffPt, to.row, to.rowOffPt, rowHeightPt);
|
|
41
|
+
} else {
|
|
42
|
+
const ext = a["ext"];
|
|
43
|
+
if (!ext || typeof ext !== "object") continue;
|
|
44
|
+
const e = ext;
|
|
45
|
+
widthPt = emuToPt(num(e["@_cx"]) ?? 0);
|
|
46
|
+
heightPt = emuToPt(num(e["@_cy"]) ?? 0);
|
|
47
|
+
}
|
|
48
|
+
if (widthPt <= 0 || heightPt <= 0) continue;
|
|
49
|
+
out.push({
|
|
50
|
+
chartPartPath: resolved.path,
|
|
51
|
+
widthPt,
|
|
52
|
+
heightPt,
|
|
53
|
+
anchorRow: from?.row ?? 0
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return out.sort((x, y) => x.anchorRow - y.anchorRow);
|
|
57
|
+
}
|
|
58
|
+
function chartRelIdOf(anchor) {
|
|
59
|
+
const frame = anchor["graphicFrame"];
|
|
60
|
+
if (!frame || typeof frame !== "object") return void 0;
|
|
61
|
+
const graphic = frame["graphic"];
|
|
62
|
+
if (!graphic || typeof graphic !== "object") return void 0;
|
|
63
|
+
const data = graphic["graphicData"];
|
|
64
|
+
if (!data || typeof data !== "object") return void 0;
|
|
65
|
+
const d = data;
|
|
66
|
+
if (d["@_uri"] !== CHART_URI) return void 0;
|
|
67
|
+
const chart = d["chart"];
|
|
68
|
+
if (!chart || typeof chart !== "object") return void 0;
|
|
69
|
+
const id = chart["@_id"];
|
|
70
|
+
return typeof id === "string" && id !== "" ? id : void 0;
|
|
71
|
+
}
|
|
72
|
+
function cellMarker(node) {
|
|
73
|
+
if (!node || typeof node !== "object") return void 0;
|
|
74
|
+
const m = node;
|
|
75
|
+
const col = num(m["col"]);
|
|
76
|
+
const row = num(m["row"]);
|
|
77
|
+
if (col === void 0 || row === void 0) return void 0;
|
|
78
|
+
return {
|
|
79
|
+
col,
|
|
80
|
+
row,
|
|
81
|
+
colOffPt: emuToPt(num(m["colOff"]) ?? 0),
|
|
82
|
+
rowOffPt: emuToPt(num(m["rowOff"]) ?? 0)
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function spanPt(from, fromOffPt, to, toOffPt, trackPt) {
|
|
86
|
+
let span = 0;
|
|
87
|
+
for (let i = from; i < to; i++) span += trackPt(i);
|
|
88
|
+
return span - fromOffPt + toOffPt;
|
|
89
|
+
}
|
|
90
|
+
function makeColWidthPt(ws) {
|
|
91
|
+
return (col) => {
|
|
92
|
+
for (const c of ws.columns) if (col >= c.min - 1 && col <= c.max - 1) return c.widthChars * 105 / TWIPS_PER_PT;
|
|
93
|
+
return 960 / TWIPS_PER_PT;
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
function makeRowHeightPt(ws) {
|
|
97
|
+
return (row) => {
|
|
98
|
+
for (const r of ws.rowHeights) if (r.row === row) return r.heightPt;
|
|
99
|
+
return 300 / TWIPS_PER_PT;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function num(v) {
|
|
103
|
+
if (typeof v === "number" && Number.isFinite(v)) return v;
|
|
104
|
+
if (typeof v === "string" && v !== "") {
|
|
105
|
+
const n = Number(v);
|
|
106
|
+
if (Number.isFinite(n)) return n;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function asArray(v) {
|
|
110
|
+
return Array.isArray(v) ? v : v !== void 0 ? [v] : [];
|
|
111
|
+
}
|
|
112
|
+
//#endregion
|
|
113
|
+
export { parseSheetDrawing };
|
|
@@ -56,5 +56,6 @@ export interface ParsedWorksheet {
|
|
|
56
56
|
readonly printOptions?: XlsxPrintOptions;
|
|
57
57
|
readonly rowBreaks?: ReadonlyArray<number>;
|
|
58
58
|
readonly colBreaks?: ReadonlyArray<number>;
|
|
59
|
+
readonly drawingRelId?: string;
|
|
59
60
|
}
|
|
60
61
|
export declare function parseWorksheet(data: Uint8Array): ParsedWorksheet;
|
|
@@ -32,13 +32,16 @@ function parseWorksheet(data) {
|
|
|
32
32
|
const printOptions = parsePrintOptions(wsObj);
|
|
33
33
|
const rowBreaks = parseBreaks(wsObj, "rowBreaks");
|
|
34
34
|
const colBreaks = parseBreaks(wsObj, "colBreaks");
|
|
35
|
+
const drawingNode = wsObj["drawing"];
|
|
36
|
+
const drawingRelId = drawingNode && typeof drawingNode === "object" ? strAttr(drawingNode, "id") : void 0;
|
|
35
37
|
const printModel = {
|
|
36
38
|
...pageMargins ? { pageMargins } : {},
|
|
37
39
|
...pageSetup ? { pageSetup } : {},
|
|
38
40
|
...fitToPage ? { fitToPage } : {},
|
|
39
41
|
...printOptions ? { printOptions } : {},
|
|
40
42
|
...rowBreaks.length > 0 ? { rowBreaks } : {},
|
|
41
|
-
...colBreaks.length > 0 ? { colBreaks } : {}
|
|
43
|
+
...colBreaks.length > 0 ? { colBreaks } : {},
|
|
44
|
+
...drawingRelId !== void 0 ? { drawingRelId } : {}
|
|
42
45
|
};
|
|
43
46
|
const sheetData = wsObj["sheetData"];
|
|
44
47
|
if (!sheetData || typeof sheetData !== "object") return {
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { pt } from "../core/ir/units.js";
|
|
1
2
|
import { ResourceStore } from "../core/ir/resources.js";
|
|
2
3
|
import { FEATURES } from "../core/ir/features.js";
|
|
3
4
|
import { EMPTY_STYLE_SHEET, resolveBodyStyles } from "../core/style-cascade/resolver.js";
|
|
4
5
|
import "../core/style-cascade/index.js";
|
|
5
6
|
import { bytesInclude } from "../core/bytes.js";
|
|
7
|
+
import { DEFAULT_THEME_PALETTE, makeColorResolver } from "../core/drawingml/colors.js";
|
|
8
|
+
import { parseChart, withChartColorStyle } from "../core/drawingml/chart-parser.js";
|
|
9
|
+
import { parseTheme } from "../core/drawingml/theme-parser.js";
|
|
10
|
+
import { isOoxmlRel } from "../core/opc/relationship-types.js";
|
|
6
11
|
import { OpcPackage } from "../core/opc/package.js";
|
|
7
12
|
import { parseCoreProperties } from "../core/opc/core-properties.js";
|
|
8
13
|
import "../core/opc/index.js";
|
|
@@ -12,6 +17,7 @@ import { parseWorksheet } from "./worksheet-parser.js";
|
|
|
12
17
|
import { EMPTY_XLSX_STYLES, parseXlsxStyles } from "./styles-parser.js";
|
|
13
18
|
import "./index.js";
|
|
14
19
|
import { resolvePrintArea, resolvePrintTitleRows, sectionFromWorksheet, worksheetToBody } from "./print-model.js";
|
|
20
|
+
import { parseSheetDrawing } from "./sheet-drawing.js";
|
|
15
21
|
//#region src/excel/xlsx-reader.ts
|
|
16
22
|
var WORKBOOK_PART = "xl/workbook.xml";
|
|
17
23
|
var SHARED_STRINGS_PART = "xl/sharedStrings.xml";
|
|
@@ -29,6 +35,8 @@ function readXlsx(xlsx) {
|
|
|
29
35
|
const styles = stylesData ? parseXlsxStyles(stylesData) : EMPTY_XLSX_STYLES;
|
|
30
36
|
const workbookRels = pkg.getPartRelationships(WORKBOOK_PART);
|
|
31
37
|
const body = [];
|
|
38
|
+
const charts = /* @__PURE__ */ new Map();
|
|
39
|
+
const resolveColor = buildXlsxColorResolver(pkg, workbookRels);
|
|
32
40
|
let firstSheetSection;
|
|
33
41
|
for (let sheetIdx = 0; sheetIdx < sheets.length; sheetIdx++) {
|
|
34
42
|
const sheet = sheets[sheetIdx];
|
|
@@ -53,6 +61,27 @@ function readXlsx(xlsx) {
|
|
|
53
61
|
...titleRows ? { titleRows } : {},
|
|
54
62
|
gridLines
|
|
55
63
|
}));
|
|
64
|
+
if (worksheet.drawingRelId) {
|
|
65
|
+
const drawingRel = pkg.getPartRelationships(resolved.path).find((r) => r.id === worksheet.drawingRelId);
|
|
66
|
+
const drawing = drawingRel ? pkg.resolveRelatedPart(resolved.path, drawingRel) : void 0;
|
|
67
|
+
if (drawing) for (const ref of parseSheetDrawing(drawing.data, drawing.path, pkg, worksheet)) {
|
|
68
|
+
if (!charts.has(ref.chartPartPath)) {
|
|
69
|
+
const chartData = pkg.getPart(ref.chartPartPath);
|
|
70
|
+
const parsed = chartData ? parseChart(chartData, resolveColor) : null;
|
|
71
|
+
if (!parsed) continue;
|
|
72
|
+
charts.set(ref.chartPartPath, withChartColorStyle(parsed, pkg, ref.chartPartPath, resolveColor));
|
|
73
|
+
}
|
|
74
|
+
body.push({
|
|
75
|
+
kind: "chart",
|
|
76
|
+
chart: {
|
|
77
|
+
chartRelId: ref.chartPartPath,
|
|
78
|
+
width: pt(ref.widthPt),
|
|
79
|
+
height: pt(ref.heightPt),
|
|
80
|
+
paragraphProperties: {}
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
56
85
|
}
|
|
57
86
|
const coreData = pkg.getPart(CORE_PROPS_PART);
|
|
58
87
|
const info = infoFromCore(coreData ? parseCoreProperties(coreData) : void 0);
|
|
@@ -64,11 +93,23 @@ function readXlsx(xlsx) {
|
|
|
64
93
|
...firstSheetSection ? { section: firstSheetSection } : {},
|
|
65
94
|
styles: EMPTY_STYLE_SHEET,
|
|
66
95
|
resources: new ResourceStore(),
|
|
96
|
+
...charts.size > 0 ? { charts } : {},
|
|
67
97
|
...info ? { info } : {}
|
|
68
98
|
},
|
|
69
99
|
losses: []
|
|
70
100
|
};
|
|
71
101
|
}
|
|
102
|
+
function buildXlsxColorResolver(pkg, workbookRels) {
|
|
103
|
+
const palette = new Map(DEFAULT_THEME_PALETTE);
|
|
104
|
+
for (const rel of workbookRels) {
|
|
105
|
+
if (!isOoxmlRel(rel.type, "theme")) continue;
|
|
106
|
+
const resolved = pkg.resolveRelatedPart(WORKBOOK_PART, rel);
|
|
107
|
+
if (!resolved) continue;
|
|
108
|
+
for (const [slot, hex] of parseTheme(resolved.data)) palette.set(slot, hex);
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
return makeColorResolver(palette);
|
|
112
|
+
}
|
|
72
113
|
var xlsxReader = {
|
|
73
114
|
id: "xlsx",
|
|
74
115
|
produces: "flow",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { fetchFontSet } from "../core/fonts/remote-fonts.js";
|
|
2
2
|
import { FontRegistry } from "../core/font/font-registry.js";
|
|
3
3
|
import { signPdf } from "../pdf/signature.js";
|
|
4
|
-
import { renderStyledPdf } from "../pdf/styled-page-renderer.js";
|
|
4
|
+
import { renderStyledPdf, renderStyledPdfEncrypted } from "../pdf/styled-page-renderer.js";
|
|
5
5
|
import "../pdf/index.js";
|
|
6
6
|
import { readXlsx } from "./xlsx-reader.js";
|
|
7
7
|
import { flowRenderOptions } from "../core/converter/project.js";
|
|
@@ -18,18 +18,18 @@ async function convertXlsxToPdf(xlsx, options = {}) {
|
|
|
18
18
|
...options,
|
|
19
19
|
signaturePlaceholder: signature
|
|
20
20
|
} : options;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const fonts = await fetchFontSet({
|
|
21
|
+
const withFonts = renderOptions.fonts ?? renderOptions.fontBytes ? renderOptions : {
|
|
22
|
+
...renderOptions,
|
|
23
|
+
fonts: await fetchFontSet({
|
|
25
24
|
...options.fontFamily ? { family: options.fontFamily } : {},
|
|
26
25
|
...options.fontFetch ? { fetch: options.fontFetch } : {}
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
26
|
+
})
|
|
27
|
+
};
|
|
28
|
+
if (withFonts.encrypt) {
|
|
29
|
+
const args = prepareXlsxStyledRender(xlsx, withFonts);
|
|
30
|
+
return renderStyledPdfEncrypted(args.body, args.styled);
|
|
32
31
|
}
|
|
32
|
+
const pdf = convertXlsxToPdfSync(xlsx, withFonts);
|
|
33
33
|
return signature ? signPdf(pdf, signature) : pdf;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
@@ -38,6 +38,10 @@ async function convertXlsxToPdf(xlsx, options = {}) {
|
|
|
38
38
|
* Internal since 1.0 — see the async variant above.
|
|
39
39
|
*/
|
|
40
40
|
function convertXlsxToPdfSync(xlsx, options) {
|
|
41
|
+
const args = prepareXlsxStyledRender(xlsx, options);
|
|
42
|
+
return renderStyledPdf(args.body, args.styled);
|
|
43
|
+
}
|
|
44
|
+
function prepareXlsxStyledRender(xlsx, options) {
|
|
41
45
|
const fonts = options.fonts ?? (options.fontBytes ? { regular: options.fontBytes } : void 0);
|
|
42
46
|
if (!fonts) throw new Error("convertXlsxToPdfSync requires options.fonts or options.fontBytes");
|
|
43
47
|
const registry = FontRegistry.fromBytes(fonts);
|
|
@@ -56,14 +60,17 @@ function convertXlsxToPdfSync(xlsx, options) {
|
|
|
56
60
|
relationship: "Source",
|
|
57
61
|
description: "Source Excel workbook"
|
|
58
62
|
});
|
|
59
|
-
return
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
63
|
+
return {
|
|
64
|
+
body: flow.body,
|
|
65
|
+
styled: {
|
|
66
|
+
registry,
|
|
67
|
+
...flowRenderOptions(flow),
|
|
68
|
+
...section ? { section } : {},
|
|
69
|
+
...info ? { info } : {},
|
|
70
|
+
...attachments.length > 0 ? { attachments } : {},
|
|
71
|
+
...renderOptions
|
|
72
|
+
}
|
|
73
|
+
};
|
|
67
74
|
}
|
|
68
75
|
//#endregion
|
|
69
76
|
export { convertXlsxToPdf };
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ export { renderStyledPdf } from './pdf/index.js';
|
|
|
4
4
|
export type { StyledRenderOptions, DocumentInfo } from './pdf/index.js';
|
|
5
5
|
export { signPdf } from './pdf/index.js';
|
|
6
6
|
export type { SignaturePlaceholder, SignerCredentials, SignatureOptions } from './pdf/index.js';
|
|
7
|
+
export type { PdfEncryptOptions, PdfPermissions } from './pdf/index.js';
|
|
7
8
|
export { FontRegistry, parseTtf, subsetTtf } from './core/font/index.js';
|
|
8
9
|
export type { FontBytesByVariant, FontVariant, ParsedTtf } from './core/font/index.js';
|
|
9
10
|
export { getHyphenator, createLanguageHyphenator, createHyphenator, splitPatternBundle, } from './core/hyphenation/index.js';
|
|
@@ -24,5 +25,6 @@ export type { FontProvider, FontRequest, FontAnswer } from './core/fonts/provide
|
|
|
24
25
|
export { svgWriter, writeSvg } from './svg/svg-writer.js';
|
|
25
26
|
export type { SvgWriteOptions } from './svg/svg-writer.js';
|
|
26
27
|
export { htmlWriter, writeHtml } from './html/html-writer.js';
|
|
28
|
+
export { docxWriter, writeDocx } from './word/docx-writer.js';
|
|
27
29
|
export { layoutStyledDocument } from './layout/styled-layout.js';
|
|
28
30
|
export type { LaidOutDocument } from './layout/page-doc.js';
|
package/dist/esm/index.js
CHANGED
|
@@ -15,8 +15,9 @@ import { createLanguageHyphenator, getHyphenator } from "./core/hyphenation/inde
|
|
|
15
15
|
import { docxReader, readDocx } from "./word/docx-reader.js";
|
|
16
16
|
import { readXlsx, xlsxReader } from "./excel/xlsx-reader.js";
|
|
17
17
|
import { NO_FONT, callerFontProvider, chainProviders, embeddedDocFontProvider, isEmbeddingRestricted, localFontProvider, readOs2FsType, remoteFontProvider } from "./core/fonts/provider.js";
|
|
18
|
+
import { docxWriter, writeDocx } from "./word/docx-writer.js";
|
|
18
19
|
import { htmlWriter, writeHtml } from "./html/html-writer.js";
|
|
19
20
|
import { svgWriter, writeSvg } from "./svg/svg-writer.js";
|
|
20
21
|
import { createConverter } from "./core/converter/facade.js";
|
|
21
22
|
import { Ream } from "./core/converter/ream.js";
|
|
22
|
-
export { ConversionLossError, FEATURES, FontRegistry, NO_FONT, Ream, ResourceStore, callerFontProvider, chainProviders, createConverter, createHyphenator, createLanguageHyphenator, docxReader, eighthPtToPt, embeddedDocFontProvider, emuToPt, fetchFontSet, formatLoss, getHyphenator, halfPtToPt, htmlWriter, inchToPt, isEmbeddingRestricted, layoutStyledDocument, localFontProvider, mmToPt, parseTtf, pt, pxToPt, readDocx, readOs2FsType, readXlsx, remoteFontProvider, renderStyledPdf, resolveFamilyKey, signPdf, splitPatternBundle, subsetTtf, svgWriter, twipsToPt, writeHtml, writeSvg, xlsxReader };
|
|
23
|
+
export { ConversionLossError, FEATURES, FontRegistry, NO_FONT, Ream, ResourceStore, callerFontProvider, chainProviders, createConverter, createHyphenator, createLanguageHyphenator, docxReader, docxWriter, eighthPtToPt, embeddedDocFontProvider, emuToPt, fetchFontSet, formatLoss, getHyphenator, halfPtToPt, htmlWriter, inchToPt, isEmbeddingRestricted, layoutStyledDocument, localFontProvider, mmToPt, parseTtf, pt, pxToPt, readDocx, readOs2FsType, readXlsx, remoteFontProvider, renderStyledPdf, resolveFamilyKey, signPdf, splitPatternBundle, subsetTtf, svgWriter, twipsToPt, writeDocx, writeHtml, writeSvg, xlsxReader };
|
|
@@ -5,6 +5,7 @@ import { Hyphenator } from '../core/hyphenation/index.js';
|
|
|
5
5
|
import { LaidOutDocument, PageItem } from './page-doc.js';
|
|
6
6
|
import { AttachedFile } from '../pdf/embedded-file.js';
|
|
7
7
|
import { SignaturePlaceholder } from '../pdf/signature.js';
|
|
8
|
+
import { PdfEncryptOptions } from '../pdf/encryption.js';
|
|
8
9
|
import { ResourceStore } from '../core/ir/index.js';
|
|
9
10
|
import { StructTreeBuilder } from '../pdf/struct-tree.js';
|
|
10
11
|
export type PdfALevel = 'PDF/A-1b' | 'PDF/A-1a' | 'PDF/A-2b' | 'PDF/A-2u' | 'PDF/A-2a' | 'PDF/A-3b' | 'PDF/A-3u' | 'PDF/A-3a';
|
|
@@ -39,6 +40,7 @@ export interface StyledRenderOptions {
|
|
|
39
40
|
readonly tagged?: boolean;
|
|
40
41
|
readonly pdfUA?: boolean;
|
|
41
42
|
readonly language?: string;
|
|
43
|
+
readonly encrypt?: PdfEncryptOptions;
|
|
42
44
|
readonly attachments?: ReadonlyArray<AttachedFile>;
|
|
43
45
|
readonly signaturePlaceholder?: SignaturePlaceholder;
|
|
44
46
|
}
|