reamkit 1.2.0 → 1.3.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 +3 -2
- package/dist/esm/core/converter/ream.js +4 -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 +1 -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 +1 -0
- 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 +4 -0
- package/dist/esm/word/docx-reader.js +7 -11
- package/dist/esm/word/docx-to-pdf.js +23 -13
- package/package.json +1 -1
|
@@ -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';
|
|
@@ -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
|
}
|