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,52 +1,44 @@
|
|
|
1
|
+
// oxlint-disable-next-line import/no-named-as-default -- standard pdfkit import idiom
|
|
2
|
+
import PDFDocument from "pdfkit";
|
|
3
|
+
import { toBlob, toBytes } from "pdfkit/output";
|
|
1
4
|
import * as AD from "../../abstract-document/index.js";
|
|
2
|
-
import {
|
|
5
|
+
import { registerFonts, getFontNameStyle } from "./font.js";
|
|
6
|
+
import { getHeaderAndFooter } from "./header-footer.js";
|
|
3
7
|
import { measure, measurePages } from "./measure.js";
|
|
4
|
-
import type { Page } from "./
|
|
5
|
-
import { paginate
|
|
6
|
-
import {
|
|
8
|
+
import type { Page } from "./page.js";
|
|
9
|
+
import { paginate } from "./paginate.js";
|
|
10
|
+
import { preProcess } from "./pre-process.js";
|
|
7
11
|
import { renderImage } from "./render-image.js";
|
|
8
|
-
import { registerFonts, getFontNameStyle } from "./font.js";
|
|
9
12
|
import { registerDefaultStdFonts } from "./std-fonts.js";
|
|
10
|
-
import { toBlob, toBytes } from "pdfkit/output";
|
|
11
|
-
// oxlint-disable-next-line import/no-named-as-default -- standard pdfkit import idiom
|
|
12
|
-
import PDFDocument from "pdfkit";
|
|
13
13
|
import type { PdfKitAlignment } from "./textRunRow.js";
|
|
14
14
|
import { rowsCombineTextRuns, rowsSplit } from "./textRunRow.js";
|
|
15
|
+
import { updatePageRefs } from "./update-refs.js";
|
|
15
16
|
|
|
16
17
|
export type PdfExportOptions = {
|
|
17
18
|
compress: boolean;
|
|
18
19
|
};
|
|
19
20
|
|
|
20
|
-
export function exportToHTML5Blob(
|
|
21
|
-
doc: AD.AbstractDoc.AbstractDoc,
|
|
22
|
-
options: PdfExportOptions = { compress: false }
|
|
23
|
-
): Promise<Blob> {
|
|
21
|
+
export function exportToHTML5Blob(doc: AD.AbstractDoc.AbstractDoc, options: PdfExportOptions = { compress: false }): Promise<Blob> {
|
|
24
22
|
const pdf = createDocument(options, doc);
|
|
25
23
|
return toBlob(pdf);
|
|
26
24
|
}
|
|
27
25
|
|
|
28
|
-
export function exportToBytes(
|
|
29
|
-
doc: AD.AbstractDoc.AbstractDoc,
|
|
30
|
-
options: PdfExportOptions = { compress: false }
|
|
31
|
-
): Promise<Uint8Array> {
|
|
26
|
+
export function exportToBytes(doc: AD.AbstractDoc.AbstractDoc, options: PdfExportOptions = { compress: false }): Promise<Uint8Array> {
|
|
32
27
|
const pdf = createDocument(options, doc);
|
|
33
28
|
return toBytes(pdf);
|
|
34
29
|
}
|
|
35
30
|
|
|
36
31
|
/**
|
|
37
|
-
* On the client side the stream can be a BlobStream from the blob-stream package.
|
|
38
|
-
*
|
|
32
|
+
* On the client side the stream can be a BlobStream from the blob-stream package. On the server-side the stream can be a file stream from the fs
|
|
33
|
+
* package.
|
|
34
|
+
*
|
|
39
35
|
* @param blobStream
|
|
40
36
|
* @param doc
|
|
41
37
|
* @param options
|
|
42
38
|
*/
|
|
43
|
-
export function exportToStream(
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
options: PdfExportOptions = { compress: false }
|
|
47
|
-
): void {
|
|
48
|
-
let pdf = createDocument(options, doc);
|
|
49
|
-
pdf.pipe(blobStream);
|
|
39
|
+
export function exportToStream(blobStream: unknown, doc: AD.AbstractDoc.AbstractDoc, options: PdfExportOptions = { compress: false }): void {
|
|
40
|
+
const pdf = createDocument(options, doc);
|
|
41
|
+
pdf.pipe(blobStream as NodeJS.WritableStream);
|
|
50
42
|
}
|
|
51
43
|
|
|
52
44
|
function createDocument(options: PdfExportOptions, ad: AD.AbstractDoc.AbstractDoc): PDFKit.PDFDocument {
|
|
@@ -60,19 +52,14 @@ function createDocument(options: PdfExportOptions, ad: AD.AbstractDoc.AbstractDo
|
|
|
60
52
|
const updatedPages = updatePageRefs(pages);
|
|
61
53
|
const pageDesiredSizes = measurePages(PDFDocument, document, updatedPages);
|
|
62
54
|
|
|
63
|
-
for (
|
|
55
|
+
for (const page of updatedPages) {
|
|
64
56
|
renderPage(document, pdf, pageDesiredSizes, page);
|
|
65
57
|
}
|
|
66
58
|
pdf.end();
|
|
67
59
|
return pdf;
|
|
68
60
|
}
|
|
69
61
|
|
|
70
|
-
function renderPage(
|
|
71
|
-
parentResources: AD.Resources.Resources,
|
|
72
|
-
pdfKit: PDFKit.PDFDocument,
|
|
73
|
-
desiredSizes: Map<{}, AD.Size.Size>,
|
|
74
|
-
page: Page
|
|
75
|
-
): void {
|
|
62
|
+
function renderPage(parentResources: AD.Resources.Resources, pdfKit: PDFKit.PDFDocument, desiredSizes: Map<object, AD.Size.Size>, page: Page): void {
|
|
76
63
|
const section = page.section;
|
|
77
64
|
const style = section.page.style;
|
|
78
65
|
const resources = AD.Resources.mergeResources([parentResources, section]);
|
|
@@ -80,8 +67,8 @@ function renderPage(
|
|
|
80
67
|
const contentRect = addPage(pdfKit, page);
|
|
81
68
|
|
|
82
69
|
page.namedDestionations.forEach((dest) => {
|
|
83
|
-
if (
|
|
84
|
-
|
|
70
|
+
if (pdfKit.addNamedDestination) {
|
|
71
|
+
pdfKit.addNamedDestination(dest);
|
|
85
72
|
}
|
|
86
73
|
});
|
|
87
74
|
|
|
@@ -89,7 +76,7 @@ function renderPage(
|
|
|
89
76
|
const headerX = headerMargins.left;
|
|
90
77
|
const headerStart = headerMargins.top;
|
|
91
78
|
let headerY = headerStart;
|
|
92
|
-
for (
|
|
79
|
+
for (const element of page.header) {
|
|
93
80
|
const elementSize = getDesiredSize(element, desiredSizes);
|
|
94
81
|
const isAbsolute = AD.Position.isPositionAbsolute(element);
|
|
95
82
|
renderSectionElement(
|
|
@@ -112,7 +99,7 @@ function renderPage(
|
|
|
112
99
|
const footerX = footerMargins.left;
|
|
113
100
|
const footerStart = pageHeight - (footerHeight - footerMargins.top);
|
|
114
101
|
let footerY = footerStart;
|
|
115
|
-
for (
|
|
102
|
+
for (const element of page.footer) {
|
|
116
103
|
const elementSize = getDesiredSize(element, desiredSizes);
|
|
117
104
|
const isAbsolute = AD.Position.isPositionAbsolute(element);
|
|
118
105
|
renderSectionElement(
|
|
@@ -128,8 +115,7 @@ function renderPage(
|
|
|
128
115
|
}
|
|
129
116
|
|
|
130
117
|
const elementStart = contentRect.y;
|
|
131
|
-
const columnStep =
|
|
132
|
-
contentRect.width / section.page.style.columnLayout.columnCount + section.page.style.columnLayout.columnGap;
|
|
118
|
+
const columnStep = contentRect.width / section.page.style.columnLayout.columnCount + section.page.style.columnLayout.columnGap;
|
|
133
119
|
for (let columnIndex = 0; columnIndex < page.columns.length; columnIndex++) {
|
|
134
120
|
const x = contentRect.x + columnStep * columnIndex;
|
|
135
121
|
let y = elementStart;
|
|
@@ -170,7 +156,7 @@ function addPage(pdf: PDFKit.PDFDocument, page: Page): AD.Rect.Rect {
|
|
|
170
156
|
function renderSectionElement(
|
|
171
157
|
parentResources: AD.Resources.Resources,
|
|
172
158
|
pdf: PDFKit.PDFDocument,
|
|
173
|
-
desiredSizes: Map<
|
|
159
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
174
160
|
finalRect: AD.Rect.Rect,
|
|
175
161
|
element: AD.SectionElement.SectionElement
|
|
176
162
|
): void {
|
|
@@ -178,20 +164,22 @@ function renderSectionElement(
|
|
|
178
164
|
switch (element.type) {
|
|
179
165
|
case "Paragraph":
|
|
180
166
|
renderParagraph(resources, pdf, desiredSizes, finalRect, element);
|
|
181
|
-
|
|
167
|
+
break;
|
|
182
168
|
case "Table":
|
|
183
169
|
renderTable(resources, pdf, desiredSizes, finalRect, element);
|
|
184
|
-
|
|
170
|
+
break;
|
|
185
171
|
case "Group":
|
|
186
172
|
renderGroup(resources, pdf, desiredSizes, finalRect, element);
|
|
187
|
-
|
|
173
|
+
break;
|
|
174
|
+
default:
|
|
175
|
+
break;
|
|
188
176
|
}
|
|
189
177
|
}
|
|
190
178
|
|
|
191
179
|
function renderGroup(
|
|
192
180
|
resources: AD.Resources.Resources,
|
|
193
181
|
pdfKit: PDFKit.PDFDocument,
|
|
194
|
-
desiredSizes: Map<
|
|
182
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
195
183
|
finalRect: AD.Rect.Rect,
|
|
196
184
|
group: AD.Group.Group
|
|
197
185
|
): void {
|
|
@@ -218,7 +206,7 @@ function renderGroup(
|
|
|
218
206
|
function renderParagraph(
|
|
219
207
|
resources: AD.Resources.Resources,
|
|
220
208
|
pdfKit: PDFKit.PDFDocument,
|
|
221
|
-
desiredSizes: Map<
|
|
209
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
222
210
|
finalRect: AD.Rect.Rect,
|
|
223
211
|
paragraph: AD.Paragraph.Paragraph
|
|
224
212
|
): void {
|
|
@@ -232,10 +220,10 @@ function renderParagraph(
|
|
|
232
220
|
const styleMargins = AD.LayoutFoundation.orDefault(style.margins);
|
|
233
221
|
const availableWidth = finalRect.width - (styleMargins.left + styleMargins.right);
|
|
234
222
|
|
|
235
|
-
|
|
223
|
+
const rows: Array<Array<AD.Atom.Atom>> = [];
|
|
236
224
|
let currentRow: Array<AD.Atom.Atom> = [];
|
|
237
225
|
let currentWidth = 0;
|
|
238
|
-
let previousAtomType: string | undefined;
|
|
226
|
+
let previousAtomType: string | undefined = undefined;
|
|
239
227
|
for (const atom of paragraph.children) {
|
|
240
228
|
if (atom.type === "LineBreak") {
|
|
241
229
|
currentRow.push(atom);
|
|
@@ -297,14 +285,7 @@ function renderParagraph(
|
|
|
297
285
|
let newHeight = styleMargins.top + styleMargins.bottom;
|
|
298
286
|
const alignment = parseAlignment(style.alignment);
|
|
299
287
|
const newRows = rowsSplit(rows, availableWidth, desiredSizes, alignment, pdfKit, resources, style.textStyle);
|
|
300
|
-
const { newDesiredSizes, combinedRows } = rowsCombineTextRuns(
|
|
301
|
-
resources,
|
|
302
|
-
pdfKit,
|
|
303
|
-
newRows,
|
|
304
|
-
desiredSizes,
|
|
305
|
-
alignment,
|
|
306
|
-
style.textStyle
|
|
307
|
-
);
|
|
288
|
+
const { newDesiredSizes, combinedRows } = rowsCombineTextRuns(resources, pdfKit, newRows, desiredSizes, alignment, style.textStyle);
|
|
308
289
|
for (let r = 0; r < combinedRows.length; r++) {
|
|
309
290
|
const row = combinedRows[r];
|
|
310
291
|
const isLast = r === combinedRows.length - 1;
|
|
@@ -398,25 +379,15 @@ function renderAtom(
|
|
|
398
379
|
renderImage(resources, pdfKit, finalRect, textStyle, atom);
|
|
399
380
|
return;
|
|
400
381
|
case "HyperLink":
|
|
401
|
-
renderHyperLink(
|
|
402
|
-
resources,
|
|
403
|
-
pdfKit,
|
|
404
|
-
finalRect,
|
|
405
|
-
textStyle,
|
|
406
|
-
atom,
|
|
407
|
-
alignment,
|
|
408
|
-
isFirstAtom,
|
|
409
|
-
isLastAtom,
|
|
410
|
-
availableWidth
|
|
411
|
-
);
|
|
382
|
+
renderHyperLink(resources, pdfKit, finalRect, textStyle, atom, alignment, isFirstAtom, isLastAtom, availableWidth);
|
|
412
383
|
return;
|
|
413
384
|
case "TocSeparator":
|
|
414
385
|
renderTocSeparator(pdfKit, finalRect, textStyle, atom);
|
|
415
|
-
|
|
386
|
+
break;
|
|
416
387
|
case "LinkTarget":
|
|
417
|
-
return;
|
|
418
388
|
case "LineBreak":
|
|
419
|
-
|
|
389
|
+
default:
|
|
390
|
+
break;
|
|
420
391
|
}
|
|
421
392
|
}
|
|
422
393
|
|
|
@@ -430,13 +401,7 @@ function renderTextField(
|
|
|
430
401
|
isFirstAtom: boolean,
|
|
431
402
|
isLastAtom: boolean
|
|
432
403
|
): void {
|
|
433
|
-
const style = AD.Resources.getStyle(
|
|
434
|
-
textStyle,
|
|
435
|
-
textField.style,
|
|
436
|
-
"TextStyle",
|
|
437
|
-
textField.styleName,
|
|
438
|
-
resources
|
|
439
|
-
) as AD.TextStyle.TextStyle;
|
|
404
|
+
const style = AD.Resources.getStyle(textStyle, textField.style, "TextStyle", textField.styleName, resources) as AD.TextStyle.TextStyle;
|
|
440
405
|
switch (textField.fieldType) {
|
|
441
406
|
case "Date":
|
|
442
407
|
drawText(pdfKit, finalRect, style, new Date(Date.now()).toDateString(), alignment, isFirstAtom, isLastAtom);
|
|
@@ -447,7 +412,9 @@ function renderTextField(
|
|
|
447
412
|
if (textField.text) {
|
|
448
413
|
drawText(pdfKit, finalRect, style, textField.text, alignment, isFirstAtom, isLastAtom);
|
|
449
414
|
}
|
|
450
|
-
|
|
415
|
+
break;
|
|
416
|
+
default:
|
|
417
|
+
break;
|
|
451
418
|
}
|
|
452
419
|
}
|
|
453
420
|
|
|
@@ -467,7 +434,7 @@ function renderTextRun(
|
|
|
467
434
|
"TextStyle",
|
|
468
435
|
textRun.styleName,
|
|
469
436
|
resources,
|
|
470
|
-
textRun.nestedStyleNames
|
|
437
|
+
textRun.nestedStyleNames ?? []
|
|
471
438
|
) as AD.TextStyle.TextStyle;
|
|
472
439
|
drawText(pdf, finalRect, style, textRun.text, alignment, isFirstAtom, isLastAtom);
|
|
473
440
|
}
|
|
@@ -483,13 +450,7 @@ function renderHyperLink(
|
|
|
483
450
|
isLastAtom: boolean,
|
|
484
451
|
availableWidth: number
|
|
485
452
|
): void {
|
|
486
|
-
const style = AD.Resources.getStyle(
|
|
487
|
-
textStyle,
|
|
488
|
-
hyperLink.style,
|
|
489
|
-
"TextStyle",
|
|
490
|
-
hyperLink.styleName,
|
|
491
|
-
resources
|
|
492
|
-
) as AD.TextStyle.TextStyle;
|
|
453
|
+
const style = AD.Resources.getStyle(textStyle, hyperLink.style, "TextStyle", hyperLink.styleName, resources) as AD.TextStyle.TextStyle;
|
|
493
454
|
drawHyperLink(pdf, finalRect, style, hyperLink, alignment, isFirstAtom, isLastAtom, availableWidth);
|
|
494
455
|
}
|
|
495
456
|
|
|
@@ -526,7 +487,7 @@ function drawHyperLink(
|
|
|
526
487
|
pdf
|
|
527
488
|
.font(font)
|
|
528
489
|
.fontSize(fontSize)
|
|
529
|
-
.fillColor(textStyle.color
|
|
490
|
+
.fillColor(textStyle.color ?? "blue");
|
|
530
491
|
|
|
531
492
|
applyTextOffset(pdf, textStyle);
|
|
532
493
|
|
|
@@ -539,25 +500,25 @@ function drawHyperLink(
|
|
|
539
500
|
width: availableWidth,
|
|
540
501
|
align: isSingleAtom ? alignment : "left",
|
|
541
502
|
goTo: isInternalLink ? hyperLink.target.substr(1) : undefined,
|
|
542
|
-
indent: textStyle.indent
|
|
503
|
+
indent: textStyle.indent ?? 0,
|
|
543
504
|
continued: alignment !== "left" ? false : !isLastAtom,
|
|
544
|
-
baseline: textStyle.baseline
|
|
505
|
+
baseline: textStyle.baseline ?? "top",
|
|
545
506
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
546
507
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
547
508
|
});
|
|
548
|
-
if (textStyle.underline
|
|
509
|
+
if (textStyle.underline ?? true) {
|
|
549
510
|
pdf.underline(xUnderline, finalRect.y + 2, finalRect.width, finalRect.height, { color: "blue" });
|
|
550
511
|
}
|
|
551
512
|
} else {
|
|
552
513
|
pdf.text(hyperLink.text, {
|
|
553
514
|
align: "left",
|
|
554
515
|
goTo: isInternalLink ? hyperLink.target.substr(1) : undefined,
|
|
555
|
-
indent: textStyle.indent
|
|
516
|
+
indent: textStyle.indent ?? 0,
|
|
556
517
|
continued: !isLastAtom,
|
|
557
518
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
558
519
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
559
520
|
});
|
|
560
|
-
if (textStyle.underline
|
|
521
|
+
if (textStyle.underline ?? true) {
|
|
561
522
|
pdf.underline(xUnderline, finalRect.y + 2, finalRect.width, finalRect.height, {
|
|
562
523
|
color: "blue",
|
|
563
524
|
});
|
|
@@ -636,17 +597,17 @@ function drawText(
|
|
|
636
597
|
pdf
|
|
637
598
|
.font(font)
|
|
638
599
|
.fontSize(fontSize)
|
|
639
|
-
.fillColor(textStyle.color
|
|
600
|
+
.fillColor(textStyle.color ?? "black", textStyle.opacity ?? 1.0);
|
|
640
601
|
applyTextOffset(pdf, textStyle);
|
|
641
602
|
|
|
642
603
|
switch (alignment) {
|
|
643
604
|
case "justify": {
|
|
644
605
|
pdf.text(text, finalRect.x, finalRect.y, {
|
|
645
606
|
width: Infinity,
|
|
646
|
-
underline: textStyle.underline
|
|
607
|
+
underline: textStyle.underline ?? false,
|
|
647
608
|
continued: false,
|
|
648
|
-
indent: textStyle.indent
|
|
649
|
-
baseline: textStyle.baseline
|
|
609
|
+
indent: textStyle.indent ?? 0,
|
|
610
|
+
baseline: textStyle.baseline ?? "top",
|
|
650
611
|
strike: textStyle.strike,
|
|
651
612
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
652
613
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
@@ -658,10 +619,10 @@ function drawText(
|
|
|
658
619
|
if (isFirst) {
|
|
659
620
|
pdf.text(text, finalRect.x, finalRect.y, {
|
|
660
621
|
width: Infinity,
|
|
661
|
-
underline: textStyle.underline
|
|
622
|
+
underline: textStyle.underline ?? false,
|
|
662
623
|
continued: !isEnd,
|
|
663
|
-
indent: textStyle.indent
|
|
664
|
-
baseline: textStyle.baseline
|
|
624
|
+
indent: textStyle.indent ?? 0,
|
|
625
|
+
baseline: textStyle.baseline ?? "top",
|
|
665
626
|
strike: textStyle.strike,
|
|
666
627
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
667
628
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
@@ -669,10 +630,10 @@ function drawText(
|
|
|
669
630
|
} else {
|
|
670
631
|
pdf.text(text, {
|
|
671
632
|
width: Infinity,
|
|
672
|
-
underline: textStyle.underline
|
|
633
|
+
underline: textStyle.underline ?? false,
|
|
673
634
|
continued: !isEnd,
|
|
674
|
-
indent: textStyle.indent
|
|
675
|
-
baseline: textStyle.baseline
|
|
635
|
+
indent: textStyle.indent ?? 0,
|
|
636
|
+
baseline: textStyle.baseline ?? "top",
|
|
676
637
|
strike: textStyle.strike,
|
|
677
638
|
...(textStyle.characterSpacing !== undefined ? { characterSpacing: textStyle.characterSpacing } : {}),
|
|
678
639
|
...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
|
|
@@ -693,7 +654,7 @@ function drawDottedLine(
|
|
|
693
654
|
const font = getFontNameStyle(textStyle);
|
|
694
655
|
const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
|
|
695
656
|
|
|
696
|
-
const charSpacing = tocSeparator.width
|
|
657
|
+
const charSpacing = tocSeparator.width ?? 5;
|
|
697
658
|
|
|
698
659
|
const oneDotW = pdf.widthOfString(".", {
|
|
699
660
|
width: finalRect.width,
|
|
@@ -714,7 +675,7 @@ function drawDottedLine(
|
|
|
714
675
|
pdf
|
|
715
676
|
.font(font)
|
|
716
677
|
.fontSize(fontSize)
|
|
717
|
-
.fillColor(textStyle.color
|
|
678
|
+
.fillColor(textStyle.color ?? "black");
|
|
718
679
|
|
|
719
680
|
applyTextOffset(pdf, textStyle);
|
|
720
681
|
|
|
@@ -735,26 +696,23 @@ function drawDottedLine(
|
|
|
735
696
|
function renderTable(
|
|
736
697
|
resources: AD.Resources.Resources,
|
|
737
698
|
pdf: PDFKit.PDFDocument,
|
|
738
|
-
desiredSizes: Map<
|
|
699
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
739
700
|
finalRect: AD.Rect.Rect,
|
|
740
701
|
table: AD.Table.Table
|
|
741
702
|
): void {
|
|
742
|
-
const style = AD.Resources.getStyle(
|
|
743
|
-
undefined,
|
|
744
|
-
table.style,
|
|
745
|
-
"TableStyle",
|
|
746
|
-
table.styleName,
|
|
747
|
-
resources
|
|
748
|
-
) as AD.TableStyle.TableStyle;
|
|
703
|
+
const style = AD.Resources.getStyle(undefined, table.style, "TableStyle", table.styleName, resources) as AD.TableStyle.TableStyle;
|
|
749
704
|
const styleMargins = AD.LayoutFoundation.orDefault(style.margins);
|
|
750
705
|
const availableWidth = finalRect.width;
|
|
751
706
|
let y = finalRect.y + styleMargins.top;
|
|
752
707
|
const rows = [...table.headerRows, ...table.children];
|
|
753
|
-
for (
|
|
708
|
+
for (const [index, row] of rows.entries()) {
|
|
754
709
|
const rowSize = getDesiredSize(row, desiredSizes);
|
|
755
710
|
let x = finalRect.x + styleMargins.left;
|
|
756
|
-
if (style.alignment === "Center")
|
|
757
|
-
|
|
711
|
+
if (style.alignment === "Center") {
|
|
712
|
+
x += 0.5 * (availableWidth - rowSize.width);
|
|
713
|
+
} else if (style.alignment === "Right") {
|
|
714
|
+
x += availableWidth - rowSize.width;
|
|
715
|
+
}
|
|
758
716
|
const rowRect = AD.Rect.create(x, y, rowSize.width, rowSize.height);
|
|
759
717
|
const isTop = index === 0;
|
|
760
718
|
const isBottom = index === rows.length - 1;
|
|
@@ -766,7 +724,7 @@ function renderTable(
|
|
|
766
724
|
function renderRow(
|
|
767
725
|
resources: AD.Resources.Resources,
|
|
768
726
|
pdf: PDFKit.PDFDocument,
|
|
769
|
-
desiredSizes: Map<
|
|
727
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
770
728
|
finalRect: AD.Rect.Rect,
|
|
771
729
|
tableCellStyle: AD.TableCellStyle.TableCellStyle,
|
|
772
730
|
table: AD.Table.Table,
|
|
@@ -802,7 +760,7 @@ function renderRow(
|
|
|
802
760
|
function renderCell(
|
|
803
761
|
resources: AD.Resources.Resources,
|
|
804
762
|
pdf: PDFKit.PDFDocument,
|
|
805
|
-
desiredSizes: Map<
|
|
763
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
806
764
|
finalRect: AD.Rect.Rect,
|
|
807
765
|
tableCellStyle: AD.TableCellStyle.TableCellStyle,
|
|
808
766
|
cell: AD.TableCell.TableCell,
|
|
@@ -811,13 +769,7 @@ function renderCell(
|
|
|
811
769
|
isTop: boolean,
|
|
812
770
|
isBottom: boolean
|
|
813
771
|
): void {
|
|
814
|
-
const style = AD.Resources.getStyle(
|
|
815
|
-
tableCellStyle,
|
|
816
|
-
cell.style,
|
|
817
|
-
"TableCellStyle",
|
|
818
|
-
cell.styleName,
|
|
819
|
-
resources
|
|
820
|
-
) as AD.TableCellStyle.TableCellStyle;
|
|
772
|
+
const style = AD.Resources.getStyle(tableCellStyle, cell.style, "TableCellStyle", cell.styleName, resources) as AD.TableCellStyle.TableCellStyle;
|
|
821
773
|
if (style.background) {
|
|
822
774
|
pdf.rect(finalRect.x, finalRect.y, finalRect.width, finalRect.height).fill(style.background);
|
|
823
775
|
}
|
|
@@ -825,15 +777,18 @@ function renderCell(
|
|
|
825
777
|
const borders = AD.LayoutFoundation.orDefault(style.borders);
|
|
826
778
|
const padding = AD.LayoutFoundation.orDefault(style.padding);
|
|
827
779
|
|
|
828
|
-
|
|
780
|
+
const x = finalRect.x + padding.left;
|
|
829
781
|
const availableHeight = finalRect.height;
|
|
830
|
-
|
|
782
|
+
const contentHeight = cell.children
|
|
831
783
|
.map((c) => (AD.Position.isPositionAbsolute(c) ? 0 : getDesiredSize(c, desiredSizes).height))
|
|
832
784
|
.reduce((a, b) => a + b, 0);
|
|
833
785
|
const startY = finalRect.y + padding.top;
|
|
834
786
|
let y = startY;
|
|
835
|
-
if (style.verticalAlignment === "Middle")
|
|
836
|
-
|
|
787
|
+
if (style.verticalAlignment === "Middle") {
|
|
788
|
+
y += 0.5 * (availableHeight - contentHeight - padding.top - padding.bottom);
|
|
789
|
+
} else if (style.verticalAlignment === "Bottom") {
|
|
790
|
+
y += availableHeight - contentHeight - padding.top - padding.bottom;
|
|
791
|
+
}
|
|
837
792
|
|
|
838
793
|
for (const element of cell.children) {
|
|
839
794
|
const elementSize = getDesiredSize(element, desiredSizes);
|
|
@@ -889,7 +844,7 @@ function renderCell(
|
|
|
889
844
|
}
|
|
890
845
|
|
|
891
846
|
function borderColor(style: AD.TableCellStyle.TableCellStyle, edge: "top" | "bottom" | "left" | "right"): string {
|
|
892
|
-
if (style.borderColors
|
|
847
|
+
if (style.borderColors?.[edge]) {
|
|
893
848
|
return style.borderColors[edge];
|
|
894
849
|
}
|
|
895
850
|
if (style.borderColor) {
|
|
@@ -898,7 +853,7 @@ function borderColor(style: AD.TableCellStyle.TableCellStyle, edge: "top" | "bot
|
|
|
898
853
|
return "black";
|
|
899
854
|
}
|
|
900
855
|
|
|
901
|
-
function getDesiredSize(element:
|
|
856
|
+
function getDesiredSize(element: object, desiredSizes: Map<object, AD.Size.Size>): AD.Size.Size {
|
|
902
857
|
const size = desiredSizes.get(element);
|
|
903
858
|
if (size) {
|
|
904
859
|
return size;
|
|
@@ -926,6 +881,6 @@ function resetTextOffset(pdf: PDFKit.PDFDocument, textStyle: AD.TextStyle.TextSt
|
|
|
926
881
|
|
|
927
882
|
function calculateTextOffset(textStyle: AD.TextStyle.TextStyle): number {
|
|
928
883
|
const defaultPosition = textStyle.superScript ? 0.5 : textStyle.subScript ? -0.5 : 0;
|
|
929
|
-
const position = textStyle.verticalPosition
|
|
884
|
+
const position = textStyle.verticalPosition ?? defaultPosition;
|
|
930
885
|
return position;
|
|
931
886
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as PdfkitModule from "pdfkit";
|
|
2
2
|
import Helvetica from "pdfkit/standard-fonts/Helvetica";
|
|
3
3
|
import HelveticaBold from "pdfkit/standard-fonts/HelveticaBold";
|
|
4
|
-
import HelveticaOblique from "pdfkit/standard-fonts/HelveticaOblique";
|
|
5
4
|
import HelveticaBoldOblique from "pdfkit/standard-fonts/HelveticaBoldOblique";
|
|
5
|
+
import HelveticaOblique from "pdfkit/standard-fonts/HelveticaOblique";
|
|
6
6
|
|
|
7
7
|
// pdfkit 0.20's browser build stopped bundling standard font data and requires
|
|
8
8
|
// registering it explicitly via `registerStdFonts` before it's used, or `.font("Helvetica")`
|
|
@@ -11,7 +11,7 @@ type LongWordSplit = {
|
|
|
11
11
|
export function rowsSplit(
|
|
12
12
|
rows: ReadonlyArray<ReadonlyArray<AD.Atom.Atom>>,
|
|
13
13
|
availableWidth: number,
|
|
14
|
-
desiredSizes: Map<
|
|
14
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
15
15
|
alignment: PdfKitAlignment,
|
|
16
16
|
pdf: PDFKit.PDFDocument,
|
|
17
17
|
resources: AD.Resources.Resources,
|
|
@@ -55,7 +55,7 @@ export function rowsSplit(
|
|
|
55
55
|
//if the next atom is a space, we need to split this row early if it doesnt fit
|
|
56
56
|
const nextAtom = row[i + 1];
|
|
57
57
|
const nextWidthIfSpace =
|
|
58
|
-
!isSpace && nextAtom
|
|
58
|
+
!isSpace && nextAtom?.type === "TextRun" && nextAtom.text.replaceAll(/[\p{Zs}]/gu, "").length === 0
|
|
59
59
|
? getDesiredSize(nextAtom, desiredSizes).width
|
|
60
60
|
: 0;
|
|
61
61
|
|
|
@@ -102,15 +102,11 @@ export function rowsSplit(
|
|
|
102
102
|
continue;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
newRows.push(
|
|
106
|
-
lastSpace && (alignment === "right" || alignment === "justify") ? currentRow.slice(0, -1) : currentRow
|
|
107
|
-
);
|
|
105
|
+
newRows.push(lastSpace && (alignment === "right" || alignment === "justify") ? currentRow.slice(0, -1) : currentRow);
|
|
108
106
|
currentRow = [atom];
|
|
109
107
|
currentWidth = width;
|
|
110
108
|
}
|
|
111
|
-
newRows.push(
|
|
112
|
-
lastWasSpace && (alignment === "right" || alignment === "justify") ? currentRow.slice(0, -1) : currentRow
|
|
113
|
-
);
|
|
109
|
+
newRows.push(lastWasSpace && (alignment === "right" || alignment === "justify") ? currentRow.slice(0, -1) : currentRow);
|
|
114
110
|
}
|
|
115
111
|
return newRows;
|
|
116
112
|
}
|
|
@@ -169,10 +165,10 @@ export function rowsCombineTextRuns(
|
|
|
169
165
|
resources: AD.Resources.Resources,
|
|
170
166
|
pdf: PDFKit.PDFDocument,
|
|
171
167
|
rows: ReadonlyArray<ReadonlyArray<AD.Atom.Atom>>,
|
|
172
|
-
desiredSizes: Map<
|
|
168
|
+
desiredSizes: Map<object, AD.Size.Size>,
|
|
173
169
|
alignment: PdfKitAlignment,
|
|
174
170
|
defaultStyle: AD.TextStyle.TextStyle
|
|
175
|
-
): { newDesiredSizes: Map<
|
|
171
|
+
): { newDesiredSizes: Map<object, AD.Size.Size>; combinedRows: ReadonlyArray<ReadonlyArray<AD.Atom.Atom>> } {
|
|
176
172
|
if (alignment === "justify") {
|
|
177
173
|
return { combinedRows: rows, newDesiredSizes: desiredSizes };
|
|
178
174
|
}
|
|
@@ -221,14 +217,7 @@ export function rowsCombineTextRuns(
|
|
|
221
217
|
}
|
|
222
218
|
|
|
223
219
|
const style = JSON.stringify(
|
|
224
|
-
AD.Resources.getNestedStyle(
|
|
225
|
-
defaultStyle,
|
|
226
|
-
atom.style,
|
|
227
|
-
"TextStyle",
|
|
228
|
-
atom.styleName,
|
|
229
|
-
resources,
|
|
230
|
-
atom.nestedStyleNames || []
|
|
231
|
-
)
|
|
220
|
+
AD.Resources.getNestedStyle(defaultStyle, atom.style, "TextStyle", atom.styleName, resources, atom.nestedStyleNames ?? [])
|
|
232
221
|
);
|
|
233
222
|
|
|
234
223
|
if (current === undefined) {
|
|
@@ -313,7 +302,7 @@ function stringWidth(
|
|
|
313
302
|
"TextStyle",
|
|
314
303
|
textRun.styleName,
|
|
315
304
|
resources,
|
|
316
|
-
textRun.nestedStyleNames
|
|
305
|
+
textRun.nestedStyleNames ?? []
|
|
317
306
|
) as AD.TextStyle.TextStyle) ?? defaultStyle;
|
|
318
307
|
|
|
319
308
|
const font = getFontNameStyle(style);
|
|
@@ -321,11 +310,11 @@ function stringWidth(
|
|
|
321
310
|
pdf
|
|
322
311
|
.font(font)
|
|
323
312
|
.fontSize(fontSize)
|
|
324
|
-
.fillColor(style.color
|
|
313
|
+
.fillColor(style.color ?? "black");
|
|
325
314
|
|
|
326
315
|
const textOptions = {
|
|
327
|
-
underline: style.underline
|
|
328
|
-
indent: style.indent
|
|
316
|
+
underline: style.underline ?? false,
|
|
317
|
+
indent: style.indent ?? 0,
|
|
329
318
|
lineBreak: false,
|
|
330
319
|
...(style.characterSpacing !== undefined ? { characterSpacing: style.characterSpacing } : {}),
|
|
331
320
|
...(style.lineGap !== undefined ? { lineGap: style.lineGap } : {}),
|
|
@@ -333,7 +322,7 @@ function stringWidth(
|
|
|
333
322
|
return pdf.widthOfString(text, textOptions);
|
|
334
323
|
}
|
|
335
324
|
|
|
336
|
-
function getDesiredSize(element:
|
|
325
|
+
function getDesiredSize(element: object, desiredSizes: Map<object, AD.Size.Size>): AD.Size.Size {
|
|
337
326
|
const size = desiredSizes.get(element);
|
|
338
327
|
if (size) {
|
|
339
328
|
return size;
|