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.
Files changed (45) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/build/pdfmake.js +46900 -62599
  3. package/build/pdfmake.js.map +1 -1
  4. package/build/pdfmake.min.js +2 -2
  5. package/build/pdfmake.min.js.map +1 -1
  6. package/build/standard-fonts/Courier.js +1 -19
  7. package/build/standard-fonts/Helvetica.js +1 -19
  8. package/build/standard-fonts/Symbol.js +1 -13
  9. package/build/standard-fonts/Times.js +1 -19
  10. package/build/standard-fonts/ZapfDingbats.js +1 -13
  11. package/js/DocumentContext.js +3 -1
  12. package/js/ElementWriter.js +5 -2
  13. package/js/LayoutBuilder.js +12 -4
  14. package/js/OutputDocument.js +18 -9
  15. package/js/OutputDocumentServer.js +5 -0
  16. package/js/PDFDocument.js +7 -8
  17. package/js/PageElementWriter.js +5 -1
  18. package/js/Renderer.js +5 -0
  19. package/js/TableProcessor.js +13 -0
  20. package/js/TextDecorator.js +3 -3
  21. package/js/browser-extensions/index.js +7 -1
  22. package/js/browser-extensions/standard-fonts/Courier.js +1 -19
  23. package/js/browser-extensions/standard-fonts/Helvetica.js +1 -19
  24. package/js/browser-extensions/standard-fonts/Symbol.js +1 -7
  25. package/js/browser-extensions/standard-fonts/Times.js +1 -19
  26. package/js/browser-extensions/standard-fonts/ZapfDingbats.js +1 -7
  27. package/js/columnCalculator.js +10 -4
  28. package/package.json +3 -9
  29. package/src/DocumentContext.js +1 -1
  30. package/src/ElementWriter.js +6 -2
  31. package/src/LayoutBuilder.js +12 -4
  32. package/src/OutputDocument.js +20 -9
  33. package/src/OutputDocumentServer.js +6 -0
  34. package/src/PDFDocument.js +7 -8
  35. package/src/PageElementWriter.js +5 -1
  36. package/src/Renderer.js +6 -0
  37. package/src/TableProcessor.js +15 -0
  38. package/src/TextDecorator.js +4 -3
  39. package/src/browser-extensions/index.js +7 -1
  40. package/src/browser-extensions/standard-fonts/Courier.js +6 -8
  41. package/src/browser-extensions/standard-fonts/Helvetica.js +6 -8
  42. package/src/browser-extensions/standard-fonts/Symbol.js +1 -5
  43. package/src/browser-extensions/standard-fonts/Times.js +6 -8
  44. package/src/browser-extensions/standard-fonts/ZapfDingbats.js +1 -5
  45. 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
  }
@@ -458,7 +458,9 @@ class DocumentContext extends _events.EventEmitter {
458
458
  }
459
459
  let page = {
460
460
  items: [],
461
- pageSize: pageSize,
461
+ pageSize: {
462
+ ...pageSize
463
+ },
462
464
  pageMargins: this.pageMargins,
463
465
  customProperties: customProperties
464
466
  };
@@ -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
@@ -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.positions[0].pageNumber !== this.cell._leftEndingCell._lastPageNumber) {
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
- this.snakingAwarePageBreak();
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) {
@@ -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
- return this.pdfDocumentPromise;
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('readable', () => {
31
- let chunk;
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 = _interopRequireDefault(require("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.default {
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
- if (typeof src === 'object') {
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 this.virtualfs.readFileSync(attachment.src);
134
+ return {
135
+ ...attachment,
136
+ src: this.virtualfs.readFileSync(attachment.src)
137
+ };
139
138
  }
140
139
  this.validateLocalFile(attachment.src);
141
140
  return attachment;
@@ -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);
@@ -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 = () => {
@@ -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, y + sv).clip();
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
- this.addVirtualFileSystem(fontContainer.vfs);
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
- vfs: {
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
- vfs: {
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
- vfs: {
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
- vfs: {
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
- vfs: {
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'
@@ -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(column);
25
+ fixedColumns.push({
26
+ column,
27
+ colIndex
28
+ });
26
29
  }
27
30
  });
28
- fixedColumns.forEach((col, colIndex) => {
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 === fixedColumns.length - 1) {
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.11",
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.19.1",
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": "shx mkdir -p build/standard-fonts && brfs \"./src/browser-extensions/standard-fonts/Courier.js\" > build/standard-fonts/Courier.js && brfs \"./src/browser-extensions/standard-fonts/Helvetica.js\" > build/standard-fonts/Helvetica.js && brfs \"./src/browser-extensions/standard-fonts/Times.js\" > build/standard-fonts/Times.js && brfs \"./src/browser-extensions/standard-fonts/Symbol.js\" > build/standard-fonts/Symbol.js && brfs \"./src/browser-extensions/standard-fonts/ZapfDingbats.js\" > build/standard-fonts/ZapfDingbats.js",
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\"",
@@ -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;
@@ -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
@@ -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.positions[0].pageNumber !== this.cell._leftEndingCell._lastPageNumber) {
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
- this.snakingAwarePageBreak();
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) {