abstract-document 20.0.3 → 20.1.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/CHANGELOG.md +4 -0
- package/README.md +3 -3
- 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/atoms/line-break.d.ts +1 -1
- package/lib/abstract-document/atoms/line-break.d.ts.map +1 -1
- package/lib/abstract-document/atoms/line-break.js +1 -1
- package/lib/abstract-document/atoms/line-break.js.map +1 -1
- package/lib/abstract-document/atoms/link-target.js +1 -1
- package/lib/abstract-document/atoms/text-run.d.ts.map +1 -1
- package/lib/abstract-document/atoms/text-run.js +1 -0
- package/lib/abstract-document/atoms/text-run.js.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 +5 -5
- 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-format.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 +4 -4
- 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 +1 -1
- package/lib/abstract-document/primitives/layout-foundation.js.map +1 -1
- package/lib/abstract-document/primitives/point.js +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 +17 -22
- 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 -6
- 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 -248
- 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 +5 -17
- 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 +37 -43
- 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 +14 -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 +31 -32
- 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 -44
- 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 +10 -36
- 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 +25 -35
- 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 -49
- package/lib/abstract-document-exporters/pdf/render.js.map +1 -1
- package/lib/abstract-document-exporters/pdf/std-fonts.js +2 -2
- 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 +26 -20
- 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 +6 -4
- 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 +8 -4
- 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 +21 -21
- package/src/abstract-document/abstract-doc.ts +6 -6
- package/src/abstract-document/atoms/atom.ts +3 -3
- package/src/abstract-document/atoms/line-break.ts +1 -1
- package/src/abstract-document/atoms/link-target.ts +1 -1
- package/src/abstract-document/atoms/text-run.ts +1 -0
- package/src/abstract-document/default-styles.ts +1 -1
- package/src/abstract-document/markdown/markdown.ts +7 -7
- package/src/abstract-document/numberings/numbering-definition.ts +2 -2
- package/src/abstract-document/numberings/numbering-format.ts +1 -7
- 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 +5 -8
- package/src/abstract-document/primitives/layout-foundation.ts +2 -5
- package/src/abstract-document/primitives/point.ts +1 -1
- 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 -18
- package/src/abstract-document/styles/table-style.ts +3 -8
- package/src/abstract-document/styles/text-style.ts +31 -36
- 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 -10
- package/src/abstract-document-exporters/docx/xml-writer.ts +261 -265
- package/src/abstract-document-exporters/docx2/render-image.ts +16 -50
- package/src/abstract-document-exporters/docx2/render.ts +68 -121
- package/src/abstract-document-exporters/pdf/font.ts +27 -32
- package/src/abstract-document-exporters/pdf/header-footer.ts +43 -0
- package/src/abstract-document-exporters/pdf/measure.ts +52 -103
- package/src/abstract-document-exporters/pdf/page.ts +16 -0
- package/src/abstract-document-exporters/pdf/paginate.ts +29 -120
- package/src/abstract-document-exporters/pdf/pre-process.ts +13 -48
- package/src/abstract-document-exporters/pdf/render-image.ts +30 -47
- package/src/abstract-document-exporters/pdf/render.ts +84 -128
- package/src/abstract-document-exporters/pdf/std-fonts.ts +2 -2
- package/src/abstract-document-exporters/pdf/textRunRow.ts +100 -77
- 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 +23 -35
- package/src/abstract-document-xml/abstract-doc-of-xml/creator.ts +17 -29
- package/src/abstract-document-xml/abstract-doc-of-xml/custom-elements.tsx +8 -30
- package/src/abstract-document-xml/xsd-template/styles.ts +1 -1
- package/src/abstract-document-xml/xsd-template/xsd-template.ts +2 -2
- package/lib/abstract-document/table/text-row.d.ts +0 -2
- package/lib/abstract-document/table/text-row.d.ts.map +0 -1
- package/lib/abstract-document/table/text-row.js +0 -2
- package/lib/abstract-document/table/text-row.js.map +0 -1
- package/lib/abstract-document-exporters/docx/docx-document-renderer.d.ts +0 -2
- package/lib/abstract-document-exporters/docx/docx-document-renderer.d.ts.map +0 -1
- package/lib/abstract-document-exporters/docx/docx-document-renderer.js +0 -1085
- package/lib/abstract-document-exporters/docx/docx-document-renderer.js.map +0 -1
- package/src/abstract-document/table/text-row.ts +0 -0
- package/src/abstract-document-exporters/docx/docx-document-renderer.ts +0 -1084
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import * as AD from "../../abstract-document/index.js";
|
|
2
|
+
|
|
3
|
+
export function getHeaderAndFooter(
|
|
4
|
+
section: AD.Section.Section,
|
|
5
|
+
pageNo: number
|
|
6
|
+
): {
|
|
7
|
+
readonly header: Array<AD.SectionElement.SectionElement>;
|
|
8
|
+
readonly footer: Array<AD.SectionElement.SectionElement>;
|
|
9
|
+
readonly headerMargins: Required<AD.LayoutFoundation.LayoutFoundation>;
|
|
10
|
+
readonly footerMargins: Required<AD.LayoutFoundation.LayoutFoundation>;
|
|
11
|
+
} {
|
|
12
|
+
const FIRST_PAGE = 1;
|
|
13
|
+
const EVEN_PAGE = 0;
|
|
14
|
+
const ODD_PAGE = 1;
|
|
15
|
+
switch (true) {
|
|
16
|
+
//first page
|
|
17
|
+
case pageNo === FIRST_PAGE: {
|
|
18
|
+
const normalHeader = section.page.frontHeader === undefined || section.page.frontHeader.length === 0;
|
|
19
|
+
const normalFooter = section.page.frontFooter === undefined || section.page.frontFooter.length === 0;
|
|
20
|
+
return {
|
|
21
|
+
footer: normalFooter ? section.page.footer : section.page.frontFooter,
|
|
22
|
+
header: normalHeader ? section.page.header : section.page.frontHeader,
|
|
23
|
+
headerMargins: AD.LayoutFoundation.orDefault(
|
|
24
|
+
normalHeader ? section.page.style.headerMargins : (section.page.style.firstPageHeaderMargins ?? section.page.style.headerMargins)
|
|
25
|
+
),
|
|
26
|
+
footerMargins: AD.LayoutFoundation.orDefault(
|
|
27
|
+
normalFooter ? section.page.style.footerMargins : (section.page.style.firstPageFooterMargins ?? section.page.style.footerMargins)
|
|
28
|
+
),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
case pageNo === 0:
|
|
32
|
+
case pageNo % 2 === EVEN_PAGE:
|
|
33
|
+
case pageNo % 2 === ODD_PAGE:
|
|
34
|
+
default: {
|
|
35
|
+
return {
|
|
36
|
+
header: section.page.header,
|
|
37
|
+
footer: section.page.footer,
|
|
38
|
+
headerMargins: AD.LayoutFoundation.orDefault(section.page.style.headerMargins),
|
|
39
|
+
footerMargins: AD.LayoutFoundation.orDefault(section.page.style.footerMargins),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
import * as AD from "../../abstract-document/index.js";
|
|
2
1
|
import { exhaustiveCheck } from "ts-exhaustive-check";
|
|
3
|
-
import
|
|
4
|
-
import { getHeaderAndFooter } from "./paginate.js";
|
|
2
|
+
import * as AD from "../../abstract-document/index.js";
|
|
5
3
|
import { registerFonts, getFontNameStyle } from "./font.js";
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { getHeaderAndFooter } from "./header-footer.js";
|
|
5
|
+
import type { Page } from "./page.js";
|
|
8
6
|
|
|
9
7
|
const widthOfStringCache = new Map<string, number>();
|
|
10
8
|
const heightOfStringCache = new Map<string, number>();
|
|
11
9
|
|
|
12
|
-
export function measure(pdfKit: PDFKit.PDFDocument, document: AD.AbstractDoc.AbstractDoc): Map<
|
|
13
|
-
|
|
10
|
+
export function measure(pdfKit: PDFKit.PDFDocument, document: AD.AbstractDoc.AbstractDoc): Map<object, AD.Size.Size> {
|
|
11
|
+
const pdf = new pdfKit();
|
|
14
12
|
registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
|
|
15
13
|
const result = mergeMaps(document.children.map((s) => measureSection(pdf, document, s)));
|
|
16
14
|
widthOfStringCache.clear();
|
|
@@ -22,15 +20,11 @@ export function measurePages(
|
|
|
22
20
|
pdfKit: PDFKit.PDFDocument,
|
|
23
21
|
document: AD.AbstractDoc.AbstractDoc,
|
|
24
22
|
pages: ReadonlyArray<Page>
|
|
25
|
-
): Map<
|
|
23
|
+
): Map<object, AD.Size.Size> {
|
|
26
24
|
const pdf = new pdfKit();
|
|
27
25
|
registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
|
|
28
26
|
return mergeMaps(
|
|
29
|
-
pages.flatMap((page) =>
|
|
30
|
-
page.columns.map(({ elements }) =>
|
|
31
|
-
measureSection(pdf, document, page.section, page.header, page.footer, elements)
|
|
32
|
-
)
|
|
33
|
-
)
|
|
27
|
+
pages.flatMap((page) => page.columns.map(({ elements }) => measureSection(pdf, document, page.section, page.header, page.footer, elements)))
|
|
34
28
|
);
|
|
35
29
|
}
|
|
36
30
|
|
|
@@ -41,10 +35,10 @@ function measureSection(
|
|
|
41
35
|
separateHeader?: ReadonlyArray<AD.SectionElement.SectionElement>,
|
|
42
36
|
separateFooter?: ReadonlyArray<AD.SectionElement.SectionElement>,
|
|
43
37
|
separateChildren?: ReadonlyArray<AD.SectionElement.SectionElement>
|
|
44
|
-
): Map<
|
|
45
|
-
const header = separateHeader
|
|
46
|
-
const footer = separateFooter
|
|
47
|
-
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;
|
|
48
42
|
|
|
49
43
|
const pageWidth = AD.PageStyle.getWidth(section.page.style);
|
|
50
44
|
const pageHeight = AD.PageStyle.getHeight(section.page.style);
|
|
@@ -69,9 +63,7 @@ function measureSection(
|
|
|
69
63
|
|
|
70
64
|
//header and footer sizes for the first page
|
|
71
65
|
const firstPageHeaderAndFooters = getHeaderAndFooter(section, 1);
|
|
72
|
-
const firstPageHeaderAndFootersExtracted: ReadonlyArray<
|
|
73
|
-
[ReadonlyArray<AD.SectionElement.SectionElement>, AD.LayoutFoundation.LayoutFoundation]
|
|
74
|
-
> = [
|
|
66
|
+
const firstPageHeaderAndFootersExtracted: ReadonlyArray<[ReadonlyArray<AD.SectionElement.SectionElement>, AD.LayoutFoundation.LayoutFoundation]> = [
|
|
75
67
|
[firstPageHeaderAndFooters.header, firstPageHeaderAndFooters.headerMargins],
|
|
76
68
|
[firstPageHeaderAndFooters.footer, firstPageHeaderAndFooters.footerMargins],
|
|
77
69
|
];
|
|
@@ -90,7 +82,7 @@ function measureSectionElement(
|
|
|
90
82
|
parentResources: AD.Resources.Resources,
|
|
91
83
|
availableSize: AD.Size.Size,
|
|
92
84
|
element: AD.SectionElement.SectionElement
|
|
93
|
-
): Map<
|
|
85
|
+
): Map<object, AD.Size.Size> {
|
|
94
86
|
const resources = AD.Resources.mergeResources([parentResources, element]);
|
|
95
87
|
switch (element.type) {
|
|
96
88
|
case "Paragraph":
|
|
@@ -106,8 +98,8 @@ function measureSectionElement(
|
|
|
106
98
|
}
|
|
107
99
|
}
|
|
108
100
|
|
|
109
|
-
function measurePageBreak(availableSize: AD.Size.Size, pageBreak: AD.PageBreak.PageBreak): Map<
|
|
110
|
-
|
|
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>();
|
|
111
103
|
desiredSizes.set(pageBreak, availableSize);
|
|
112
104
|
return desiredSizes;
|
|
113
105
|
}
|
|
@@ -117,7 +109,7 @@ function measureParagraph(
|
|
|
117
109
|
resources: AD.Resources.Resources,
|
|
118
110
|
availableSize: AD.Size.Size,
|
|
119
111
|
paragraph: AD.Paragraph.Paragraph
|
|
120
|
-
): Map<
|
|
112
|
+
): Map<object, AD.Size.Size> {
|
|
121
113
|
const style = AD.Resources.getStyle(
|
|
122
114
|
undefined,
|
|
123
115
|
paragraph.style,
|
|
@@ -131,7 +123,7 @@ function measureParagraph(
|
|
|
131
123
|
const contentAvailableSize = AD.Size.create(contentAvailableWidth, contentAvailableHeight);
|
|
132
124
|
|
|
133
125
|
let paragraphHeight = styleMargins.top + styleMargins.bottom;
|
|
134
|
-
|
|
126
|
+
const desiredSizes = new Map<object, AD.Size.Size>();
|
|
135
127
|
|
|
136
128
|
const rows: Array<Array<AD.Atom.Atom>> = [];
|
|
137
129
|
let currentRow: Array<AD.Atom.Atom> = [];
|
|
@@ -152,19 +144,12 @@ function measureParagraph(
|
|
|
152
144
|
let currentRowHeight = 0;
|
|
153
145
|
let concatenatedText = "";
|
|
154
146
|
let hasAtomImage = false;
|
|
155
|
-
let textOptions;
|
|
147
|
+
let textOptions: AD.TextStyle.TextStyle | undefined = undefined;
|
|
156
148
|
for (const atom of row) {
|
|
157
149
|
if (atom.type === "Image") {
|
|
158
150
|
hasAtomImage = true;
|
|
159
151
|
}
|
|
160
|
-
const atomSize = measureAtom(
|
|
161
|
-
pdfKit,
|
|
162
|
-
resources,
|
|
163
|
-
style.textStyle,
|
|
164
|
-
contentAvailableSize,
|
|
165
|
-
contentAvailableSize.width - currentRowWidth,
|
|
166
|
-
atom
|
|
167
|
-
);
|
|
152
|
+
const atomSize = measureAtom(pdfKit, resources, style.textStyle, contentAvailableSize, contentAvailableSize.width - currentRowWidth, atom);
|
|
168
153
|
if (atom.type === "TextRun" || atom.type === "TextField" || atom.type === "HyperLink") {
|
|
169
154
|
concatenatedText += atom.text;
|
|
170
155
|
textOptions = getBiggestStyle(atom, style, resources, textOptions);
|
|
@@ -195,7 +180,7 @@ function measureParagraph(
|
|
|
195
180
|
// );
|
|
196
181
|
|
|
197
182
|
const height = pdfKit.heightOfString(concatenatedText, {
|
|
198
|
-
width: textOptions
|
|
183
|
+
width: textOptions?.lineBreak === false ? Infinity : availableSize.width,
|
|
199
184
|
...textOptions,
|
|
200
185
|
});
|
|
201
186
|
paragraphHeight += height;
|
|
@@ -237,25 +222,19 @@ export function measureTable(
|
|
|
237
222
|
resources: AD.Resources.Resources,
|
|
238
223
|
availableSize: AD.Size.Size,
|
|
239
224
|
table: AD.Table.Table
|
|
240
|
-
): Map<
|
|
241
|
-
const style = AD.Resources.getStyle(
|
|
242
|
-
undefined,
|
|
243
|
-
table.style,
|
|
244
|
-
"TableStyle",
|
|
245
|
-
table.styleName,
|
|
246
|
-
resources
|
|
247
|
-
) 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;
|
|
248
227
|
const styleMargins = AD.LayoutFoundation.orDefault(style.margins);
|
|
249
228
|
const tableAvailableWidth = availableSize.width - (styleMargins.left + styleMargins.right);
|
|
250
|
-
const numInfinityColumns = table.columnWidths.filter((w) => !isFinite(w)).length;
|
|
251
|
-
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);
|
|
252
231
|
const infinityWidth = (tableAvailableWidth - fixedColumnsWidth) / numInfinityColumns;
|
|
253
|
-
const columnWidths = table.columnWidths.map((w) => (isFinite(w) ? w : infinityWidth));
|
|
254
|
-
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>();
|
|
255
234
|
const rows = [...table.headerRows, ...table.children];
|
|
256
|
-
for (
|
|
235
|
+
for (const row of rows) {
|
|
257
236
|
let column = 0;
|
|
258
|
-
for (
|
|
237
|
+
for (const cell of row.children) {
|
|
259
238
|
const cellStyle = AD.Resources.getStyle(
|
|
260
239
|
style.cellStyle,
|
|
261
240
|
cell.style,
|
|
@@ -276,7 +255,7 @@ export function measureTable(
|
|
|
276
255
|
const contentAvailableWidth = cellWidth - (cellStylePadding.left + cellStylePadding.right);
|
|
277
256
|
let cellDesiredHeight = cellStylePadding.top + cellStylePadding.bottom;
|
|
278
257
|
|
|
279
|
-
for (
|
|
258
|
+
for (const element of cell.children) {
|
|
280
259
|
const elementAvailableSize = AD.Size.create(contentAvailableWidth, Infinity);
|
|
281
260
|
const elementSizes = measureSectionElement(pdfKit, resources, elementAvailableSize, element);
|
|
282
261
|
elementSizes.forEach((v, k) => desiredSizes.set(k, v));
|
|
@@ -303,7 +282,7 @@ export function measureTable(
|
|
|
303
282
|
return a.child.rowSpan - b.child.rowSpan;
|
|
304
283
|
}
|
|
305
284
|
});
|
|
306
|
-
const minRowHeights =
|
|
285
|
+
const minRowHeights = Array.from({ length: rows.length }, () => 0);
|
|
307
286
|
for (const { child, rowIndex } of cells) {
|
|
308
287
|
const rowSpan = child.rowSpan || 1;
|
|
309
288
|
let currentHeight = 0;
|
|
@@ -319,7 +298,7 @@ export function measureTable(
|
|
|
319
298
|
}
|
|
320
299
|
}
|
|
321
300
|
|
|
322
|
-
const desiredWidth = table.columnWidths.some((w) => !isFinite(w))
|
|
301
|
+
const desiredWidth = table.columnWidths.some((w) => !Number.isFinite(w))
|
|
323
302
|
? availableSize.width
|
|
324
303
|
: table.columnWidths.reduce((a, b) => a + b, styleMargins.left + styleMargins.right);
|
|
325
304
|
let desiredHeight = styleMargins.top + styleMargins.bottom;
|
|
@@ -328,8 +307,8 @@ export function measureTable(
|
|
|
328
307
|
const rowHeight = minRowHeights[i];
|
|
329
308
|
desiredHeight += rowHeight;
|
|
330
309
|
desiredSizes.set(row, AD.Size.create(desiredWidth, rowHeight));
|
|
331
|
-
for (
|
|
332
|
-
const cellSize = desiredSizes.get(cell)
|
|
310
|
+
for (const cell of row.children) {
|
|
311
|
+
const cellSize = desiredSizes.get(cell) ?? AD.Size.create(0, 0);
|
|
333
312
|
desiredSizes.set(cell, AD.Size.create(cellSize.width, rowHeight));
|
|
334
313
|
}
|
|
335
314
|
}
|
|
@@ -344,11 +323,9 @@ function measureGroup(
|
|
|
344
323
|
resources: AD.Resources.Resources,
|
|
345
324
|
availableSize: AD.Size.Size,
|
|
346
325
|
keepTogether: AD.Group.Group
|
|
347
|
-
): Map<
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
);
|
|
351
|
-
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(
|
|
352
329
|
(sum, e) => sum + (AD.Position.isPositionAbsolute(e) ? 0 : getDesiredSize(e, desiredSizes).height),
|
|
353
330
|
0.0
|
|
354
331
|
);
|
|
@@ -400,7 +377,7 @@ function measureLineBreak(
|
|
|
400
377
|
"TextStyle",
|
|
401
378
|
lineBreak.styleName,
|
|
402
379
|
resources,
|
|
403
|
-
lineBreak.nestedStyleNames
|
|
380
|
+
lineBreak.nestedStyleNames ?? []
|
|
404
381
|
) as AD.TextStyle.TextStyle;
|
|
405
382
|
return measureText(pdfKit, "A", style, availableSize);
|
|
406
383
|
}
|
|
@@ -418,7 +395,7 @@ function measureTextRun(
|
|
|
418
395
|
"TextStyle",
|
|
419
396
|
textRun.styleName,
|
|
420
397
|
resources,
|
|
421
|
-
textRun.nestedStyleNames
|
|
398
|
+
textRun.nestedStyleNames ?? []
|
|
422
399
|
) as AD.TextStyle.TextStyle;
|
|
423
400
|
return measureText(pdf, textRun.text, style, availableSize, true);
|
|
424
401
|
}
|
|
@@ -430,13 +407,7 @@ function measureHyperLink(
|
|
|
430
407
|
hyperLink: AD.HyperLink.HyperLink,
|
|
431
408
|
availableSize: AD.Size.Size
|
|
432
409
|
): AD.Size.Size {
|
|
433
|
-
const style = AD.Resources.getStyle(
|
|
434
|
-
textStyle,
|
|
435
|
-
hyperLink.style,
|
|
436
|
-
"TextStyle",
|
|
437
|
-
hyperLink.styleName,
|
|
438
|
-
resources
|
|
439
|
-
) as AD.TextStyle.TextStyle;
|
|
410
|
+
const style = AD.Resources.getStyle(textStyle, hyperLink.style, "TextStyle", hyperLink.styleName, resources) as AD.TextStyle.TextStyle;
|
|
440
411
|
return measureText(pdf, hyperLink.text, style, availableSize);
|
|
441
412
|
}
|
|
442
413
|
|
|
@@ -447,13 +418,7 @@ function measureTextField(
|
|
|
447
418
|
textField: AD.TextField.TextField,
|
|
448
419
|
availableSize: AD.Size.Size
|
|
449
420
|
): AD.Size.Size {
|
|
450
|
-
const style = AD.Resources.getStyle(
|
|
451
|
-
textStyle,
|
|
452
|
-
textField.style,
|
|
453
|
-
"TextStyle",
|
|
454
|
-
textField.styleName,
|
|
455
|
-
resources
|
|
456
|
-
) as AD.TextStyle.TextStyle;
|
|
421
|
+
const style = AD.Resources.getStyle(textStyle, textField.style, "TextStyle", textField.styleName, resources) as AD.TextStyle.TextStyle;
|
|
457
422
|
switch (textField.fieldType) {
|
|
458
423
|
case "Date":
|
|
459
424
|
return measureText(pdf, new Date(Date.now()).toDateString(), style, availableSize);
|
|
@@ -479,20 +444,16 @@ function measureTocSeparator(
|
|
|
479
444
|
};
|
|
480
445
|
}
|
|
481
446
|
|
|
482
|
-
function measureImage(
|
|
483
|
-
resources: AD.Resources.Resources,
|
|
484
|
-
availableSize: AD.Size.Size,
|
|
485
|
-
image: AD.Image.Image
|
|
486
|
-
): AD.Size.Size {
|
|
447
|
+
function measureImage(resources: AD.Resources.Resources, availableSize: AD.Size.Size, image: AD.Image.Image): AD.Size.Size {
|
|
487
448
|
const ai = image.imageResource.abstractImage;
|
|
488
449
|
const firstComp = ai.components[0];
|
|
489
450
|
const resource =
|
|
490
451
|
!ai.size.width && !ai.size.height && firstComp?.type === "binaryimage" && firstComp.data.type === "url"
|
|
491
|
-
? resources.imageResources?.[firstComp.data.url] ?? image.imageResource
|
|
452
|
+
? (resources.imageResources?.[firstComp.data.url] ?? image.imageResource)
|
|
492
453
|
: image.imageResource;
|
|
493
454
|
|
|
494
455
|
let desiredWidth = availableSize.width;
|
|
495
|
-
if (!isFinite(image.width)) {
|
|
456
|
+
if (!Number.isFinite(image.width)) {
|
|
496
457
|
desiredWidth = availableSize.width;
|
|
497
458
|
} else if (image.width) {
|
|
498
459
|
desiredWidth = image.width;
|
|
@@ -501,7 +462,7 @@ function measureImage(
|
|
|
501
462
|
}
|
|
502
463
|
|
|
503
464
|
let desiredHeight = availableSize.height;
|
|
504
|
-
if (!isFinite(image.height)) {
|
|
465
|
+
if (!Number.isFinite(image.height)) {
|
|
505
466
|
desiredHeight = availableSize.height;
|
|
506
467
|
} else if (image.height) {
|
|
507
468
|
desiredHeight = image.height;
|
|
@@ -527,11 +488,11 @@ function measureText(
|
|
|
527
488
|
pdf
|
|
528
489
|
.font(font)
|
|
529
490
|
.fontSize(fontSize)
|
|
530
|
-
.fillColor(textStyle.color
|
|
491
|
+
.fillColor(textStyle.color ?? "black");
|
|
531
492
|
|
|
532
493
|
const textOptions = {
|
|
533
|
-
underline: textStyle.underline
|
|
534
|
-
indent: textStyle.indent
|
|
494
|
+
underline: textStyle.underline ?? false,
|
|
495
|
+
indent: textStyle.indent ?? 0,
|
|
535
496
|
lineBreak: textStyle.lineBreak ?? true,
|
|
536
497
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
537
498
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
@@ -557,13 +518,7 @@ function measureText(
|
|
|
557
518
|
return AD.Size.create(width, height, availableSize.width);
|
|
558
519
|
}
|
|
559
520
|
|
|
560
|
-
function widthOfString(
|
|
561
|
-
pdf: PDFKit.PDFDocument,
|
|
562
|
-
font: string,
|
|
563
|
-
fontSize: number,
|
|
564
|
-
text: string,
|
|
565
|
-
options: PDFKit.Mixins.TextOptions
|
|
566
|
-
): number {
|
|
521
|
+
function widthOfString(pdf: PDFKit.PDFDocument, font: string, fontSize: number, text: string, options: PDFKit.Mixins.TextOptions): number {
|
|
567
522
|
const key = JSON.stringify({ font, fontSize, text, options });
|
|
568
523
|
const cached = widthOfStringCache.get(key);
|
|
569
524
|
if (cached !== undefined) {
|
|
@@ -576,13 +531,7 @@ function widthOfString(
|
|
|
576
531
|
return width;
|
|
577
532
|
}
|
|
578
533
|
|
|
579
|
-
function heightOfString(
|
|
580
|
-
pdf: PDFKit.PDFDocument,
|
|
581
|
-
font: string,
|
|
582
|
-
fontSize: number,
|
|
583
|
-
text: string,
|
|
584
|
-
options: PDFKit.Mixins.TextOptions
|
|
585
|
-
): number {
|
|
534
|
+
function heightOfString(pdf: PDFKit.PDFDocument, font: string, fontSize: number, text: string, options: PDFKit.Mixins.TextOptions): number {
|
|
586
535
|
const key = JSON.stringify({ font, fontSize, text, options });
|
|
587
536
|
const cached = heightOfStringCache.get(key);
|
|
588
537
|
if (cached !== undefined) {
|
|
@@ -595,13 +544,13 @@ function heightOfString(
|
|
|
595
544
|
return height;
|
|
596
545
|
}
|
|
597
546
|
|
|
598
|
-
function mergeMaps(maps: Array<Map<
|
|
599
|
-
|
|
547
|
+
function mergeMaps(maps: Array<Map<object, AD.Size.Size>>): Map<object, AD.Size.Size> {
|
|
548
|
+
const newMap = new Map<object, AD.Size.Size>();
|
|
600
549
|
maps.forEach((m) => m.forEach((v, k) => newMap.set(k, v)));
|
|
601
550
|
return newMap;
|
|
602
551
|
}
|
|
603
552
|
|
|
604
|
-
function getDesiredSize(element:
|
|
553
|
+
function getDesiredSize(element: object, desiredSizes: Map<object, AD.Size.Size>): AD.Size.Size {
|
|
605
554
|
const size = desiredSizes.get(element);
|
|
606
555
|
if (size) {
|
|
607
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
|
+
}
|