abstract-document 20.0.4 → 20.1.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/CHANGELOG.md +4 -0
- package/lib/abstract-document/abstract-doc.d.ts.map +1 -1
- package/lib/abstract-document/abstract-doc.js +2 -2
- package/lib/abstract-document/atoms/atom.d.ts +3 -3
- package/lib/abstract-document/atoms/atom.d.ts.map +1 -1
- package/lib/abstract-document/default-styles.d.ts.map +1 -1
- package/lib/abstract-document/default-styles.js.map +1 -1
- package/lib/abstract-document/markdown/markdown.d.ts.map +1 -1
- package/lib/abstract-document/markdown/markdown.js +4 -4
- package/lib/abstract-document/markdown/markdown.js.map +1 -1
- package/lib/abstract-document/numberings/numbering-definition.d.ts +2 -2
- package/lib/abstract-document/numberings/numbering-definition.d.ts.map +1 -1
- package/lib/abstract-document/numberings/numbering-level-definition.js +2 -2
- package/lib/abstract-document/page/master-page.d.ts +1 -1
- package/lib/abstract-document/page/master-page.d.ts.map +1 -1
- package/lib/abstract-document/page/master-page.js +1 -1
- package/lib/abstract-document/page/master-page.js.map +1 -1
- package/lib/abstract-document/page/section.d.ts +1 -1
- package/lib/abstract-document/page/section.d.ts.map +1 -1
- package/lib/abstract-document/page/section.js +2 -2
- package/lib/abstract-document/page/section.js.map +1 -1
- package/lib/abstract-document/primitives/font.d.ts +1 -1
- package/lib/abstract-document/primitives/font.d.ts.map +1 -1
- package/lib/abstract-document/primitives/font.js +1 -1
- package/lib/abstract-document/primitives/font.js.map +1 -1
- package/lib/abstract-document/primitives/layout-foundation-color.d.ts.map +1 -1
- package/lib/abstract-document/primitives/layout-foundation-color.js.map +1 -1
- package/lib/abstract-document/primitives/layout-foundation.d.ts.map +1 -1
- package/lib/abstract-document/primitives/layout-foundation.js.map +1 -1
- package/lib/abstract-document/resources.d.ts +4 -3
- package/lib/abstract-document/resources.d.ts.map +1 -1
- package/lib/abstract-document/resources.js +4 -4
- package/lib/abstract-document/resources.js.map +1 -1
- package/lib/abstract-document/section-elements/group.d.ts +1 -1
- package/lib/abstract-document/section-elements/group.d.ts.map +1 -1
- package/lib/abstract-document/section-elements/group.js +2 -2
- package/lib/abstract-document/section-elements/group.js.map +1 -1
- package/lib/abstract-document/section-elements/page-break.d.ts +2 -2
- package/lib/abstract-document/section-elements/page-break.d.ts.map +1 -1
- package/lib/abstract-document/section-elements/page-break.js +1 -2
- package/lib/abstract-document/section-elements/page-break.js.map +1 -1
- package/lib/abstract-document/section-elements/paragraph.d.ts +2 -2
- package/lib/abstract-document/section-elements/paragraph.d.ts.map +1 -1
- package/lib/abstract-document/section-elements/paragraph.js +2 -2
- package/lib/abstract-document/section-elements/paragraph.js.map +1 -1
- package/lib/abstract-document/section-elements/section-element.d.ts +1 -1
- package/lib/abstract-document/section-elements/section-element.d.ts.map +1 -1
- package/lib/abstract-document/section-elements/section-element.js.map +1 -1
- package/lib/abstract-document/section-elements/table.d.ts +1 -1
- package/lib/abstract-document/section-elements/table.d.ts.map +1 -1
- package/lib/abstract-document/section-elements/table.js +2 -2
- package/lib/abstract-document/section-elements/table.js.map +1 -1
- package/lib/abstract-document/styles/group-style.js +3 -3
- package/lib/abstract-document/styles/page-style.d.ts.map +1 -1
- package/lib/abstract-document/styles/page-style.js +3 -7
- package/lib/abstract-document/styles/page-style.js.map +1 -1
- package/lib/abstract-document/styles/paragraph-style.d.ts +1 -1
- package/lib/abstract-document/styles/paragraph-style.d.ts.map +1 -1
- package/lib/abstract-document/styles/paragraph-style.js +5 -5
- package/lib/abstract-document/styles/paragraph-style.js.map +1 -1
- package/lib/abstract-document/styles/style.d.ts.map +1 -1
- package/lib/abstract-document/styles/style.js.map +1 -1
- package/lib/abstract-document/styles/table-cell-style.d.ts +1 -1
- package/lib/abstract-document/styles/table-cell-style.d.ts.map +1 -1
- package/lib/abstract-document/styles/table-cell-style.js +7 -7
- package/lib/abstract-document/styles/table-cell-style.js.map +1 -1
- package/lib/abstract-document/styles/table-style.d.ts +1 -1
- package/lib/abstract-document/styles/table-style.d.ts.map +1 -1
- package/lib/abstract-document/styles/table-style.js +2 -2
- package/lib/abstract-document/styles/table-style.js.map +1 -1
- package/lib/abstract-document/styles/text-style.d.ts.map +1 -1
- package/lib/abstract-document/styles/text-style.js +16 -21
- package/lib/abstract-document/styles/text-style.js.map +1 -1
- package/lib/abstract-document/table/table-cell.js +2 -2
- package/lib/abstract-document/table/table-row.d.ts +2 -3
- package/lib/abstract-document/table/table-row.d.ts.map +1 -1
- package/lib/abstract-document/table/table-row.js +2 -3
- package/lib/abstract-document/table/table-row.js.map +1 -1
- package/lib/abstract-document/types.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx/document-container.d.ts +5 -5
- package/lib/abstract-document-exporters/docx/document-container.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx/document-container.js +14 -13
- package/lib/abstract-document-exporters/docx/document-container.js.map +1 -1
- package/lib/abstract-document-exporters/docx/docx-constants.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx/docx-constants.js +1 -4
- package/lib/abstract-document-exporters/docx/docx-constants.js.map +1 -1
- package/lib/abstract-document-exporters/docx/ref-container.d.ts +8 -10
- package/lib/abstract-document-exporters/docx/ref-container.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx/ref-container.js +34 -35
- package/lib/abstract-document-exporters/docx/ref-container.js.map +1 -1
- package/lib/abstract-document-exporters/docx/string-utils.d.ts +2 -1
- package/lib/abstract-document-exporters/docx/string-utils.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx/string-utils.js +6 -4
- package/lib/abstract-document-exporters/docx/string-utils.js.map +1 -1
- package/lib/abstract-document-exporters/docx/xml-writer.d.ts +12 -33
- package/lib/abstract-document-exporters/docx/xml-writer.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx/xml-writer.js +243 -249
- package/lib/abstract-document-exporters/docx/xml-writer.js.map +1 -1
- package/lib/abstract-document-exporters/docx2/render-image.d.ts +1 -1
- package/lib/abstract-document-exporters/docx2/render-image.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx2/render-image.js +4 -16
- package/lib/abstract-document-exporters/docx2/render-image.js.map +1 -1
- package/lib/abstract-document-exporters/docx2/render.d.ts.map +1 -1
- package/lib/abstract-document-exporters/docx2/render.js +28 -38
- package/lib/abstract-document-exporters/docx2/render.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/font.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/font.js +13 -14
- package/lib/abstract-document-exporters/pdf/font.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/header-footer.d.ts +8 -0
- package/lib/abstract-document-exporters/pdf/header-footer.d.ts.map +1 -0
- package/lib/abstract-document-exporters/pdf/header-footer.js +31 -0
- package/lib/abstract-document-exporters/pdf/header-footer.js.map +1 -0
- package/lib/abstract-document-exporters/pdf/measure.d.ts +4 -4
- package/lib/abstract-document-exporters/pdf/measure.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/measure.js +29 -31
- package/lib/abstract-document-exporters/pdf/measure.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/page.d.ts +15 -0
- package/lib/abstract-document-exporters/pdf/page.d.ts.map +1 -0
- package/lib/abstract-document-exporters/pdf/page.js +2 -0
- package/lib/abstract-document-exporters/pdf/page.js.map +1 -0
- package/lib/abstract-document-exporters/pdf/paginate.d.ts +2 -20
- package/lib/abstract-document-exporters/pdf/paginate.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/paginate.js +8 -45
- package/lib/abstract-document-exporters/pdf/paginate.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/pre-process.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/pre-process.js +8 -35
- package/lib/abstract-document-exporters/pdf/pre-process.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/render-image.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/render-image.js +24 -34
- package/lib/abstract-document-exporters/pdf/render-image.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/render.d.ts +4 -3
- package/lib/abstract-document-exporters/pdf/render.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/render.js +60 -50
- package/lib/abstract-document-exporters/pdf/render.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/std-fonts.js +1 -1
- package/lib/abstract-document-exporters/pdf/std-fonts.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/textRunRow.d.ts +3 -3
- package/lib/abstract-document-exporters/pdf/textRunRow.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/textRunRow.js +6 -6
- package/lib/abstract-document-exporters/pdf/textRunRow.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/update-refs.d.ts +1 -1
- package/lib/abstract-document-exporters/pdf/update-refs.d.ts.map +1 -1
- package/lib/abstract-document-exporters/pdf/update-refs.js +3 -2
- package/lib/abstract-document-exporters/pdf/update-refs.js.map +1 -1
- package/lib/abstract-document-exporters/shared/get_resources.d.ts.map +1 -1
- package/lib/abstract-document-exporters/shared/get_resources.js.map +1 -1
- package/lib/abstract-document-jsx/index.d.ts +2 -3
- package/lib/abstract-document-jsx/index.d.ts.map +1 -1
- package/lib/abstract-document-jsx/index.js +10 -6
- package/lib/abstract-document-jsx/index.js.map +1 -1
- package/lib/abstract-document-xml/abstract-doc-of-xml/abstract-doc-of-xml.d.ts +3 -7
- package/lib/abstract-document-xml/abstract-doc-of-xml/abstract-doc-of-xml.d.ts.map +1 -1
- package/lib/abstract-document-xml/abstract-doc-of-xml/abstract-doc-of-xml.js +5 -3
- package/lib/abstract-document-xml/abstract-doc-of-xml/abstract-doc-of-xml.js.map +1 -1
- package/lib/abstract-document-xml/abstract-doc-of-xml/creator.d.ts.map +1 -1
- package/lib/abstract-document-xml/abstract-doc-of-xml/creator.js +1 -3
- package/lib/abstract-document-xml/abstract-doc-of-xml/creator.js.map +1 -1
- package/lib/abstract-document-xml/abstract-doc-of-xml/custom-elements.d.ts.map +1 -1
- package/lib/abstract-document-xml/abstract-doc-of-xml/custom-elements.js +4 -8
- package/lib/abstract-document-xml/abstract-doc-of-xml/custom-elements.js.map +1 -1
- package/lib/abstract-document-xml/xsd-template/xsd-template.js +2 -2
- package/lib/abstract-document-xml/xsd-template/xsd-template.js.map +1 -1
- package/package.json +22 -22
- package/src/abstract-document/abstract-doc.ts +6 -6
- package/src/abstract-document/atoms/atom.ts +3 -3
- package/src/abstract-document/default-styles.ts +1 -1
- package/src/abstract-document/markdown/markdown.ts +5 -5
- package/src/abstract-document/numberings/numbering-definition.ts +2 -2
- package/src/abstract-document/numberings/numbering-level-definition.ts +2 -2
- package/src/abstract-document/page/master-page.ts +2 -2
- package/src/abstract-document/page/section.ts +3 -3
- package/src/abstract-document/primitives/font.ts +1 -12
- package/src/abstract-document/primitives/layout-foundation-color.ts +1 -4
- package/src/abstract-document/primitives/layout-foundation.ts +1 -4
- package/src/abstract-document/resources.ts +9 -14
- package/src/abstract-document/section-elements/group.ts +3 -3
- package/src/abstract-document/section-elements/page-break.ts +2 -3
- package/src/abstract-document/section-elements/paragraph.ts +4 -4
- package/src/abstract-document/section-elements/section-element.ts +1 -1
- package/src/abstract-document/section-elements/table.ts +3 -3
- package/src/abstract-document/styles/group-style.ts +3 -3
- package/src/abstract-document/styles/page-style.ts +3 -7
- package/src/abstract-document/styles/paragraph-style.ts +6 -14
- package/src/abstract-document/styles/style.ts +1 -5
- package/src/abstract-document/styles/table-cell-style.ts +8 -11
- package/src/abstract-document/styles/table-style.ts +3 -8
- package/src/abstract-document/styles/text-style.ts +16 -21
- package/src/abstract-document/table/table-cell.ts +2 -2
- package/src/abstract-document/table/table-row.ts +3 -4
- package/src/abstract-document/types.ts +0 -1
- package/src/abstract-document-exporters/docx/document-container.ts +24 -13
- package/src/abstract-document-exporters/docx/docx-constants.ts +2 -6
- package/src/abstract-document-exporters/docx/ref-container.ts +48 -41
- package/src/abstract-document-exporters/docx/string-utils.ts +6 -6
- package/src/abstract-document-exporters/docx/xml-writer.ts +261 -266
- package/src/abstract-document-exporters/docx2/render-image.ts +15 -49
- package/src/abstract-document-exporters/docx2/render.ts +64 -139
- package/src/abstract-document-exporters/pdf/font.ts +17 -23
- package/src/abstract-document-exporters/pdf/header-footer.ts +43 -0
- package/src/abstract-document-exporters/pdf/measure.ts +50 -103
- package/src/abstract-document-exporters/pdf/page.ts +16 -0
- package/src/abstract-document-exporters/pdf/paginate.ts +29 -125
- package/src/abstract-document-exporters/pdf/pre-process.ts +11 -47
- package/src/abstract-document-exporters/pdf/render-image.ts +29 -46
- package/src/abstract-document-exporters/pdf/render.ts +84 -129
- package/src/abstract-document-exporters/pdf/std-fonts.ts +1 -1
- package/src/abstract-document-exporters/pdf/textRunRow.ts +12 -23
- package/src/abstract-document-exporters/pdf/update-refs.ts +10 -33
- package/src/abstract-document-exporters/shared/get_resources.ts +4 -4
- package/src/abstract-document-jsx/index.ts +38 -26
- package/src/abstract-document-xml/abstract-doc-of-xml/abstract-doc-of-xml.ts +14 -26
- package/src/abstract-document-xml/abstract-doc-of-xml/creator.ts +10 -28
- package/src/abstract-document-xml/abstract-doc-of-xml/custom-elements.tsx +8 -30
- package/src/abstract-document-xml/xsd-template/xsd-template.ts +2 -2
|
@@ -1,18 +1,14 @@
|
|
|
1
|
-
import * as AD from "../../abstract-document/index.js";
|
|
2
1
|
import { exhaustiveCheck } from "ts-exhaustive-check";
|
|
3
|
-
|
|
4
|
-
import type { Page } from "./paginate.js";
|
|
5
|
-
// oxlint-disable-next-line import/no-cycle -- both sides only call each other from function bodies
|
|
6
|
-
import { getHeaderAndFooter } from "./paginate.js";
|
|
2
|
+
import * as AD from "../../abstract-document/index.js";
|
|
7
3
|
import { registerFonts, getFontNameStyle } from "./font.js";
|
|
8
|
-
|
|
9
|
-
|
|
4
|
+
import { getHeaderAndFooter } from "./header-footer.js";
|
|
5
|
+
import type { Page } from "./page.js";
|
|
10
6
|
|
|
11
7
|
const widthOfStringCache = new Map<string, number>();
|
|
12
8
|
const heightOfStringCache = new Map<string, number>();
|
|
13
9
|
|
|
14
|
-
export function measure(pdfKit: PDFKit.PDFDocument, document: AD.AbstractDoc.AbstractDoc): Map<
|
|
15
|
-
|
|
10
|
+
export function measure(pdfKit: PDFKit.PDFDocument, document: AD.AbstractDoc.AbstractDoc): Map<object, AD.Size.Size> {
|
|
11
|
+
const pdf = new pdfKit();
|
|
16
12
|
registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
|
|
17
13
|
const result = mergeMaps(document.children.map((s) => measureSection(pdf, document, s)));
|
|
18
14
|
widthOfStringCache.clear();
|
|
@@ -24,15 +20,11 @@ export function measurePages(
|
|
|
24
20
|
pdfKit: PDFKit.PDFDocument,
|
|
25
21
|
document: AD.AbstractDoc.AbstractDoc,
|
|
26
22
|
pages: ReadonlyArray<Page>
|
|
27
|
-
): Map<
|
|
23
|
+
): Map<object, AD.Size.Size> {
|
|
28
24
|
const pdf = new pdfKit();
|
|
29
25
|
registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
|
|
30
26
|
return mergeMaps(
|
|
31
|
-
pages.flatMap((page) =>
|
|
32
|
-
page.columns.map(({ elements }) =>
|
|
33
|
-
measureSection(pdf, document, page.section, page.header, page.footer, elements)
|
|
34
|
-
)
|
|
35
|
-
)
|
|
27
|
+
pages.flatMap((page) => page.columns.map(({ elements }) => measureSection(pdf, document, page.section, page.header, page.footer, elements)))
|
|
36
28
|
);
|
|
37
29
|
}
|
|
38
30
|
|
|
@@ -43,10 +35,10 @@ function measureSection(
|
|
|
43
35
|
separateHeader?: ReadonlyArray<AD.SectionElement.SectionElement>,
|
|
44
36
|
separateFooter?: ReadonlyArray<AD.SectionElement.SectionElement>,
|
|
45
37
|
separateChildren?: ReadonlyArray<AD.SectionElement.SectionElement>
|
|
46
|
-
): Map<
|
|
47
|
-
const header = separateHeader
|
|
48
|
-
const footer = separateFooter
|
|
49
|
-
const children = separateChildren
|
|
38
|
+
): Map<object, AD.Size.Size> {
|
|
39
|
+
const header = separateHeader ?? section.page.header;
|
|
40
|
+
const footer = separateFooter ?? section.page.footer;
|
|
41
|
+
const children = separateChildren ?? section.children;
|
|
50
42
|
|
|
51
43
|
const pageWidth = AD.PageStyle.getWidth(section.page.style);
|
|
52
44
|
const pageHeight = AD.PageStyle.getHeight(section.page.style);
|
|
@@ -71,9 +63,7 @@ function measureSection(
|
|
|
71
63
|
|
|
72
64
|
//header and footer sizes for the first page
|
|
73
65
|
const firstPageHeaderAndFooters = getHeaderAndFooter(section, 1);
|
|
74
|
-
const firstPageHeaderAndFootersExtracted: ReadonlyArray<
|
|
75
|
-
[ReadonlyArray<AD.SectionElement.SectionElement>, AD.LayoutFoundation.LayoutFoundation]
|
|
76
|
-
> = [
|
|
66
|
+
const firstPageHeaderAndFootersExtracted: ReadonlyArray<[ReadonlyArray<AD.SectionElement.SectionElement>, AD.LayoutFoundation.LayoutFoundation]> = [
|
|
77
67
|
[firstPageHeaderAndFooters.header, firstPageHeaderAndFooters.headerMargins],
|
|
78
68
|
[firstPageHeaderAndFooters.footer, firstPageHeaderAndFooters.footerMargins],
|
|
79
69
|
];
|
|
@@ -92,7 +82,7 @@ function measureSectionElement(
|
|
|
92
82
|
parentResources: AD.Resources.Resources,
|
|
93
83
|
availableSize: AD.Size.Size,
|
|
94
84
|
element: AD.SectionElement.SectionElement
|
|
95
|
-
): Map<
|
|
85
|
+
): Map<object, AD.Size.Size> {
|
|
96
86
|
const resources = AD.Resources.mergeResources([parentResources, element]);
|
|
97
87
|
switch (element.type) {
|
|
98
88
|
case "Paragraph":
|
|
@@ -108,8 +98,8 @@ function measureSectionElement(
|
|
|
108
98
|
}
|
|
109
99
|
}
|
|
110
100
|
|
|
111
|
-
function measurePageBreak(availableSize: AD.Size.Size, pageBreak: AD.PageBreak.PageBreak): Map<
|
|
112
|
-
|
|
101
|
+
function measurePageBreak(availableSize: AD.Size.Size, pageBreak: AD.PageBreak.PageBreak): Map<object, AD.Size.Size> {
|
|
102
|
+
const desiredSizes = new Map<object, AD.Size.Size>();
|
|
113
103
|
desiredSizes.set(pageBreak, availableSize);
|
|
114
104
|
return desiredSizes;
|
|
115
105
|
}
|
|
@@ -119,7 +109,7 @@ function measureParagraph(
|
|
|
119
109
|
resources: AD.Resources.Resources,
|
|
120
110
|
availableSize: AD.Size.Size,
|
|
121
111
|
paragraph: AD.Paragraph.Paragraph
|
|
122
|
-
): Map<
|
|
112
|
+
): Map<object, AD.Size.Size> {
|
|
123
113
|
const style = AD.Resources.getStyle(
|
|
124
114
|
undefined,
|
|
125
115
|
paragraph.style,
|
|
@@ -133,7 +123,7 @@ function measureParagraph(
|
|
|
133
123
|
const contentAvailableSize = AD.Size.create(contentAvailableWidth, contentAvailableHeight);
|
|
134
124
|
|
|
135
125
|
let paragraphHeight = styleMargins.top + styleMargins.bottom;
|
|
136
|
-
|
|
126
|
+
const desiredSizes = new Map<object, AD.Size.Size>();
|
|
137
127
|
|
|
138
128
|
const rows: Array<Array<AD.Atom.Atom>> = [];
|
|
139
129
|
let currentRow: Array<AD.Atom.Atom> = [];
|
|
@@ -154,19 +144,12 @@ function measureParagraph(
|
|
|
154
144
|
let currentRowHeight = 0;
|
|
155
145
|
let concatenatedText = "";
|
|
156
146
|
let hasAtomImage = false;
|
|
157
|
-
let textOptions;
|
|
147
|
+
let textOptions: AD.TextStyle.TextStyle | undefined = undefined;
|
|
158
148
|
for (const atom of row) {
|
|
159
149
|
if (atom.type === "Image") {
|
|
160
150
|
hasAtomImage = true;
|
|
161
151
|
}
|
|
162
|
-
const atomSize = measureAtom(
|
|
163
|
-
pdfKit,
|
|
164
|
-
resources,
|
|
165
|
-
style.textStyle,
|
|
166
|
-
contentAvailableSize,
|
|
167
|
-
contentAvailableSize.width - currentRowWidth,
|
|
168
|
-
atom
|
|
169
|
-
);
|
|
152
|
+
const atomSize = measureAtom(pdfKit, resources, style.textStyle, contentAvailableSize, contentAvailableSize.width - currentRowWidth, atom);
|
|
170
153
|
if (atom.type === "TextRun" || atom.type === "TextField" || atom.type === "HyperLink") {
|
|
171
154
|
concatenatedText += atom.text;
|
|
172
155
|
textOptions = getBiggestStyle(atom, style, resources, textOptions);
|
|
@@ -197,7 +180,7 @@ function measureParagraph(
|
|
|
197
180
|
// );
|
|
198
181
|
|
|
199
182
|
const height = pdfKit.heightOfString(concatenatedText, {
|
|
200
|
-
width: textOptions
|
|
183
|
+
width: textOptions?.lineBreak === false ? Infinity : availableSize.width,
|
|
201
184
|
...textOptions,
|
|
202
185
|
});
|
|
203
186
|
paragraphHeight += height;
|
|
@@ -239,25 +222,19 @@ export function measureTable(
|
|
|
239
222
|
resources: AD.Resources.Resources,
|
|
240
223
|
availableSize: AD.Size.Size,
|
|
241
224
|
table: AD.Table.Table
|
|
242
|
-
): Map<
|
|
243
|
-
const style = AD.Resources.getStyle(
|
|
244
|
-
undefined,
|
|
245
|
-
table.style,
|
|
246
|
-
"TableStyle",
|
|
247
|
-
table.styleName,
|
|
248
|
-
resources
|
|
249
|
-
) as AD.TableStyle.TableStyle;
|
|
225
|
+
): Map<object, AD.Size.Size> {
|
|
226
|
+
const style = AD.Resources.getStyle(undefined, table.style, "TableStyle", table.styleName, resources) as AD.TableStyle.TableStyle;
|
|
250
227
|
const styleMargins = AD.LayoutFoundation.orDefault(style.margins);
|
|
251
228
|
const tableAvailableWidth = availableSize.width - (styleMargins.left + styleMargins.right);
|
|
252
|
-
const numInfinityColumns = table.columnWidths.filter((w) => !isFinite(w)).length;
|
|
253
|
-
const fixedColumnsWidth = table.columnWidths.filter((w) => isFinite(w)).reduce((a, b) => a + b, 0);
|
|
229
|
+
const numInfinityColumns = table.columnWidths.filter((w) => !Number.isFinite(w)).length;
|
|
230
|
+
const fixedColumnsWidth = table.columnWidths.filter((w) => Number.isFinite(w)).reduce((a, b) => a + b, 0);
|
|
254
231
|
const infinityWidth = (tableAvailableWidth - fixedColumnsWidth) / numInfinityColumns;
|
|
255
|
-
const columnWidths = table.columnWidths.map((w) => (isFinite(w) ? w : infinityWidth));
|
|
256
|
-
const desiredSizes = new Map<
|
|
232
|
+
const columnWidths = table.columnWidths.map((w) => (Number.isFinite(w) ? w : infinityWidth));
|
|
233
|
+
const desiredSizes = new Map<object, AD.Size.Size>();
|
|
257
234
|
const rows = [...table.headerRows, ...table.children];
|
|
258
|
-
for (
|
|
235
|
+
for (const row of rows) {
|
|
259
236
|
let column = 0;
|
|
260
|
-
for (
|
|
237
|
+
for (const cell of row.children) {
|
|
261
238
|
const cellStyle = AD.Resources.getStyle(
|
|
262
239
|
style.cellStyle,
|
|
263
240
|
cell.style,
|
|
@@ -278,7 +255,7 @@ export function measureTable(
|
|
|
278
255
|
const contentAvailableWidth = cellWidth - (cellStylePadding.left + cellStylePadding.right);
|
|
279
256
|
let cellDesiredHeight = cellStylePadding.top + cellStylePadding.bottom;
|
|
280
257
|
|
|
281
|
-
for (
|
|
258
|
+
for (const element of cell.children) {
|
|
282
259
|
const elementAvailableSize = AD.Size.create(contentAvailableWidth, Infinity);
|
|
283
260
|
const elementSizes = measureSectionElement(pdfKit, resources, elementAvailableSize, element);
|
|
284
261
|
elementSizes.forEach((v, k) => desiredSizes.set(k, v));
|
|
@@ -321,7 +298,7 @@ export function measureTable(
|
|
|
321
298
|
}
|
|
322
299
|
}
|
|
323
300
|
|
|
324
|
-
const desiredWidth = table.columnWidths.some((w) => !isFinite(w))
|
|
301
|
+
const desiredWidth = table.columnWidths.some((w) => !Number.isFinite(w))
|
|
325
302
|
? availableSize.width
|
|
326
303
|
: table.columnWidths.reduce((a, b) => a + b, styleMargins.left + styleMargins.right);
|
|
327
304
|
let desiredHeight = styleMargins.top + styleMargins.bottom;
|
|
@@ -330,8 +307,8 @@ export function measureTable(
|
|
|
330
307
|
const rowHeight = minRowHeights[i];
|
|
331
308
|
desiredHeight += rowHeight;
|
|
332
309
|
desiredSizes.set(row, AD.Size.create(desiredWidth, rowHeight));
|
|
333
|
-
for (
|
|
334
|
-
const cellSize = desiredSizes.get(cell)
|
|
310
|
+
for (const cell of row.children) {
|
|
311
|
+
const cellSize = desiredSizes.get(cell) ?? AD.Size.create(0, 0);
|
|
335
312
|
desiredSizes.set(cell, AD.Size.create(cellSize.width, rowHeight));
|
|
336
313
|
}
|
|
337
314
|
}
|
|
@@ -346,11 +323,9 @@ function measureGroup(
|
|
|
346
323
|
resources: AD.Resources.Resources,
|
|
347
324
|
availableSize: AD.Size.Size,
|
|
348
325
|
keepTogether: AD.Group.Group
|
|
349
|
-
): Map<
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
);
|
|
353
|
-
let desiredHeight = keepTogether.children.reduce(
|
|
326
|
+
): Map<object, AD.Size.Size> {
|
|
327
|
+
const desiredSizes = mergeMaps(keepTogether.children.map((e) => measureSectionElement(pdfKit, resources, availableSize, e)));
|
|
328
|
+
const desiredHeight = keepTogether.children.reduce(
|
|
354
329
|
(sum, e) => sum + (AD.Position.isPositionAbsolute(e) ? 0 : getDesiredSize(e, desiredSizes).height),
|
|
355
330
|
0.0
|
|
356
331
|
);
|
|
@@ -402,7 +377,7 @@ function measureLineBreak(
|
|
|
402
377
|
"TextStyle",
|
|
403
378
|
lineBreak.styleName,
|
|
404
379
|
resources,
|
|
405
|
-
lineBreak.nestedStyleNames
|
|
380
|
+
lineBreak.nestedStyleNames ?? []
|
|
406
381
|
) as AD.TextStyle.TextStyle;
|
|
407
382
|
return measureText(pdfKit, "A", style, availableSize);
|
|
408
383
|
}
|
|
@@ -420,7 +395,7 @@ function measureTextRun(
|
|
|
420
395
|
"TextStyle",
|
|
421
396
|
textRun.styleName,
|
|
422
397
|
resources,
|
|
423
|
-
textRun.nestedStyleNames
|
|
398
|
+
textRun.nestedStyleNames ?? []
|
|
424
399
|
) as AD.TextStyle.TextStyle;
|
|
425
400
|
return measureText(pdf, textRun.text, style, availableSize, true);
|
|
426
401
|
}
|
|
@@ -432,13 +407,7 @@ function measureHyperLink(
|
|
|
432
407
|
hyperLink: AD.HyperLink.HyperLink,
|
|
433
408
|
availableSize: AD.Size.Size
|
|
434
409
|
): AD.Size.Size {
|
|
435
|
-
const style = AD.Resources.getStyle(
|
|
436
|
-
textStyle,
|
|
437
|
-
hyperLink.style,
|
|
438
|
-
"TextStyle",
|
|
439
|
-
hyperLink.styleName,
|
|
440
|
-
resources
|
|
441
|
-
) as AD.TextStyle.TextStyle;
|
|
410
|
+
const style = AD.Resources.getStyle(textStyle, hyperLink.style, "TextStyle", hyperLink.styleName, resources) as AD.TextStyle.TextStyle;
|
|
442
411
|
return measureText(pdf, hyperLink.text, style, availableSize);
|
|
443
412
|
}
|
|
444
413
|
|
|
@@ -449,13 +418,7 @@ function measureTextField(
|
|
|
449
418
|
textField: AD.TextField.TextField,
|
|
450
419
|
availableSize: AD.Size.Size
|
|
451
420
|
): AD.Size.Size {
|
|
452
|
-
const style = AD.Resources.getStyle(
|
|
453
|
-
textStyle,
|
|
454
|
-
textField.style,
|
|
455
|
-
"TextStyle",
|
|
456
|
-
textField.styleName,
|
|
457
|
-
resources
|
|
458
|
-
) as AD.TextStyle.TextStyle;
|
|
421
|
+
const style = AD.Resources.getStyle(textStyle, textField.style, "TextStyle", textField.styleName, resources) as AD.TextStyle.TextStyle;
|
|
459
422
|
switch (textField.fieldType) {
|
|
460
423
|
case "Date":
|
|
461
424
|
return measureText(pdf, new Date(Date.now()).toDateString(), style, availableSize);
|
|
@@ -481,11 +444,7 @@ function measureTocSeparator(
|
|
|
481
444
|
};
|
|
482
445
|
}
|
|
483
446
|
|
|
484
|
-
function measureImage(
|
|
485
|
-
resources: AD.Resources.Resources,
|
|
486
|
-
availableSize: AD.Size.Size,
|
|
487
|
-
image: AD.Image.Image
|
|
488
|
-
): AD.Size.Size {
|
|
447
|
+
function measureImage(resources: AD.Resources.Resources, availableSize: AD.Size.Size, image: AD.Image.Image): AD.Size.Size {
|
|
489
448
|
const ai = image.imageResource.abstractImage;
|
|
490
449
|
const firstComp = ai.components[0];
|
|
491
450
|
const resource =
|
|
@@ -494,7 +453,7 @@ function measureImage(
|
|
|
494
453
|
: image.imageResource;
|
|
495
454
|
|
|
496
455
|
let desiredWidth = availableSize.width;
|
|
497
|
-
if (!isFinite(image.width)) {
|
|
456
|
+
if (!Number.isFinite(image.width)) {
|
|
498
457
|
desiredWidth = availableSize.width;
|
|
499
458
|
} else if (image.width) {
|
|
500
459
|
desiredWidth = image.width;
|
|
@@ -503,7 +462,7 @@ function measureImage(
|
|
|
503
462
|
}
|
|
504
463
|
|
|
505
464
|
let desiredHeight = availableSize.height;
|
|
506
|
-
if (!isFinite(image.height)) {
|
|
465
|
+
if (!Number.isFinite(image.height)) {
|
|
507
466
|
desiredHeight = availableSize.height;
|
|
508
467
|
} else if (image.height) {
|
|
509
468
|
desiredHeight = image.height;
|
|
@@ -529,11 +488,11 @@ function measureText(
|
|
|
529
488
|
pdf
|
|
530
489
|
.font(font)
|
|
531
490
|
.fontSize(fontSize)
|
|
532
|
-
.fillColor(textStyle.color
|
|
491
|
+
.fillColor(textStyle.color ?? "black");
|
|
533
492
|
|
|
534
493
|
const textOptions = {
|
|
535
|
-
underline: textStyle.underline
|
|
536
|
-
indent: textStyle.indent
|
|
494
|
+
underline: textStyle.underline ?? false,
|
|
495
|
+
indent: textStyle.indent ?? 0,
|
|
537
496
|
lineBreak: textStyle.lineBreak ?? true,
|
|
538
497
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
539
498
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
@@ -559,13 +518,7 @@ function measureText(
|
|
|
559
518
|
return AD.Size.create(width, height, availableSize.width);
|
|
560
519
|
}
|
|
561
520
|
|
|
562
|
-
function widthOfString(
|
|
563
|
-
pdf: PDFKit.PDFDocument,
|
|
564
|
-
font: string,
|
|
565
|
-
fontSize: number,
|
|
566
|
-
text: string,
|
|
567
|
-
options: PDFKit.Mixins.TextOptions
|
|
568
|
-
): number {
|
|
521
|
+
function widthOfString(pdf: PDFKit.PDFDocument, font: string, fontSize: number, text: string, options: PDFKit.Mixins.TextOptions): number {
|
|
569
522
|
const key = JSON.stringify({ font, fontSize, text, options });
|
|
570
523
|
const cached = widthOfStringCache.get(key);
|
|
571
524
|
if (cached !== undefined) {
|
|
@@ -578,13 +531,7 @@ function widthOfString(
|
|
|
578
531
|
return width;
|
|
579
532
|
}
|
|
580
533
|
|
|
581
|
-
function heightOfString(
|
|
582
|
-
pdf: PDFKit.PDFDocument,
|
|
583
|
-
font: string,
|
|
584
|
-
fontSize: number,
|
|
585
|
-
text: string,
|
|
586
|
-
options: PDFKit.Mixins.TextOptions
|
|
587
|
-
): number {
|
|
534
|
+
function heightOfString(pdf: PDFKit.PDFDocument, font: string, fontSize: number, text: string, options: PDFKit.Mixins.TextOptions): number {
|
|
588
535
|
const key = JSON.stringify({ font, fontSize, text, options });
|
|
589
536
|
const cached = heightOfStringCache.get(key);
|
|
590
537
|
if (cached !== undefined) {
|
|
@@ -597,13 +544,13 @@ function heightOfString(
|
|
|
597
544
|
return height;
|
|
598
545
|
}
|
|
599
546
|
|
|
600
|
-
function mergeMaps(maps: Array<Map<
|
|
601
|
-
|
|
547
|
+
function mergeMaps(maps: Array<Map<object, AD.Size.Size>>): Map<object, AD.Size.Size> {
|
|
548
|
+
const newMap = new Map<object, AD.Size.Size>();
|
|
602
549
|
maps.forEach((m) => m.forEach((v, k) => newMap.set(k, v)));
|
|
603
550
|
return newMap;
|
|
604
551
|
}
|
|
605
552
|
|
|
606
|
-
function getDesiredSize(element:
|
|
553
|
+
function getDesiredSize(element: object, desiredSizes: Map<object, AD.Size.Size>): AD.Size.Size {
|
|
607
554
|
const size = desiredSizes.get(element);
|
|
608
555
|
if (size) {
|
|
609
556
|
return size;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type * as AD from "../../abstract-document/index.js";
|
|
2
|
+
|
|
3
|
+
export interface PageColumn {
|
|
4
|
+
readonly elements: ReadonlyArray<AD.SectionElement.SectionElement>;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface Page {
|
|
8
|
+
readonly pageNo: number;
|
|
9
|
+
readonly namedDestionations: ReadonlyArray<string>;
|
|
10
|
+
readonly pageOptions: PDFKit.PDFDocumentOptions;
|
|
11
|
+
readonly section: AD.Section.Section;
|
|
12
|
+
readonly contentRect: AD.Rect.Rect;
|
|
13
|
+
readonly columns: ReadonlyArray<PageColumn>;
|
|
14
|
+
readonly header: ReadonlyArray<AD.SectionElement.SectionElement>;
|
|
15
|
+
readonly footer: ReadonlyArray<AD.SectionElement.SectionElement>;
|
|
16
|
+
}
|
|
@@ -1,35 +1,21 @@
|
|
|
1
1
|
import * as AD from "../../abstract-document/index.js";
|
|
2
2
|
import { getResources } from "../shared/get_resources.js";
|
|
3
3
|
import { registerFonts } from "./font.js";
|
|
4
|
-
|
|
4
|
+
import { getHeaderAndFooter } from "./header-footer.js";
|
|
5
5
|
import { measureTable } from "./measure.js";
|
|
6
|
-
|
|
7
|
-
export interface PageColumn {
|
|
8
|
-
readonly elements: ReadonlyArray<AD.SectionElement.SectionElement>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export interface Page {
|
|
12
|
-
readonly pageNo: number;
|
|
13
|
-
readonly namedDestionations: ReadonlyArray<string>;
|
|
14
|
-
readonly pageOptions: any;
|
|
15
|
-
readonly section: AD.Section.Section;
|
|
16
|
-
readonly contentRect: AD.Rect.Rect;
|
|
17
|
-
readonly columns: ReadonlyArray<PageColumn>;
|
|
18
|
-
readonly header: ReadonlyArray<AD.SectionElement.SectionElement>;
|
|
19
|
-
readonly footer: ReadonlyArray<AD.SectionElement.SectionElement>;
|
|
20
|
-
}
|
|
6
|
+
import type { Page, PageColumn } from "./page.js";
|
|
21
7
|
|
|
22
8
|
export function paginate(
|
|
23
9
|
pdfKit: PDFKit.PDFDocument,
|
|
24
10
|
document: AD.AbstractDoc.AbstractDoc,
|
|
25
|
-
desiredSizes: Map<
|
|
11
|
+
desiredSizes: Map<object, AD.Size.Size>
|
|
26
12
|
): ReadonlyArray<Page> {
|
|
27
13
|
const resources = getResources(document);
|
|
28
14
|
const pdf = new pdfKit({ compress: false, autoFirstPage: false, bufferPages: true });
|
|
29
15
|
|
|
30
16
|
registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
|
|
31
17
|
const pages = new Array<Page>();
|
|
32
|
-
for (
|
|
18
|
+
for (const section of document.children) {
|
|
33
19
|
const previousPage = pages.length > 0 ? pages[pages.length - 1] : undefined;
|
|
34
20
|
pages.push(...paginateSection(pdfKit, document, resources, desiredSizes, previousPage, section));
|
|
35
21
|
}
|
|
@@ -41,7 +27,7 @@ function paginateSection(
|
|
|
41
27
|
pdfKit: PDFKit.PDFDocument,
|
|
42
28
|
document: AD.AbstractDoc.AbstractDoc,
|
|
43
29
|
parentResources: AD.Resources.Resources,
|
|
44
|
-
desiredSizes: Map<
|
|
30
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
45
31
|
previousPage: Page | undefined,
|
|
46
32
|
section: AD.Section.Section
|
|
47
33
|
): Array<Page> {
|
|
@@ -98,7 +84,7 @@ function paginateSection(
|
|
|
98
84
|
elements.length
|
|
99
85
|
);
|
|
100
86
|
|
|
101
|
-
const tableSplit: AD.Table.Table
|
|
87
|
+
const tableSplit: Array<AD.Table.Table> = [];
|
|
102
88
|
if (tableHead) {
|
|
103
89
|
elements.push(tableHead);
|
|
104
90
|
tableSplit.push(tableHead);
|
|
@@ -140,7 +126,7 @@ function splitTable(
|
|
|
140
126
|
pdfKit: PDFKit.PDFDocument,
|
|
141
127
|
document: AD.AbstractDoc.AbstractDoc,
|
|
142
128
|
resources: AD.Resources.Resources,
|
|
143
|
-
desiredSizes: Map<
|
|
129
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
144
130
|
table: AD.Table.Table,
|
|
145
131
|
elementsHeight: number,
|
|
146
132
|
availableHeight: number,
|
|
@@ -148,7 +134,7 @@ function splitTable(
|
|
|
148
134
|
): [AD.Table.Table | undefined, AD.Table.Table | undefined] {
|
|
149
135
|
let tableHead = undefined;
|
|
150
136
|
let tableRest = undefined;
|
|
151
|
-
elementsHeight += table.style.margins.top
|
|
137
|
+
elementsHeight += table.style.margins.top ?? 0;
|
|
152
138
|
if (table.headerRows.length > 0) {
|
|
153
139
|
const headerSize = table.headerRows.reduce((acc, row) => (acc += getDesiredSize(row, desiredSizes).height), 0);
|
|
154
140
|
elementsHeight += headerSize;
|
|
@@ -165,14 +151,7 @@ function splitTable(
|
|
|
165
151
|
return [undefined, table];
|
|
166
152
|
}
|
|
167
153
|
|
|
168
|
-
const [newTableHead, newTableRest] = splitTableAt(
|
|
169
|
-
pdfKit,
|
|
170
|
-
document,
|
|
171
|
-
resources,
|
|
172
|
-
desiredSizes,
|
|
173
|
-
table,
|
|
174
|
-
Math.max(rowIndex, 1)
|
|
175
|
-
);
|
|
154
|
+
const [newTableHead, newTableRest] = splitTableAt(pdfKit, document, resources, desiredSizes, table, Math.max(rowIndex, 1));
|
|
176
155
|
|
|
177
156
|
if (newTableHead.children.length > 0) {
|
|
178
157
|
tableHead = newTableHead;
|
|
@@ -194,7 +173,7 @@ function splitTable(
|
|
|
194
173
|
|
|
195
174
|
function createPage(
|
|
196
175
|
resources: AD.Resources.Resources,
|
|
197
|
-
desiredSizes: Map<
|
|
176
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
198
177
|
previousPage: Page | undefined,
|
|
199
178
|
section: AD.Section.Section,
|
|
200
179
|
columns: ReadonlyArray<PageColumn>,
|
|
@@ -203,7 +182,7 @@ function createPage(
|
|
|
203
182
|
const style = section.page.style;
|
|
204
183
|
const pageWidth = AD.PageStyle.getWidth(style);
|
|
205
184
|
const pageHeight = AD.PageStyle.getHeight(style);
|
|
206
|
-
const layout = style.orientation === "Landscape" ? "landscape" : "portrait";
|
|
185
|
+
const layout: "landscape" | "portrait" = style.orientation === "Landscape" ? "landscape" : "portrait";
|
|
207
186
|
const pageOptions = {
|
|
208
187
|
size: [pageWidth, pageHeight],
|
|
209
188
|
layout: layout,
|
|
@@ -236,18 +215,14 @@ function createPage(
|
|
|
236
215
|
const [columnLeadingSpace] = getLeadingAndTrailingSpace(resources, section, elements);
|
|
237
216
|
leadingSpace = Math.min(leadingSpace ?? columnLeadingSpace, columnLeadingSpace);
|
|
238
217
|
}
|
|
239
|
-
leadingSpace
|
|
218
|
+
leadingSpace ??= 0;
|
|
240
219
|
const contentRect = AD.Rect.create(rect.x, rect.y - leadingSpace, rect.width, rect.height + leadingSpace);
|
|
241
220
|
|
|
242
221
|
const frontHeader =
|
|
243
|
-
section.page.frontHeader === undefined || section.page.frontHeader.length === 0
|
|
244
|
-
? section.page.header
|
|
245
|
-
: section.page.frontHeader;
|
|
222
|
+
section.page.frontHeader === undefined || section.page.frontHeader.length === 0 ? section.page.header : section.page.frontHeader;
|
|
246
223
|
|
|
247
224
|
const frontFooter =
|
|
248
|
-
section.page.frontFooter === undefined || section.page.frontFooter.length === 0
|
|
249
|
-
? section.page.footer
|
|
250
|
-
: section.page.frontFooter;
|
|
225
|
+
section.page.frontFooter === undefined || section.page.frontFooter.length === 0 ? section.page.footer : section.page.frontFooter;
|
|
251
226
|
|
|
252
227
|
return {
|
|
253
228
|
pageNo: pageNo,
|
|
@@ -261,74 +236,18 @@ function createPage(
|
|
|
261
236
|
};
|
|
262
237
|
}
|
|
263
238
|
|
|
264
|
-
|
|
265
|
-
section: AD.Section.Section,
|
|
266
|
-
pageNo: number
|
|
267
|
-
): {
|
|
268
|
-
readonly header: Array<AD.SectionElement.SectionElement>;
|
|
269
|
-
readonly footer: Array<AD.SectionElement.SectionElement>;
|
|
270
|
-
readonly headerMargins: Required<AD.LayoutFoundation.LayoutFoundation>;
|
|
271
|
-
readonly footerMargins: Required<AD.LayoutFoundation.LayoutFoundation>;
|
|
272
|
-
} {
|
|
273
|
-
const FIRST_PAGE = 1;
|
|
274
|
-
const EVEN_PAGE = 0;
|
|
275
|
-
const ODD_PAGE = 1;
|
|
276
|
-
switch (true) {
|
|
277
|
-
//first page
|
|
278
|
-
case pageNo === FIRST_PAGE: {
|
|
279
|
-
const normalHeader = section.page.frontHeader === undefined || section.page.frontHeader.length === 0;
|
|
280
|
-
const normalFooter = section.page.frontFooter === undefined || section.page.frontFooter.length === 0;
|
|
281
|
-
return {
|
|
282
|
-
footer: normalFooter ? section.page.footer : section.page.frontFooter,
|
|
283
|
-
header: normalHeader ? section.page.header : section.page.frontHeader,
|
|
284
|
-
headerMargins: AD.LayoutFoundation.orDefault(
|
|
285
|
-
normalHeader
|
|
286
|
-
? section.page.style.headerMargins
|
|
287
|
-
: (section.page.style.firstPageHeaderMargins ?? section.page.style.headerMargins)
|
|
288
|
-
),
|
|
289
|
-
footerMargins: AD.LayoutFoundation.orDefault(
|
|
290
|
-
normalFooter
|
|
291
|
-
? section.page.style.footerMargins
|
|
292
|
-
: (section.page.style.firstPageFooterMargins ?? section.page.style.footerMargins)
|
|
293
|
-
),
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
case pageNo === 0:
|
|
297
|
-
case pageNo % 2 === EVEN_PAGE:
|
|
298
|
-
case pageNo % 2 === ODD_PAGE:
|
|
299
|
-
default: {
|
|
300
|
-
return {
|
|
301
|
-
header: section.page.header,
|
|
302
|
-
footer: section.page.footer,
|
|
303
|
-
headerMargins: AD.LayoutFoundation.orDefault(section.page.style.headerMargins),
|
|
304
|
-
footerMargins: AD.LayoutFoundation.orDefault(section.page.style.footerMargins),
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
function getPageContentRect(
|
|
311
|
-
desiredSizes: Map<{}, AD.Size.Size>,
|
|
312
|
-
section: AD.Section.Section,
|
|
313
|
-
pageNo: number
|
|
314
|
-
): AD.Rect.Rect {
|
|
239
|
+
function getPageContentRect(desiredSizes: Map<object, AD.Size.Size>, section: AD.Section.Section, pageNo: number): AD.Rect.Rect {
|
|
315
240
|
const style = section.page.style;
|
|
316
241
|
const styleContentMargins = AD.LayoutFoundation.orDefault(style.contentMargins);
|
|
317
242
|
const pageWidth = AD.PageStyle.getWidth(style);
|
|
318
243
|
const pageHeight = AD.PageStyle.getHeight(style);
|
|
319
244
|
|
|
320
245
|
const { header, footer, headerMargins, footerMargins } = getHeaderAndFooter(section, pageNo);
|
|
321
|
-
const headerHeight = header.reduce(
|
|
322
|
-
|
|
323
|
-
headerMargins.top + headerMargins.bottom
|
|
324
|
-
);
|
|
325
|
-
const footerHeight = footer.reduce(
|
|
326
|
-
(prev, curr) => prev + getDesiredSize(curr, desiredSizes).height,
|
|
327
|
-
footerMargins.top + footerMargins.bottom
|
|
328
|
-
);
|
|
246
|
+
const headerHeight = header.reduce((prev, curr) => prev + getDesiredSize(curr, desiredSizes).height, headerMargins.top + headerMargins.bottom);
|
|
247
|
+
const footerHeight = footer.reduce((prev, curr) => prev + getDesiredSize(curr, desiredSizes).height, footerMargins.top + footerMargins.bottom);
|
|
329
248
|
|
|
330
249
|
let headerY = headerMargins.top;
|
|
331
|
-
for (
|
|
250
|
+
for (const element of header) {
|
|
332
251
|
const elementSize = getDesiredSize(element, desiredSizes);
|
|
333
252
|
headerY += elementSize.height;
|
|
334
253
|
}
|
|
@@ -381,10 +300,7 @@ function getSectionElementMargin(
|
|
|
381
300
|
}
|
|
382
301
|
}
|
|
383
302
|
|
|
384
|
-
function getParagraphMargins(
|
|
385
|
-
resources: AD.Resources.Resources,
|
|
386
|
-
paragraph: AD.Paragraph.Paragraph
|
|
387
|
-
): AD.LayoutFoundation.LayoutFoundation {
|
|
303
|
+
function getParagraphMargins(resources: AD.Resources.Resources, paragraph: AD.Paragraph.Paragraph): AD.LayoutFoundation.LayoutFoundation {
|
|
388
304
|
const style = AD.Resources.getStyle(
|
|
389
305
|
undefined,
|
|
390
306
|
paragraph.style,
|
|
@@ -395,10 +311,7 @@ function getParagraphMargins(
|
|
|
395
311
|
return style.margins;
|
|
396
312
|
}
|
|
397
313
|
|
|
398
|
-
function getGroupMargins(
|
|
399
|
-
resources: AD.Resources.Resources,
|
|
400
|
-
group: AD.Group.Group
|
|
401
|
-
): AD.LayoutFoundation.LayoutFoundation {
|
|
314
|
+
function getGroupMargins(resources: AD.Resources.Resources, group: AD.Group.Group): AD.LayoutFoundation.LayoutFoundation {
|
|
402
315
|
const first = group.children.length > 0 ? group.children[0] : undefined;
|
|
403
316
|
const last = group.children.length > 0 ? group.children[group.children.length - 1] : undefined;
|
|
404
317
|
const firstMargin = first && getSectionElementMargin(resources, first);
|
|
@@ -418,21 +331,12 @@ function getGroupMargins(
|
|
|
418
331
|
}
|
|
419
332
|
}
|
|
420
333
|
|
|
421
|
-
function getTableMargins(
|
|
422
|
-
|
|
423
|
-
table: AD.Table.Table
|
|
424
|
-
): AD.LayoutFoundation.LayoutFoundation {
|
|
425
|
-
const style = AD.Resources.getStyle(
|
|
426
|
-
undefined,
|
|
427
|
-
table.style,
|
|
428
|
-
"TableStyle",
|
|
429
|
-
table.styleName,
|
|
430
|
-
resources
|
|
431
|
-
) as AD.TableStyle.TableStyle;
|
|
334
|
+
function getTableMargins(resources: AD.Resources.Resources, table: AD.Table.Table): AD.LayoutFoundation.LayoutFoundation {
|
|
335
|
+
const style = AD.Resources.getStyle(undefined, table.style, "TableStyle", table.styleName, resources) as AD.TableStyle.TableStyle;
|
|
432
336
|
return style.margins;
|
|
433
337
|
}
|
|
434
338
|
|
|
435
|
-
function getDesiredSize(element:
|
|
339
|
+
function getDesiredSize(element: object, desiredSizes: Map<object, AD.Size.Size>): AD.Size.Size {
|
|
436
340
|
const size = desiredSizes.get(element);
|
|
437
341
|
if (size) {
|
|
438
342
|
return size;
|
|
@@ -444,14 +348,14 @@ function splitTableAt(
|
|
|
444
348
|
pdfKit: PDFKit.PDFDocument,
|
|
445
349
|
document: AD.AbstractDoc.AbstractDoc,
|
|
446
350
|
resources: AD.Resources.Resources,
|
|
447
|
-
desiredSizes: Map<
|
|
351
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
448
352
|
table: AD.Table.Table,
|
|
449
353
|
splitIndex: number
|
|
450
354
|
): [AD.Table.Table, AD.Table.Table] {
|
|
451
355
|
//Push row/cells to head table while splitting rowspan
|
|
452
|
-
const headRows: AD.TableRow.TableRow
|
|
356
|
+
const headRows: Array<AD.TableRow.TableRow> = [];
|
|
453
357
|
for (const [rowIndex, row] of table.children.slice(0, splitIndex).entries()) {
|
|
454
|
-
const newRow: AD.TableCell.TableCell
|
|
358
|
+
const newRow: Array<AD.TableCell.TableCell> = [];
|
|
455
359
|
for (const cell of row.children) {
|
|
456
360
|
//If this cell would span over the split index
|
|
457
361
|
if (rowIndex + (cell.rowSpan || 1) - 1 >= splitIndex) {
|
|
@@ -468,13 +372,13 @@ function splitTableAt(
|
|
|
468
372
|
//while keeping the remaining rowspan which was calculated
|
|
469
373
|
//in the pre-process step
|
|
470
374
|
const splitRow = table.children[splitIndex];
|
|
471
|
-
const firstTailRow: AD.TableCell.TableCell
|
|
375
|
+
const firstTailRow: Array<AD.TableCell.TableCell> = [];
|
|
472
376
|
for (const cell of splitRow.children) {
|
|
473
377
|
firstTailRow.push({ ...cell, dummy: false });
|
|
474
378
|
}
|
|
475
379
|
|
|
476
380
|
// Push the rest of the rows to tail table
|
|
477
|
-
const tailRows: AD.TableRow.TableRow
|
|
381
|
+
const tailRows: Array<AD.TableRow.TableRow> = [{ ...splitRow, children: firstTailRow }];
|
|
478
382
|
tailRows.push(...table.children.slice(splitIndex + 1));
|
|
479
383
|
|
|
480
384
|
//Create tables and remeasure them
|
|
@@ -490,7 +394,7 @@ function splitTableAt(
|
|
|
490
394
|
};
|
|
491
395
|
|
|
492
396
|
const availableSize = getDesiredSize(table, desiredSizes);
|
|
493
|
-
|
|
397
|
+
const pdf = new pdfKit();
|
|
494
398
|
registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
|
|
495
399
|
const headSizes = measureTable(pdf, resources, availableSize, tableHead);
|
|
496
400
|
const tailSizes = measureTable(pdf, resources, availableSize, tableTail);
|