pdfmake 0.3.11 → 0.3.13
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 +22 -0
- package/build/pdfmake.js +46900 -62599
- package/build/pdfmake.js.map +1 -1
- package/build/pdfmake.min.js +2 -2
- package/build/pdfmake.min.js.map +1 -1
- package/build/standard-fonts/Courier.js +1 -19
- package/build/standard-fonts/Helvetica.js +1 -19
- package/build/standard-fonts/Symbol.js +1 -13
- package/build/standard-fonts/Times.js +1 -19
- package/build/standard-fonts/ZapfDingbats.js +1 -13
- package/js/DocumentContext.js +3 -1
- package/js/ElementWriter.js +5 -2
- package/js/LayoutBuilder.js +12 -4
- package/js/OutputDocument.js +18 -9
- package/js/OutputDocumentServer.js +5 -0
- package/js/PDFDocument.js +7 -8
- package/js/PageElementWriter.js +5 -1
- package/js/Renderer.js +5 -0
- package/js/TableProcessor.js +13 -0
- package/js/TextDecorator.js +3 -3
- package/js/browser-extensions/index.js +7 -1
- package/js/browser-extensions/standard-fonts/Courier.js +1 -19
- package/js/browser-extensions/standard-fonts/Helvetica.js +1 -19
- package/js/browser-extensions/standard-fonts/Symbol.js +1 -7
- package/js/browser-extensions/standard-fonts/Times.js +1 -19
- package/js/browser-extensions/standard-fonts/ZapfDingbats.js +1 -7
- package/js/columnCalculator.js +10 -4
- package/package.json +3 -9
- package/src/DocumentContext.js +1 -1
- package/src/ElementWriter.js +6 -2
- package/src/LayoutBuilder.js +12 -4
- package/src/OutputDocument.js +20 -9
- package/src/OutputDocumentServer.js +6 -0
- package/src/PDFDocument.js +7 -8
- package/src/PageElementWriter.js +5 -1
- package/src/Renderer.js +6 -0
- package/src/TableProcessor.js +15 -0
- package/src/TextDecorator.js +4 -3
- package/src/browser-extensions/index.js +7 -1
- package/src/browser-extensions/standard-fonts/Courier.js +6 -8
- package/src/browser-extensions/standard-fonts/Helvetica.js +6 -8
- package/src/browser-extensions/standard-fonts/Symbol.js +1 -5
- package/src/browser-extensions/standard-fonts/Times.js +6 -8
- package/src/browser-extensions/standard-fonts/ZapfDingbats.js +1 -5
- package/src/columnCalculator.js +4 -4
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var fontContainer = {
|
|
4
|
-
vfs: {
|
|
5
|
-
'data/ZapfDingbats.afm': { data: "StartFontMetrics 4.1\nComment Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.\nComment Creation Date: Thu May 1 15:14:13 1997\nComment UniqueID 43082\nComment VMusage 45775 55535\nFontName ZapfDingbats\nFullName ITC Zapf Dingbats\nFamilyName ZapfDingbats\nWeight Medium\nItalicAngle 0\nIsFixedPitch false\nCharacterSet Special\nFontBBox -1 -143 981 820 \nUnderlinePosition -100\nUnderlineThickness 50\nVersion 002.000\nNotice Copyright (c) 1985, 1987, 1988, 1989, 1997 Adobe Systems Incorporated. All Rights Reserved.ITC Zapf Dingbats is a registered trademark of International Typeface Corporation.\nEncodingScheme FontSpecific\nStdHW 28\nStdVW 90\nStartCharMetrics 202\nC 32 ; WX 278 ; N space ; B 0 0 0 0 ;\nC 33 ; WX 974 ; N a1 ; B 35 72 939 621 ;\nC 34 ; WX 961 ; N a2 ; B 35 81 927 611 ;\nC 35 ; WX 974 ; N a202 ; B 35 72 939 621 ;\nC 36 ; WX 980 ; N a3 ; B 35 0 945 692 ;\nC 37 ; WX 719 ; N a4 ; B 34 139 685 566 ;\nC 38 ; WX 789 ; N a5 ; B 35 -14 755 705 ;\nC 39 ; WX 790 ; N a119 ; B 35 -14 755 705 ;\nC 40 ; WX 791 ; N a118 ; B 35 -13 761 705 ;\nC 41 ; WX 690 ; N a117 ; B 34 138 655 553 ;\nC 42 ; WX 960 ; N a11 ; B 35 123 925 568 ;\nC 43 ; WX 939 ; N a12 ; B 35 134 904 559 ;\nC 44 ; WX 549 ; N a13 ; B 29 -11 516 705 ;\nC 45 ; WX 855 ; N a14 ; B 34 59 820 632 ;\nC 46 ; WX 911 ; N a15 ; B 35 50 876 642 ;\nC 47 ; WX 933 ; N a16 ; B 35 139 899 550 ;\nC 48 ; WX 911 ; N a105 ; B 35 50 876 642 ;\nC 49 ; WX 945 ; N a17 ; B 35 139 909 553 ;\nC 50 ; WX 974 ; N a18 ; B 35 104 938 587 ;\nC 51 ; WX 755 ; N a19 ; B 34 -13 721 705 ;\nC 52 ; WX 846 ; N a20 ; B 36 -14 811 705 ;\nC 53 ; WX 762 ; N a21 ; B 35 0 727 692 ;\nC 54 ; WX 761 ; N a22 ; B 35 0 727 692 ;\nC 55 ; WX 571 ; N a23 ; B -1 -68 571 661 ;\nC 56 ; WX 677 ; N a24 ; B 36 -13 642 705 ;\nC 57 ; WX 763 ; N a25 ; B 35 0 728 692 ;\nC 58 ; WX 760 ; N a26 ; B 35 0 726 692 ;\nC 59 ; WX 759 ; N a27 ; B 35 0 725 692 ;\nC 60 ; WX 754 ; N a28 ; B 35 0 720 692 ;\nC 61 ; WX 494 ; N a6 ; B 35 0 460 692 ;\nC 62 ; WX 552 ; N a7 ; B 35 0 517 692 ;\nC 63 ; WX 537 ; N a8 ; B 35 0 503 692 ;\nC 64 ; WX 577 ; N a9 ; B 35 96 542 596 ;\nC 65 ; WX 692 ; N a10 ; B 35 -14 657 705 ;\nC 66 ; WX 786 ; N a29 ; B 35 -14 751 705 ;\nC 67 ; WX 788 ; N a30 ; B 35 -14 752 705 ;\nC 68 ; WX 788 ; N a31 ; B 35 -14 753 705 ;\nC 69 ; WX 790 ; N a32 ; B 35 -14 756 705 ;\nC 70 ; WX 793 ; N a33 ; B 35 -13 759 705 ;\nC 71 ; WX 794 ; N a34 ; B 35 -13 759 705 ;\nC 72 ; WX 816 ; N a35 ; B 35 -14 782 705 ;\nC 73 ; WX 823 ; N a36 ; B 35 -14 787 705 ;\nC 74 ; WX 789 ; N a37 ; B 35 -14 754 705 ;\nC 75 ; WX 841 ; N a38 ; B 35 -14 807 705 ;\nC 76 ; WX 823 ; N a39 ; B 35 -14 789 705 ;\nC 77 ; WX 833 ; N a40 ; B 35 -14 798 705 ;\nC 78 ; WX 816 ; N a41 ; B 35 -13 782 705 ;\nC 79 ; WX 831 ; N a42 ; B 35 -14 796 705 ;\nC 80 ; WX 923 ; N a43 ; B 35 -14 888 705 ;\nC 81 ; WX 744 ; N a44 ; B 35 0 710 692 ;\nC 82 ; WX 723 ; N a45 ; B 35 0 688 692 ;\nC 83 ; WX 749 ; N a46 ; B 35 0 714 692 ;\nC 84 ; WX 790 ; N a47 ; B 34 -14 756 705 ;\nC 85 ; WX 792 ; N a48 ; B 35 -14 758 705 ;\nC 86 ; WX 695 ; N a49 ; B 35 -14 661 706 ;\nC 87 ; WX 776 ; N a50 ; B 35 -6 741 699 ;\nC 88 ; WX 768 ; N a51 ; B 35 -7 734 699 ;\nC 89 ; WX 792 ; N a52 ; B 35 -14 757 705 ;\nC 90 ; WX 759 ; N a53 ; B 35 0 725 692 ;\nC 91 ; WX 707 ; N a54 ; B 35 -13 672 704 ;\nC 92 ; WX 708 ; N a55 ; B 35 -14 672 705 ;\nC 93 ; WX 682 ; N a56 ; B 35 -14 647 705 ;\nC 94 ; WX 701 ; N a57 ; B 35 -14 666 705 ;\nC 95 ; WX 826 ; N a58 ; B 35 -14 791 705 ;\nC 96 ; WX 815 ; N a59 ; B 35 -14 780 705 ;\nC 97 ; WX 789 ; N a60 ; B 35 -14 754 705 ;\nC 98 ; WX 789 ; N a61 ; B 35 -14 754 705 ;\nC 99 ; WX 707 ; N a62 ; B 34 -14 673 705 ;\nC 100 ; WX 687 ; N a63 ; B 36 0 651 692 ;\nC 101 ; WX 696 ; N a64 ; B 35 0 661 691 ;\nC 102 ; WX 689 ; N a65 ; B 35 0 655 692 ;\nC 103 ; WX 786 ; N a66 ; B 34 -14 751 705 ;\nC 104 ; WX 787 ; N a67 ; B 35 -14 752 705 ;\nC 105 ; WX 713 ; N a68 ; B 35 -14 678 705 ;\nC 106 ; WX 791 ; N a69 ; B 35 -14 756 705 ;\nC 107 ; WX 785 ; N a70 ; B 36 -14 751 705 ;\nC 108 ; WX 791 ; N a71 ; B 35 -14 757 705 ;\nC 109 ; WX 873 ; N a72 ; B 35 -14 838 705 ;\nC 110 ; WX 761 ; N a73 ; B 35 0 726 692 ;\nC 111 ; WX 762 ; N a74 ; B 35 0 727 692 ;\nC 112 ; WX 762 ; N a203 ; B 35 0 727 692 ;\nC 113 ; WX 759 ; N a75 ; B 35 0 725 692 ;\nC 114 ; WX 759 ; N a204 ; B 35 0 725 692 ;\nC 115 ; WX 892 ; N a76 ; B 35 0 858 705 ;\nC 116 ; WX 892 ; N a77 ; B 35 -14 858 692 ;\nC 117 ; WX 788 ; N a78 ; B 35 -14 754 705 ;\nC 118 ; WX 784 ; N a79 ; B 35 -14 749 705 ;\nC 119 ; WX 438 ; N a81 ; B 35 -14 403 705 ;\nC 120 ; WX 138 ; N a82 ; B 35 0 104 692 ;\nC 121 ; WX 277 ; N a83 ; B 35 0 242 692 ;\nC 122 ; WX 415 ; N a84 ; B 35 0 380 692 ;\nC 123 ; WX 392 ; N a97 ; B 35 263 357 705 ;\nC 124 ; WX 392 ; N a98 ; B 34 263 357 705 ;\nC 125 ; WX 668 ; N a99 ; B 35 263 633 705 ;\nC 126 ; WX 668 ; N a100 ; B 36 263 634 705 ;\nC 128 ; WX 390 ; N a89 ; B 35 -14 356 705 ;\nC 129 ; WX 390 ; N a90 ; B 35 -14 355 705 ;\nC 130 ; WX 317 ; N a93 ; B 35 0 283 692 ;\nC 131 ; WX 317 ; N a94 ; B 35 0 283 692 ;\nC 132 ; WX 276 ; N a91 ; B 35 0 242 692 ;\nC 133 ; WX 276 ; N a92 ; B 35 0 242 692 ;\nC 134 ; WX 509 ; N a205 ; B 35 0 475 692 ;\nC 135 ; WX 509 ; N a85 ; B 35 0 475 692 ;\nC 136 ; WX 410 ; N a206 ; B 35 0 375 692 ;\nC 137 ; WX 410 ; N a86 ; B 35 0 375 692 ;\nC 138 ; WX 234 ; N a87 ; B 35 -14 199 705 ;\nC 139 ; WX 234 ; N a88 ; B 35 -14 199 705 ;\nC 140 ; WX 334 ; N a95 ; B 35 0 299 692 ;\nC 141 ; WX 334 ; N a96 ; B 35 0 299 692 ;\nC 161 ; WX 732 ; N a101 ; B 35 -143 697 806 ;\nC 162 ; WX 544 ; N a102 ; B 56 -14 488 706 ;\nC 163 ; WX 544 ; N a103 ; B 34 -14 508 705 ;\nC 164 ; WX 910 ; N a104 ; B 35 40 875 651 ;\nC 165 ; WX 667 ; N a106 ; B 35 -14 633 705 ;\nC 166 ; WX 760 ; N a107 ; B 35 -14 726 705 ;\nC 167 ; WX 760 ; N a108 ; B 0 121 758 569 ;\nC 168 ; WX 776 ; N a112 ; B 35 0 741 705 ;\nC 169 ; WX 595 ; N a111 ; B 34 -14 560 705 ;\nC 170 ; WX 694 ; N a110 ; B 35 -14 659 705 ;\nC 171 ; WX 626 ; N a109 ; B 34 0 591 705 ;\nC 172 ; WX 788 ; N a120 ; B 35 -14 754 705 ;\nC 173 ; WX 788 ; N a121 ; B 35 -14 754 705 ;\nC 174 ; WX 788 ; N a122 ; B 35 -14 754 705 ;\nC 175 ; WX 788 ; N a123 ; B 35 -14 754 705 ;\nC 176 ; WX 788 ; N a124 ; B 35 -14 754 705 ;\nC 177 ; WX 788 ; N a125 ; B 35 -14 754 705 ;\nC 178 ; WX 788 ; N a126 ; B 35 -14 754 705 ;\nC 179 ; WX 788 ; N a127 ; B 35 -14 754 705 ;\nC 180 ; WX 788 ; N a128 ; B 35 -14 754 705 ;\nC 181 ; WX 788 ; N a129 ; B 35 -14 754 705 ;\nC 182 ; WX 788 ; N a130 ; B 35 -14 754 705 ;\nC 183 ; WX 788 ; N a131 ; B 35 -14 754 705 ;\nC 184 ; WX 788 ; N a132 ; B 35 -14 754 705 ;\nC 185 ; WX 788 ; N a133 ; B 35 -14 754 705 ;\nC 186 ; WX 788 ; N a134 ; B 35 -14 754 705 ;\nC 187 ; WX 788 ; N a135 ; B 35 -14 754 705 ;\nC 188 ; WX 788 ; N a136 ; B 35 -14 754 705 ;\nC 189 ; WX 788 ; N a137 ; B 35 -14 754 705 ;\nC 190 ; WX 788 ; N a138 ; B 35 -14 754 705 ;\nC 191 ; WX 788 ; N a139 ; B 35 -14 754 705 ;\nC 192 ; WX 788 ; N a140 ; B 35 -14 754 705 ;\nC 193 ; WX 788 ; N a141 ; B 35 -14 754 705 ;\nC 194 ; WX 788 ; N a142 ; B 35 -14 754 705 ;\nC 195 ; WX 788 ; N a143 ; B 35 -14 754 705 ;\nC 196 ; WX 788 ; N a144 ; B 35 -14 754 705 ;\nC 197 ; WX 788 ; N a145 ; B 35 -14 754 705 ;\nC 198 ; WX 788 ; N a146 ; B 35 -14 754 705 ;\nC 199 ; WX 788 ; N a147 ; B 35 -14 754 705 ;\nC 200 ; WX 788 ; N a148 ; B 35 -14 754 705 ;\nC 201 ; WX 788 ; N a149 ; B 35 -14 754 705 ;\nC 202 ; WX 788 ; N a150 ; B 35 -14 754 705 ;\nC 203 ; WX 788 ; N a151 ; B 35 -14 754 705 ;\nC 204 ; WX 788 ; N a152 ; B 35 -14 754 705 ;\nC 205 ; WX 788 ; N a153 ; B 35 -14 754 705 ;\nC 206 ; WX 788 ; N a154 ; B 35 -14 754 705 ;\nC 207 ; WX 788 ; N a155 ; B 35 -14 754 705 ;\nC 208 ; WX 788 ; N a156 ; B 35 -14 754 705 ;\nC 209 ; WX 788 ; N a157 ; B 35 -14 754 705 ;\nC 210 ; WX 788 ; N a158 ; B 35 -14 754 705 ;\nC 211 ; WX 788 ; N a159 ; B 35 -14 754 705 ;\nC 212 ; WX 894 ; N a160 ; B 35 58 860 634 ;\nC 213 ; WX 838 ; N a161 ; B 35 152 803 540 ;\nC 214 ; WX 1016 ; N a163 ; B 34 152 981 540 ;\nC 215 ; WX 458 ; N a164 ; B 35 -127 422 820 ;\nC 216 ; WX 748 ; N a196 ; B 35 94 698 597 ;\nC 217 ; WX 924 ; N a165 ; B 35 140 890 552 ;\nC 218 ; WX 748 ; N a192 ; B 35 94 698 597 ;\nC 219 ; WX 918 ; N a166 ; B 35 166 884 526 ;\nC 220 ; WX 927 ; N a167 ; B 35 32 892 660 ;\nC 221 ; WX 928 ; N a168 ; B 35 129 891 562 ;\nC 222 ; WX 928 ; N a169 ; B 35 128 893 563 ;\nC 223 ; WX 834 ; N a170 ; B 35 155 799 537 ;\nC 224 ; WX 873 ; N a171 ; B 35 93 838 599 ;\nC 225 ; WX 828 ; N a172 ; B 35 104 791 588 ;\nC 226 ; WX 924 ; N a173 ; B 35 98 889 594 ;\nC 227 ; WX 924 ; N a162 ; B 35 98 889 594 ;\nC 228 ; WX 917 ; N a174 ; B 35 0 882 692 ;\nC 229 ; WX 930 ; N a175 ; B 35 84 896 608 ;\nC 230 ; WX 931 ; N a176 ; B 35 84 896 608 ;\nC 231 ; WX 463 ; N a177 ; B 35 -99 429 791 ;\nC 232 ; WX 883 ; N a178 ; B 35 71 848 623 ;\nC 233 ; WX 836 ; N a179 ; B 35 44 802 648 ;\nC 234 ; WX 836 ; N a193 ; B 35 44 802 648 ;\nC 235 ; WX 867 ; N a180 ; B 35 101 832 591 ;\nC 236 ; WX 867 ; N a199 ; B 35 101 832 591 ;\nC 237 ; WX 696 ; N a181 ; B 35 44 661 648 ;\nC 238 ; WX 696 ; N a200 ; B 35 44 661 648 ;\nC 239 ; WX 874 ; N a182 ; B 35 77 840 619 ;\nC 241 ; WX 874 ; N a201 ; B 35 73 840 615 ;\nC 242 ; WX 760 ; N a183 ; B 35 0 725 692 ;\nC 243 ; WX 946 ; N a184 ; B 35 160 911 533 ;\nC 244 ; WX 771 ; N a197 ; B 34 37 736 655 ;\nC 245 ; WX 865 ; N a185 ; B 35 207 830 481 ;\nC 246 ; WX 771 ; N a194 ; B 34 37 736 655 ;\nC 247 ; WX 888 ; N a198 ; B 34 -19 853 712 ;\nC 248 ; WX 967 ; N a186 ; B 35 124 932 568 ;\nC 249 ; WX 888 ; N a195 ; B 34 -19 853 712 ;\nC 250 ; WX 831 ; N a187 ; B 35 113 796 579 ;\nC 251 ; WX 873 ; N a188 ; B 36 118 838 578 ;\nC 252 ; WX 927 ; N a189 ; B 35 150 891 542 ;\nC 253 ; WX 970 ; N a190 ; B 35 76 931 616 ;\nC 254 ; WX 918 ; N a191 ; B 34 99 884 593 ;\nEndCharMetrics\nEndFontMetrics\n", encoding: 'utf8' }
|
|
6
|
-
},
|
|
7
|
-
fonts: {
|
|
8
|
-
ZapfDingbats: {
|
|
9
|
-
normal: 'ZapfDingbats'
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
};
|
|
1
|
+
var fontContainer = {"standardFonts":[{"name":"ZapfDingbats","bbox":[-1,-143,981,820],"ascender":0,"descender":0,"xHeight":0,"capHeight":0,"glyphNames":"space","glyphWidths":[278],"kernPairs":[]}],"fonts":{"ZapfDingbats":{"normal":"ZapfDingbats"}}};
|
|
13
2
|
|
|
14
3
|
var _global = typeof window === 'object' ? window : typeof global === 'object' ? global : typeof self === 'object' ? self : this;
|
|
15
4
|
if (typeof _global.pdfMake !== 'undefined' && typeof _global.pdfMake.addFontContainer !== 'undefined') {
|
|
16
5
|
_global.pdfMake.addFontContainer(fontContainer);
|
|
17
6
|
}
|
|
18
|
-
|
|
19
7
|
if (typeof module !== 'undefined') {
|
|
20
8
|
module.exports = fontContainer;
|
|
21
9
|
}
|
package/js/DocumentContext.js
CHANGED
package/js/ElementWriter.js
CHANGED
|
@@ -277,6 +277,7 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
277
277
|
if (!useBlockXOffset && block.height > ctx.availableHeight) {
|
|
278
278
|
return false;
|
|
279
279
|
}
|
|
280
|
+
let unbreakableFillsInserted = 0;
|
|
280
281
|
block.items.forEach(item => {
|
|
281
282
|
switch (item.type) {
|
|
282
283
|
case 'line':
|
|
@@ -296,9 +297,11 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
296
297
|
(0, _tools.offsetVector)(v, useBlockXOffset ? block.xOffset || 0 : ctx.x, useBlockYOffset ? block.yOffset || 0 : ctx.y);
|
|
297
298
|
if (v._isFillColorFromUnbreakable) {
|
|
298
299
|
// If the item is a fillColor from an unbreakable block
|
|
299
|
-
// We have to add it at the beginning of the items body array of the page
|
|
300
|
+
// We have to add it at the beginning of the items body array of the page,
|
|
301
|
+
// after the fills already inserted from this block so that they keep their draw order
|
|
300
302
|
delete v._isFillColorFromUnbreakable;
|
|
301
|
-
const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page];
|
|
303
|
+
const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page] + unbreakableFillsInserted;
|
|
304
|
+
unbreakableFillsInserted++;
|
|
302
305
|
page.items.splice(endOfBackgroundItemsIndex, 0, {
|
|
303
306
|
type: 'vector',
|
|
304
307
|
item: v
|
package/js/LayoutBuilder.js
CHANGED
|
@@ -490,8 +490,9 @@ class LayoutBuilder {
|
|
|
490
490
|
* When in snaking columns, first tries moving to next column.
|
|
491
491
|
* If no columns available, moves to next page and resets x to left margin.
|
|
492
492
|
* @param {string} pageOrientation - Optional page orientation for the new page
|
|
493
|
+
* @param {TableProcessor} [tableProcessor] - Reapply table alignment in the new column
|
|
493
494
|
*/
|
|
494
|
-
snakingAwarePageBreak(pageOrientation) {
|
|
495
|
+
snakingAwarePageBreak(pageOrientation, tableProcessor) {
|
|
495
496
|
let ctx = this.writer.context();
|
|
496
497
|
let snakingSnapshot = ctx.getSnakingSnapshot();
|
|
497
498
|
if (!snakingSnapshot) {
|
|
@@ -500,7 +501,7 @@ class LayoutBuilder {
|
|
|
500
501
|
|
|
501
502
|
// Try flowing to next column first
|
|
502
503
|
if (this.writer.canMoveToNextColumn()) {
|
|
503
|
-
this.writer.moveToNextColumn();
|
|
504
|
+
this.writer.moveToNextColumn(tableProcessor ? context => tableProcessor.alignTable(context) : undefined);
|
|
504
505
|
return;
|
|
505
506
|
}
|
|
506
507
|
|
|
@@ -514,6 +515,9 @@ class LayoutBuilder {
|
|
|
514
515
|
let savedLastColumnWidth = ctx.lastColumnWidth;
|
|
515
516
|
ctx.resetSnakingColumnsForNewPage();
|
|
516
517
|
ctx.lastColumnWidth = savedLastColumnWidth;
|
|
518
|
+
if (tableProcessor) {
|
|
519
|
+
tableProcessor.alignTable(ctx);
|
|
520
|
+
}
|
|
517
521
|
}
|
|
518
522
|
|
|
519
523
|
// vertical container
|
|
@@ -964,7 +968,7 @@ class LayoutBuilder {
|
|
|
964
968
|
let rowTopPageY = this.cell._leftEndingCell._startingRowSpanY + this.cell._leftEndingCell._rowTopPageYPadding;
|
|
965
969
|
return this.cell._leftEndingCell._rowTopPageY - rowTopPageY + this.cell._leftEndingCell._bottomY;
|
|
966
970
|
} else {
|
|
967
|
-
if (this.cell.
|
|
971
|
+
if (this.cell._lastPageNumber !== this.cell._leftEndingCell._lastPageNumber) {
|
|
968
972
|
return this.bottomY - this.cell._leftEndingCell._bottomY;
|
|
969
973
|
}
|
|
970
974
|
return this.viewHeight + this.cell._leftEndingCell._bottomY - this.bottomY;
|
|
@@ -1038,7 +1042,11 @@ class LayoutBuilder {
|
|
|
1038
1042
|
// or fall back to a minimum of padding + line height + border
|
|
1039
1043
|
let minRowHeight = lastRowHeight > 0 ? lastRowHeight : processor.rowPaddingTop + 14 + processor.rowPaddingBottom + processor.bottomLineWidth + processor.topLineWidth;
|
|
1040
1044
|
if (this.writer.context().availableHeight < minRowHeight) {
|
|
1041
|
-
|
|
1045
|
+
// Column selection needs the container origin, before table alignment.
|
|
1046
|
+
if (processor.alignmentOffset) {
|
|
1047
|
+
this.writer.context().addMargin(-processor.alignmentOffset, processor.alignmentOffset);
|
|
1048
|
+
}
|
|
1049
|
+
this.snakingAwarePageBreak(undefined, processor);
|
|
1042
1050
|
|
|
1043
1051
|
// Skip border when headerRows present (header repeat includes it)
|
|
1044
1052
|
if (processor.layout.hLineWhenBroken !== false && !processor.headerRows) {
|
package/js/OutputDocument.js
CHANGED
|
@@ -7,16 +7,27 @@ class OutputDocument {
|
|
|
7
7
|
* @param {Promise<object>} pdfDocumentPromise
|
|
8
8
|
*/
|
|
9
9
|
constructor(pdfDocumentPromise) {
|
|
10
|
-
this.bufferSize = 1073741824;
|
|
11
10
|
this.pdfDocumentPromise = pdfDocumentPromise;
|
|
12
11
|
this.bufferPromise = null;
|
|
12
|
+
this.streamEnded = false;
|
|
13
|
+
this.streamEndListenerAttached = false;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
/**
|
|
16
17
|
* @returns {Promise<object>}
|
|
17
18
|
*/
|
|
18
|
-
getStream() {
|
|
19
|
-
|
|
19
|
+
async getStream() {
|
|
20
|
+
const stream = await this.pdfDocumentPromise;
|
|
21
|
+
if (this.streamEnded) {
|
|
22
|
+
throw new Error('PDF stream has already been consumed.');
|
|
23
|
+
}
|
|
24
|
+
if (!this.streamEndListenerAttached) {
|
|
25
|
+
stream.once('end', () => {
|
|
26
|
+
this.streamEnded = true;
|
|
27
|
+
});
|
|
28
|
+
this.streamEndListenerAttached = true;
|
|
29
|
+
}
|
|
30
|
+
return stream;
|
|
20
31
|
}
|
|
21
32
|
|
|
22
33
|
/**
|
|
@@ -25,17 +36,15 @@ class OutputDocument {
|
|
|
25
36
|
getBuffer() {
|
|
26
37
|
const getBufferInternal = async () => {
|
|
27
38
|
const stream = await this.getStream();
|
|
28
|
-
return new Promise(resolve => {
|
|
39
|
+
return new Promise((resolve, reject) => {
|
|
29
40
|
let chunks = [];
|
|
30
|
-
stream.on('
|
|
31
|
-
|
|
32
|
-
while ((chunk = stream.read(this.bufferSize)) !== null) {
|
|
33
|
-
chunks.push(chunk);
|
|
34
|
-
}
|
|
41
|
+
stream.on('data', chunk => {
|
|
42
|
+
chunks.push(chunk);
|
|
35
43
|
});
|
|
36
44
|
stream.on('end', () => {
|
|
37
45
|
resolve(Buffer.concat(chunks));
|
|
38
46
|
});
|
|
47
|
+
stream.on('error', reject);
|
|
39
48
|
stream.end();
|
|
40
49
|
});
|
|
41
50
|
};
|
|
@@ -11,6 +11,11 @@ class OutputDocumentServer extends _OutputDocument.default {
|
|
|
11
11
|
* @returns {Promise}
|
|
12
12
|
*/
|
|
13
13
|
async write(filename) {
|
|
14
|
+
await this.pdfDocumentPromise;
|
|
15
|
+
if (this.bufferPromise !== null) {
|
|
16
|
+
await _fs.default.promises.writeFile(filename, await this.getBuffer());
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
14
19
|
const stream = await this.getStream();
|
|
15
20
|
const writeStream = _fs.default.createWriteStream(filename);
|
|
16
21
|
const streamEnded = new Promise((resolve, reject) => {
|
package/js/PDFDocument.js
CHANGED
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
var _pdfkit =
|
|
5
|
+
var _pdfkit = require("pdfkit");
|
|
6
6
|
var _variableType = require("./helpers/variableType");
|
|
7
|
-
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
7
|
const typeName = (bold, italics) => {
|
|
9
8
|
let type = 'normal';
|
|
10
9
|
if (bold && italics) {
|
|
@@ -16,7 +15,7 @@ const typeName = (bold, italics) => {
|
|
|
16
15
|
}
|
|
17
16
|
return type;
|
|
18
17
|
};
|
|
19
|
-
class PDFDocument extends _pdfkit.
|
|
18
|
+
class PDFDocument extends _pdfkit.PDFDocument {
|
|
20
19
|
constructor(fonts = {}, images = {}, patterns = {}, attachments = {}, options = {}, virtualfs = null, localAccessPolicy = undefined) {
|
|
21
20
|
super(options);
|
|
22
21
|
this.fonts = {};
|
|
@@ -130,12 +129,12 @@ class PDFDocument extends _pdfkit.default {
|
|
|
130
129
|
}
|
|
131
130
|
return obj;
|
|
132
131
|
};
|
|
133
|
-
|
|
134
|
-
return checkRequired(src);
|
|
135
|
-
}
|
|
136
|
-
let attachment = checkRequired(this.attachments[src]);
|
|
132
|
+
let attachment = checkRequired(typeof src === 'object' ? src : this.attachments[src]);
|
|
137
133
|
if (this.virtualfs && this.virtualfs.existsSync(attachment.src)) {
|
|
138
|
-
return
|
|
134
|
+
return {
|
|
135
|
+
...attachment,
|
|
136
|
+
src: this.virtualfs.readFileSync(attachment.src)
|
|
137
|
+
};
|
|
139
138
|
}
|
|
140
139
|
this.validateLocalFile(attachment.src);
|
|
141
140
|
return attachment;
|
package/js/PageElementWriter.js
CHANGED
|
@@ -153,9 +153,13 @@ class PageElementWriter extends _ElementWriter.default {
|
|
|
153
153
|
/**
|
|
154
154
|
* Move to the next column in a column group (snaking columns).
|
|
155
155
|
* Handles repeatables and emits columnChanged event.
|
|
156
|
+
* @param {Function} [updateContext] - Adjust the new column before inserting repeatables
|
|
156
157
|
*/
|
|
157
|
-
moveToNextColumn() {
|
|
158
|
+
moveToNextColumn(updateContext) {
|
|
158
159
|
let nextColumn = this.context().moveToNextColumn();
|
|
160
|
+
if (updateContext) {
|
|
161
|
+
updateContext(this.context());
|
|
162
|
+
}
|
|
159
163
|
|
|
160
164
|
// Handle repeatables (like table headers) for the new column
|
|
161
165
|
this.repeatables.forEach(function (rep) {
|
package/js/Renderer.js
CHANGED
|
@@ -348,6 +348,11 @@ class Renderer {
|
|
|
348
348
|
}
|
|
349
349
|
return fontFile;
|
|
350
350
|
};
|
|
351
|
+
options.imageCallback = link => {
|
|
352
|
+
let src = link.replace(/\s+/g, '');
|
|
353
|
+
this.pdfDocument.validateLocalFile(src);
|
|
354
|
+
return src;
|
|
355
|
+
};
|
|
351
356
|
(0, _svgToPdfkit.default)(this.pdfDocument, svg.svg, svg.x, svg.y, options);
|
|
352
357
|
if (svg.link) {
|
|
353
358
|
this.pdfDocument.link(svg.x, svg.y, svg._width, svg._height, svg.link);
|
package/js/TableProcessor.js
CHANGED
|
@@ -102,6 +102,7 @@ class TableProcessor {
|
|
|
102
102
|
availableWidth = writer.context().availableWidth - this.offsets.total;
|
|
103
103
|
_columnCalculator.default.buildColumnWidths(tableNode.table.widths, availableWidth, this.offsets.total, tableNode);
|
|
104
104
|
this.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();
|
|
105
|
+
this.alignTable(writer.context());
|
|
105
106
|
this.rowSpanData = prepareRowSpanData();
|
|
106
107
|
this.cleanUpRepeatables = false;
|
|
107
108
|
|
|
@@ -134,6 +135,15 @@ class TableProcessor {
|
|
|
134
135
|
// update the border properties of all cells before drawing any lines
|
|
135
136
|
prepareCellBorders(this.tableNode.table.body);
|
|
136
137
|
}
|
|
138
|
+
alignTable(context) {
|
|
139
|
+
const freeWidth = Math.max(0, context.availableWidth - this.tableWidth);
|
|
140
|
+
this.alignmentOffset = this.tableNode.tableAlignment === 'center' ? freeWidth / 2 : this.tableNode.tableAlignment === 'right' ? freeWidth : 0;
|
|
141
|
+
if (this.alignmentOffset) {
|
|
142
|
+
// Keep the container width intact: column widths have already been resolved.
|
|
143
|
+
// Row snapshots preserve this origin across page breaks.
|
|
144
|
+
context.addMargin(this.alignmentOffset, -this.alignmentOffset);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
137
147
|
onRowBreak(rowIndex, writer) {
|
|
138
148
|
return () => {
|
|
139
149
|
let offset = this.rowPaddingTop + (!this.headerRows ? this.topLineWidth : 0);
|
|
@@ -340,6 +350,9 @@ class TableProcessor {
|
|
|
340
350
|
if (this.cleanUpRepeatables) {
|
|
341
351
|
writer.popFromRepeatables();
|
|
342
352
|
}
|
|
353
|
+
if (this.alignmentOffset) {
|
|
354
|
+
writer.context().addMargin(-this.alignmentOffset, this.alignmentOffset);
|
|
355
|
+
}
|
|
343
356
|
}
|
|
344
357
|
endRow(rowIndex, writer, pageBreaks) {
|
|
345
358
|
const getLineXs = () => {
|
package/js/TextDecorator.js
CHANGED
|
@@ -21,7 +21,7 @@ const groupDecorations = (line, pdfDocument) => {
|
|
|
21
21
|
let thickness = (0, _variableType.isNumber)(inline.decorationThickness) ? inline.decorationThickness : null;
|
|
22
22
|
for (let ii = 0, ll = decoration.length; ii < ll; ii++) {
|
|
23
23
|
let decorationItem = decoration[ii];
|
|
24
|
-
if (!currentGroup || decorationItem !== currentGroup.decoration || style !== currentGroup.decorationStyle || color !== currentGroup.decorationColor) {
|
|
24
|
+
if (!currentGroup || decorationItem !== currentGroup.decoration || style !== currentGroup.decorationStyle || color !== currentGroup.decorationColor || thickness !== currentGroup.decorationThickness) {
|
|
25
25
|
currentGroup = {
|
|
26
26
|
line: line,
|
|
27
27
|
decoration: decorationItem,
|
|
@@ -69,7 +69,7 @@ class TextDecorator {
|
|
|
69
69
|
let max = 0;
|
|
70
70
|
for (let i = 0, l = group.inlines.length; i < l; i++) {
|
|
71
71
|
let inline = group.inlines[i];
|
|
72
|
-
max = inline.fontSize > max ? i : max;
|
|
72
|
+
max = inline.fontSize > group.inlines[max].fontSize ? i : max;
|
|
73
73
|
}
|
|
74
74
|
return group.inlines[max];
|
|
75
75
|
};
|
|
@@ -135,7 +135,7 @@ class TextDecorator {
|
|
|
135
135
|
sv = 1;
|
|
136
136
|
let nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;
|
|
137
137
|
let rwx = x + firstInline.x - 1;
|
|
138
|
-
this.pdfDocument.rect(x + firstInline.x, y - sv, totalWidth,
|
|
138
|
+
this.pdfDocument.rect(x + firstInline.x, y - sv, totalWidth, 2 * sv).clip();
|
|
139
139
|
this.pdfDocument.lineWidth(lw / 3);
|
|
140
140
|
this.pdfDocument.moveTo(rwx, y);
|
|
141
141
|
for (let i = 0; i < nbWaves; i++) {
|
|
@@ -6,6 +6,7 @@ var _base = _interopRequireDefault(require("../base"));
|
|
|
6
6
|
var _OutputDocumentBrowser = _interopRequireDefault(require("./OutputDocumentBrowser"));
|
|
7
7
|
var _fs = _interopRequireDefault(require("fs"));
|
|
8
8
|
var _configurator = _interopRequireDefault(require("core-js/configurator"));
|
|
9
|
+
var _pdfkit = require("pdfkit");
|
|
9
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
11
|
// core-js: Polyfills will be used only if natives completely unavailable.
|
|
11
12
|
(0, _configurator.default)({
|
|
@@ -25,7 +26,12 @@ class pdfmake extends _base.default {
|
|
|
25
26
|
this.fonts = defaultClientFonts;
|
|
26
27
|
}
|
|
27
28
|
addFontContainer(fontContainer) {
|
|
28
|
-
|
|
29
|
+
if (fontContainer.standardFonts) {
|
|
30
|
+
(0, _pdfkit.registerStdFonts)(...fontContainer.standardFonts);
|
|
31
|
+
}
|
|
32
|
+
if (fontContainer.vfs) {
|
|
33
|
+
this.addVirtualFileSystem(fontContainer.vfs);
|
|
34
|
+
}
|
|
29
35
|
this.addFonts(fontContainer.fonts);
|
|
30
36
|
}
|
|
31
37
|
addVirtualFileSystem(vfs) {
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var fs = require('fs');
|
|
4
3
|
var fontContainer = {
|
|
5
|
-
|
|
6
|
-
'data/Courier.afm': {
|
|
7
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier.afm', 'utf8'),
|
|
8
|
-
encoding: 'utf8'
|
|
9
|
-
},
|
|
10
|
-
'data/Courier-Bold.afm': {
|
|
11
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier-Bold.afm', 'utf8'),
|
|
12
|
-
encoding: 'utf8'
|
|
13
|
-
},
|
|
14
|
-
'data/Courier-Oblique.afm': {
|
|
15
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier-Oblique.afm', 'utf8'),
|
|
16
|
-
encoding: 'utf8'
|
|
17
|
-
},
|
|
18
|
-
'data/Courier-BoldOblique.afm': {
|
|
19
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier-BoldOblique.afm', 'utf8'),
|
|
20
|
-
encoding: 'utf8'
|
|
21
|
-
}
|
|
22
|
-
},
|
|
4
|
+
standardFonts: [require('pdfkit/standard-fonts/Courier'), require('pdfkit/standard-fonts/CourierBold'), require('pdfkit/standard-fonts/CourierOblique'), require('pdfkit/standard-fonts/CourierBoldOblique')],
|
|
23
5
|
fonts: {
|
|
24
6
|
Courier: {
|
|
25
7
|
normal: 'Courier',
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var fs = require('fs');
|
|
4
3
|
var fontContainer = {
|
|
5
|
-
|
|
6
|
-
'data/Helvetica.afm': {
|
|
7
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica.afm', 'utf8'),
|
|
8
|
-
encoding: 'utf8'
|
|
9
|
-
},
|
|
10
|
-
'data/Helvetica-Bold.afm': {
|
|
11
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica-Bold.afm', 'utf8'),
|
|
12
|
-
encoding: 'utf8'
|
|
13
|
-
},
|
|
14
|
-
'data/Helvetica-Oblique.afm': {
|
|
15
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica-Oblique.afm', 'utf8'),
|
|
16
|
-
encoding: 'utf8'
|
|
17
|
-
},
|
|
18
|
-
'data/Helvetica-BoldOblique.afm': {
|
|
19
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica-BoldOblique.afm', 'utf8'),
|
|
20
|
-
encoding: 'utf8'
|
|
21
|
-
}
|
|
22
|
-
},
|
|
4
|
+
standardFonts: [require('pdfkit/standard-fonts/Helvetica'), require('pdfkit/standard-fonts/HelveticaBold'), require('pdfkit/standard-fonts/HelveticaOblique'), require('pdfkit/standard-fonts/HelveticaBoldOblique')],
|
|
23
5
|
fonts: {
|
|
24
6
|
Helvetica: {
|
|
25
7
|
normal: 'Helvetica',
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var fs = require('fs');
|
|
4
3
|
var fontContainer = {
|
|
5
|
-
|
|
6
|
-
'data/Symbol.afm': {
|
|
7
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Symbol.afm', 'utf8'),
|
|
8
|
-
encoding: 'utf8'
|
|
9
|
-
}
|
|
10
|
-
},
|
|
4
|
+
standardFonts: [require('pdfkit/standard-fonts/Symbol')],
|
|
11
5
|
fonts: {
|
|
12
6
|
Symbol: {
|
|
13
7
|
normal: 'Symbol'
|
|
@@ -1,25 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var fs = require('fs');
|
|
4
3
|
var fontContainer = {
|
|
5
|
-
|
|
6
|
-
'data/Times-Roman.afm': {
|
|
7
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-Roman.afm', 'utf8'),
|
|
8
|
-
encoding: 'utf8'
|
|
9
|
-
},
|
|
10
|
-
'data/Times-Bold.afm': {
|
|
11
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-Bold.afm', 'utf8'),
|
|
12
|
-
encoding: 'utf8'
|
|
13
|
-
},
|
|
14
|
-
'data/Times-Italic.afm': {
|
|
15
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-Italic.afm', 'utf8'),
|
|
16
|
-
encoding: 'utf8'
|
|
17
|
-
},
|
|
18
|
-
'data/Times-BoldItalic.afm': {
|
|
19
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-BoldItalic.afm', 'utf8'),
|
|
20
|
-
encoding: 'utf8'
|
|
21
|
-
}
|
|
22
|
-
},
|
|
4
|
+
standardFonts: [require('pdfkit/standard-fonts/TimesRoman'), require('pdfkit/standard-fonts/TimesBold'), require('pdfkit/standard-fonts/TimesItalic'), require('pdfkit/standard-fonts/TimesBoldItalic')],
|
|
23
5
|
fonts: {
|
|
24
6
|
Times: {
|
|
25
7
|
normal: 'Times-Roman',
|
|
@@ -1,13 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var fs = require('fs');
|
|
4
3
|
var fontContainer = {
|
|
5
|
-
|
|
6
|
-
'data/ZapfDingbats.afm': {
|
|
7
|
-
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/ZapfDingbats.afm', 'utf8'),
|
|
8
|
-
encoding: 'utf8'
|
|
9
|
-
}
|
|
10
|
-
},
|
|
4
|
+
standardFonts: [require('pdfkit/standard-fonts/ZapfDingbats')],
|
|
11
5
|
fonts: {
|
|
12
6
|
ZapfDingbats: {
|
|
13
7
|
normal: 'ZapfDingbats'
|
package/js/columnCalculator.js
CHANGED
|
@@ -12,7 +12,7 @@ function buildColumnWidths(columns, availableWidth, offsetTotal = 0, tableNode)
|
|
|
12
12
|
let starMaxMax = 0;
|
|
13
13
|
let fixedColumns = [];
|
|
14
14
|
let initial_availableWidth = availableWidth;
|
|
15
|
-
columns.forEach(column => {
|
|
15
|
+
columns.forEach((column, colIndex) => {
|
|
16
16
|
if (isAutoColumn(column)) {
|
|
17
17
|
autoColumns.push(column);
|
|
18
18
|
autoMin += column._minWidth;
|
|
@@ -22,10 +22,16 @@ function buildColumnWidths(columns, availableWidth, offsetTotal = 0, tableNode)
|
|
|
22
22
|
starMaxMin = Math.max(starMaxMin, column._minWidth);
|
|
23
23
|
starMaxMax = Math.max(starMaxMax, column._maxWidth);
|
|
24
24
|
} else {
|
|
25
|
-
fixedColumns.push(
|
|
25
|
+
fixedColumns.push({
|
|
26
|
+
column,
|
|
27
|
+
colIndex
|
|
28
|
+
});
|
|
26
29
|
}
|
|
27
30
|
});
|
|
28
|
-
fixedColumns.forEach((
|
|
31
|
+
fixedColumns.forEach(({
|
|
32
|
+
column: col,
|
|
33
|
+
colIndex
|
|
34
|
+
}) => {
|
|
29
35
|
// width specified as %
|
|
30
36
|
if ((0, _variableType.isString)(col.width) && /\d+%/.test(col.width)) {
|
|
31
37
|
// In tables we have to take into consideration the reserved width for paddings and borders
|
|
@@ -38,7 +44,7 @@ function buildColumnWidths(columns, availableWidth, offsetTotal = 0, tableNode)
|
|
|
38
44
|
if (colIndex === 0) {
|
|
39
45
|
// first column assumes whole borderLeft and half of border right
|
|
40
46
|
reservedWidth = paddingLeft + paddingRight + borderLeft + borderRight / 2;
|
|
41
|
-
} else if (colIndex ===
|
|
47
|
+
} else if (colIndex === columns.length - 1) {
|
|
42
48
|
// last column assumes whole borderRight and half of border left
|
|
43
49
|
reservedWidth = paddingLeft + paddingRight + borderLeft / 2 + borderRight;
|
|
44
50
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdfmake",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.13",
|
|
4
4
|
"description": "Client/server side PDF printing in pure JavaScript",
|
|
5
5
|
"main": "js/index.js",
|
|
6
6
|
"esnext": "src/index.js",
|
|
@@ -10,19 +10,16 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"linebreak": "^1.1.0",
|
|
13
|
-
"pdfkit": "^0.
|
|
13
|
+
"pdfkit": "^0.20.2",
|
|
14
14
|
"xmldoc": "^2.0.3"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@babel/cli": "^7.29.7",
|
|
18
18
|
"@babel/core": "^7.29.7",
|
|
19
|
-
"@babel/plugin-transform-modules-commonjs": "^7.29.7",
|
|
20
19
|
"@babel/preset-env": "^7.29.7",
|
|
21
20
|
"@eslint/js": "^10.0.1",
|
|
22
|
-
"assert": "^2.1.0",
|
|
23
21
|
"babel-loader": "^10.1.1",
|
|
24
22
|
"brfs": "^2.0.2",
|
|
25
|
-
"browserify-zlib": "^0.2.0",
|
|
26
23
|
"buffer": "^6.0.3",
|
|
27
24
|
"core-js": "^3.49.0",
|
|
28
25
|
"eslint": "^10.4.1",
|
|
@@ -37,12 +34,9 @@
|
|
|
37
34
|
"shx": "^0.4.0",
|
|
38
35
|
"sinon": "^22.0.0",
|
|
39
36
|
"source-map-loader": "^5.0.0",
|
|
40
|
-
"stream-browserify": "^3.0.0",
|
|
41
37
|
"string-replace-webpack-plugin": "^0.1.3",
|
|
42
38
|
"svg-to-pdfkit": "github:alafr/SVG-to-PDFKit#b091ebd4e7b7d2310eb1003511cd5de480f7e0e1",
|
|
43
39
|
"terser-webpack-plugin": "^5.6.1",
|
|
44
|
-
"transform-loader": "^0.2.4",
|
|
45
|
-
"util": "^0.12.5",
|
|
46
40
|
"webpack": "^5.107.2",
|
|
47
41
|
"webpack-cli": "^7.0.3"
|
|
48
42
|
},
|
|
@@ -58,7 +52,7 @@
|
|
|
58
52
|
"build:browser": "webpack",
|
|
59
53
|
"build:vfs": "node build-vfs.js \"./fonts/Roboto\"",
|
|
60
54
|
"build:examples": "node build-examples.js",
|
|
61
|
-
"build:standard-fonts": "
|
|
55
|
+
"build:standard-fonts": "node build-standard-fonts.js",
|
|
62
56
|
"build:fonts": "shx mkdir -p build/fonts && shx mkdir -p build/fonts/Roboto && shx cp -r fonts/Roboto/*.* build/fonts/Roboto && brfs \"./src/browser-extensions/fonts/Roboto.js\" > build/fonts/Roboto.js",
|
|
63
57
|
"lint": "eslint \"./src/**/*.js\" \"./tests/**/*.js\" \"./examples/**/*.js\" \"./standard-fonts/**/*.js\" \"./fonts/**/*.js\"",
|
|
64
58
|
"mocha": "mocha --reporter spec \"./tests/**/*.spec.js\"",
|
package/src/DocumentContext.js
CHANGED
|
@@ -493,7 +493,7 @@ class DocumentContext extends EventEmitter {
|
|
|
493
493
|
this.availableWidth = pageSize.width - pageMargin.left - pageMargin.right;
|
|
494
494
|
}
|
|
495
495
|
|
|
496
|
-
let page = { items: [], pageSize: pageSize, pageMargins: this.pageMargins, customProperties: customProperties };
|
|
496
|
+
let page = { items: [], pageSize: { ...pageSize }, pageMargins: this.pageMargins, customProperties: customProperties };
|
|
497
497
|
this.pages.push(page);
|
|
498
498
|
this.backgroundLength.push(0);
|
|
499
499
|
this.page = this.pages.length - 1;
|
package/src/ElementWriter.js
CHANGED
|
@@ -331,6 +331,8 @@ class ElementWriter extends EventEmitter {
|
|
|
331
331
|
return false;
|
|
332
332
|
}
|
|
333
333
|
|
|
334
|
+
let unbreakableFillsInserted = 0;
|
|
335
|
+
|
|
334
336
|
block.items.forEach(item => {
|
|
335
337
|
switch (item.type) {
|
|
336
338
|
case 'line':
|
|
@@ -354,9 +356,11 @@ class ElementWriter extends EventEmitter {
|
|
|
354
356
|
offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);
|
|
355
357
|
if (v._isFillColorFromUnbreakable) {
|
|
356
358
|
// If the item is a fillColor from an unbreakable block
|
|
357
|
-
// We have to add it at the beginning of the items body array of the page
|
|
359
|
+
// We have to add it at the beginning of the items body array of the page,
|
|
360
|
+
// after the fills already inserted from this block so that they keep their draw order
|
|
358
361
|
delete v._isFillColorFromUnbreakable;
|
|
359
|
-
const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page];
|
|
362
|
+
const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page] + unbreakableFillsInserted;
|
|
363
|
+
unbreakableFillsInserted++;
|
|
360
364
|
page.items.splice(endOfBackgroundItemsIndex, 0, {
|
|
361
365
|
type: 'vector',
|
|
362
366
|
item: v
|
package/src/LayoutBuilder.js
CHANGED
|
@@ -566,8 +566,9 @@ class LayoutBuilder {
|
|
|
566
566
|
* When in snaking columns, first tries moving to next column.
|
|
567
567
|
* If no columns available, moves to next page and resets x to left margin.
|
|
568
568
|
* @param {string} pageOrientation - Optional page orientation for the new page
|
|
569
|
+
* @param {TableProcessor} [tableProcessor] - Reapply table alignment in the new column
|
|
569
570
|
*/
|
|
570
|
-
snakingAwarePageBreak(pageOrientation) {
|
|
571
|
+
snakingAwarePageBreak(pageOrientation, tableProcessor) {
|
|
571
572
|
let ctx = this.writer.context();
|
|
572
573
|
let snakingSnapshot = ctx.getSnakingSnapshot();
|
|
573
574
|
if (!snakingSnapshot) {
|
|
@@ -576,7 +577,7 @@ class LayoutBuilder {
|
|
|
576
577
|
|
|
577
578
|
// Try flowing to next column first
|
|
578
579
|
if (this.writer.canMoveToNextColumn()) {
|
|
579
|
-
this.writer.moveToNextColumn();
|
|
580
|
+
this.writer.moveToNextColumn(tableProcessor ? context => tableProcessor.alignTable(context) : undefined);
|
|
580
581
|
return;
|
|
581
582
|
}
|
|
582
583
|
|
|
@@ -590,6 +591,9 @@ class LayoutBuilder {
|
|
|
590
591
|
let savedLastColumnWidth = ctx.lastColumnWidth;
|
|
591
592
|
ctx.resetSnakingColumnsForNewPage();
|
|
592
593
|
ctx.lastColumnWidth = savedLastColumnWidth;
|
|
594
|
+
if (tableProcessor) {
|
|
595
|
+
tableProcessor.alignTable(ctx);
|
|
596
|
+
}
|
|
593
597
|
}
|
|
594
598
|
|
|
595
599
|
// vertical container
|
|
@@ -1072,7 +1076,7 @@ class LayoutBuilder {
|
|
|
1072
1076
|
let rowTopPageY = this.cell._leftEndingCell._startingRowSpanY + this.cell._leftEndingCell._rowTopPageYPadding;
|
|
1073
1077
|
return this.cell._leftEndingCell._rowTopPageY - rowTopPageY + this.cell._leftEndingCell._bottomY;
|
|
1074
1078
|
} else {
|
|
1075
|
-
if (this.cell.
|
|
1079
|
+
if (this.cell._lastPageNumber !== this.cell._leftEndingCell._lastPageNumber) {
|
|
1076
1080
|
return this.bottomY - this.cell._leftEndingCell._bottomY;
|
|
1077
1081
|
}
|
|
1078
1082
|
|
|
@@ -1165,7 +1169,11 @@ class LayoutBuilder {
|
|
|
1165
1169
|
processor.bottomLineWidth + processor.topLineWidth
|
|
1166
1170
|
);
|
|
1167
1171
|
if (this.writer.context().availableHeight < minRowHeight) {
|
|
1168
|
-
|
|
1172
|
+
// Column selection needs the container origin, before table alignment.
|
|
1173
|
+
if (processor.alignmentOffset) {
|
|
1174
|
+
this.writer.context().addMargin(-processor.alignmentOffset, processor.alignmentOffset);
|
|
1175
|
+
}
|
|
1176
|
+
this.snakingAwarePageBreak(undefined, processor);
|
|
1169
1177
|
|
|
1170
1178
|
// Skip border when headerRows present (header repeat includes it)
|
|
1171
1179
|
if (processor.layout.hLineWhenBroken !== false && !processor.headerRows) {
|