pdfmake 0.2.12 → 0.2.14

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/build/pdfmake.js CHANGED
@@ -1,4 +1,4 @@
1
- /*! pdfmake v0.2.12, @license MIT, @link http://pdfmake.org */
1
+ /*! pdfmake v0.2.14, @license MIT, @link http://pdfmake.org */
2
2
  (function webpackUniversalModuleDefinition(root, factory) {
3
3
  if(typeof exports === 'object' && typeof module === 'object')
4
4
  module.exports = factory();
@@ -15135,7 +15135,921 @@ if ( true && module && typeof module.exports !== 'undefined') {
15135
15135
 
15136
15136
  /***/ }),
15137
15137
 
15138
- /***/ 82759:
15138
+ /***/ 8191:
15139
+ /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
15140
+
15141
+ "use strict";
15142
+
15143
+
15144
+ __webpack_require__(49063);
15145
+ __webpack_require__(11765);
15146
+ __webpack_require__(81755);
15147
+ __webpack_require__(80055);
15148
+ __webpack_require__(20731);
15149
+ __webpack_require__(37309);
15150
+ __webpack_require__(14032);
15151
+ __webpack_require__(76014);
15152
+ __webpack_require__(58281);
15153
+ __webpack_require__(28356);
15154
+ __webpack_require__(42437);
15155
+ __webpack_require__(94712);
15156
+ var TraversalTracker = __webpack_require__(2318);
15157
+ var DocPreprocessor = __webpack_require__(98883);
15158
+ var DocMeasure = __webpack_require__(42526);
15159
+ var DocumentContext = __webpack_require__(79178);
15160
+ var PageElementWriter = __webpack_require__(11220);
15161
+ var ColumnCalculator = __webpack_require__(77530);
15162
+ var TableProcessor = __webpack_require__(89836);
15163
+ var Line = __webpack_require__(70770);
15164
+ var isString = (__webpack_require__(91867).isString);
15165
+ var isArray = (__webpack_require__(91867).isArray);
15166
+ var isUndefined = (__webpack_require__(91867).isUndefined);
15167
+ var isNull = (__webpack_require__(91867).isNull);
15168
+ var pack = (__webpack_require__(91867).pack);
15169
+ var offsetVector = (__webpack_require__(91867).offsetVector);
15170
+ var fontStringify = (__webpack_require__(91867).fontStringify);
15171
+ var getNodeId = (__webpack_require__(91867).getNodeId);
15172
+ var isFunction = (__webpack_require__(91867).isFunction);
15173
+ var TextTools = __webpack_require__(11548);
15174
+ var StyleContextStack = __webpack_require__(76442);
15175
+ var isNumber = (__webpack_require__(91867).isNumber);
15176
+ function addAll(target, otherArray) {
15177
+ otherArray.forEach(function (item) {
15178
+ target.push(item);
15179
+ });
15180
+ }
15181
+
15182
+ /**
15183
+ * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object
15184
+ * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF
15185
+ *
15186
+ * @param {Object} pageSize - an object defining page width and height
15187
+ * @param {Object} pageMargins - an object defining top, left, right and bottom margins
15188
+ */
15189
+ function LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {
15190
+ this.pageSize = pageSize;
15191
+ this.pageMargins = pageMargins;
15192
+ this.tracker = new TraversalTracker();
15193
+ this.imageMeasure = imageMeasure;
15194
+ this.svgMeasure = svgMeasure;
15195
+ this.tableLayouts = {};
15196
+ this.nestedLevel = 0;
15197
+ }
15198
+ LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {
15199
+ this.tableLayouts = pack(this.tableLayouts, tableLayouts);
15200
+ };
15201
+
15202
+ /**
15203
+ * Executes layout engine on document-definition-object and creates an array of pages
15204
+ * containing positioned Blocks, Lines and inlines
15205
+ *
15206
+ * @param {Object} docStructure document-definition-object
15207
+ * @param {Object} fontProvider font provider
15208
+ * @param {Object} styleDictionary dictionary with style definitions
15209
+ * @param {Object} defaultStyle default style definition
15210
+ * @return {Array} an array of pages
15211
+ */
15212
+ LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
15213
+ function addPageBreaksIfNecessary(linearNodeList, pages) {
15214
+ if (!isFunction(pageBreakBeforeFct)) {
15215
+ return false;
15216
+ }
15217
+ linearNodeList = linearNodeList.filter(function (node) {
15218
+ return node.positions.length > 0;
15219
+ });
15220
+ linearNodeList.forEach(function (node) {
15221
+ var nodeInfo = {};
15222
+ ['id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns', 'headlineLevel', 'style', 'pageBreak', 'pageOrientation', 'width', 'height'].forEach(function (key) {
15223
+ if (node[key] !== undefined) {
15224
+ nodeInfo[key] = node[key];
15225
+ }
15226
+ });
15227
+ nodeInfo.startPosition = node.positions[0];
15228
+ nodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) {
15229
+ return node.pageNumber;
15230
+ })));
15231
+ nodeInfo.pages = pages.length;
15232
+ nodeInfo.stack = isArray(node.stack);
15233
+ node.nodeInfo = nodeInfo;
15234
+ });
15235
+ for (var index = 0; index < linearNodeList.length; index++) {
15236
+ var node = linearNodeList[index];
15237
+ if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {
15238
+ node.pageBreakCalculated = true;
15239
+ var pageNumber = node.nodeInfo.pageNumbers[0];
15240
+ var followingNodesOnPage = [];
15241
+ var nodesOnNextPage = [];
15242
+ var previousNodesOnPage = [];
15243
+ if (pageBreakBeforeFct.length > 1) {
15244
+ for (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {
15245
+ if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
15246
+ followingNodesOnPage.push(linearNodeList[ii].nodeInfo);
15247
+ }
15248
+ if (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {
15249
+ nodesOnNextPage.push(linearNodeList[ii].nodeInfo);
15250
+ }
15251
+ }
15252
+ }
15253
+ if (pageBreakBeforeFct.length > 3) {
15254
+ for (var ii = 0; ii < index; ii++) {
15255
+ if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
15256
+ previousNodesOnPage.push(linearNodeList[ii].nodeInfo);
15257
+ }
15258
+ }
15259
+ }
15260
+ if (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {
15261
+ node.pageBreak = 'before';
15262
+ return true;
15263
+ }
15264
+ }
15265
+ }
15266
+ return false;
15267
+ }
15268
+ this.docPreprocessor = new DocPreprocessor();
15269
+ this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);
15270
+ function resetXYs(result) {
15271
+ result.linearNodeList.forEach(function (node) {
15272
+ node.resetXY();
15273
+ });
15274
+ }
15275
+ var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
15276
+ while (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {
15277
+ resetXYs(result);
15278
+ result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
15279
+ }
15280
+ return result.pages;
15281
+ };
15282
+ LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
15283
+ this.linearNodeList = [];
15284
+ docStructure = this.docPreprocessor.preprocessDocument(docStructure);
15285
+ docStructure = this.docMeasure.measureDocument(docStructure);
15286
+ this.writer = new PageElementWriter(new DocumentContext(this.pageSize, this.pageMargins), this.tracker);
15287
+ var _this = this;
15288
+ this.writer.context().tracker.startTracking('pageAdded', function () {
15289
+ _this.addBackground(background);
15290
+ });
15291
+ this.addBackground(background);
15292
+ this.processNode(docStructure);
15293
+ this.addHeadersAndFooters(header, footer);
15294
+ if (watermark != null) {
15295
+ this.addWatermark(watermark, fontProvider, defaultStyle);
15296
+ }
15297
+ return {
15298
+ pages: this.writer.context().pages,
15299
+ linearNodeList: this.linearNodeList
15300
+ };
15301
+ };
15302
+ LayoutBuilder.prototype.addBackground = function (background) {
15303
+ var backgroundGetter = isFunction(background) ? background : function () {
15304
+ return background;
15305
+ };
15306
+ var context = this.writer.context();
15307
+ var pageSize = context.getCurrentPage().pageSize;
15308
+ var pageBackground = backgroundGetter(context.page + 1, pageSize);
15309
+ if (pageBackground) {
15310
+ this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);
15311
+ pageBackground = this.docPreprocessor.preprocessDocument(pageBackground);
15312
+ this.processNode(this.docMeasure.measureDocument(pageBackground));
15313
+ this.writer.commitUnbreakableBlock(0, 0);
15314
+ context.backgroundLength[context.page] += pageBackground.positions.length;
15315
+ }
15316
+ };
15317
+ LayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {
15318
+ this.addDynamicRepeatable(function () {
15319
+ return JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object
15320
+ }, sizeFunction);
15321
+ };
15322
+ LayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {
15323
+ var pages = this.writer.context().pages;
15324
+ for (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {
15325
+ this.writer.context().page = pageIndex;
15326
+ var node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);
15327
+ if (node) {
15328
+ var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);
15329
+ this.writer.beginUnbreakableBlock(sizes.width, sizes.height);
15330
+ node = this.docPreprocessor.preprocessDocument(node);
15331
+ this.processNode(this.docMeasure.measureDocument(node));
15332
+ this.writer.commitUnbreakableBlock(sizes.x, sizes.y);
15333
+ }
15334
+ }
15335
+ };
15336
+ LayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {
15337
+ var headerSizeFct = function headerSizeFct(pageSize, pageMargins) {
15338
+ return {
15339
+ x: 0,
15340
+ y: 0,
15341
+ width: pageSize.width,
15342
+ height: pageMargins.top
15343
+ };
15344
+ };
15345
+ var footerSizeFct = function footerSizeFct(pageSize, pageMargins) {
15346
+ return {
15347
+ x: 0,
15348
+ y: pageSize.height - pageMargins.bottom,
15349
+ width: pageSize.width,
15350
+ height: pageMargins.bottom
15351
+ };
15352
+ };
15353
+ if (isFunction(header)) {
15354
+ this.addDynamicRepeatable(header, headerSizeFct);
15355
+ } else if (header) {
15356
+ this.addStaticRepeatable(header, headerSizeFct);
15357
+ }
15358
+ if (isFunction(footer)) {
15359
+ this.addDynamicRepeatable(footer, footerSizeFct);
15360
+ } else if (footer) {
15361
+ this.addStaticRepeatable(footer, footerSizeFct);
15362
+ }
15363
+ };
15364
+ LayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {
15365
+ if (isString(watermark)) {
15366
+ watermark = {
15367
+ 'text': watermark
15368
+ };
15369
+ }
15370
+ if (!watermark.text) {
15371
+ // empty watermark text
15372
+ return;
15373
+ }
15374
+ watermark.font = watermark.font || defaultStyle.font || 'Roboto';
15375
+ watermark.fontSize = watermark.fontSize || 'auto';
15376
+ watermark.color = watermark.color || 'black';
15377
+ watermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;
15378
+ watermark.bold = watermark.bold || false;
15379
+ watermark.italics = watermark.italics || false;
15380
+ watermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;
15381
+ if (watermark.angle === null) {
15382
+ watermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;
15383
+ }
15384
+ if (watermark.fontSize === 'auto') {
15385
+ watermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);
15386
+ }
15387
+ var watermarkObject = {
15388
+ text: watermark.text,
15389
+ font: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),
15390
+ fontSize: watermark.fontSize,
15391
+ color: watermark.color,
15392
+ opacity: watermark.opacity,
15393
+ angle: watermark.angle
15394
+ };
15395
+ watermarkObject._size = getWatermarkSize(watermark, fontProvider);
15396
+ var pages = this.writer.context().pages;
15397
+ for (var i = 0, l = pages.length; i < l; i++) {
15398
+ pages[i].watermark = watermarkObject;
15399
+ }
15400
+ function getWatermarkSize(watermark, fontProvider) {
15401
+ var textTools = new TextTools(fontProvider);
15402
+ var styleContextStack = new StyleContextStack(null, {
15403
+ font: watermark.font,
15404
+ bold: watermark.bold,
15405
+ italics: watermark.italics
15406
+ });
15407
+ styleContextStack.push({
15408
+ fontSize: watermark.fontSize
15409
+ });
15410
+ var size = textTools.sizeOfString(watermark.text, styleContextStack);
15411
+ var rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);
15412
+ return {
15413
+ size: size,
15414
+ rotatedSize: rotatedSize
15415
+ };
15416
+ }
15417
+ function getWatermarkFontSize(pageSize, watermark, fontProvider) {
15418
+ var textTools = new TextTools(fontProvider);
15419
+ var styleContextStack = new StyleContextStack(null, {
15420
+ font: watermark.font,
15421
+ bold: watermark.bold,
15422
+ italics: watermark.italics
15423
+ });
15424
+ var rotatedSize;
15425
+
15426
+ /**
15427
+ * Binary search the best font size.
15428
+ * Initial bounds [0, 1000]
15429
+ * Break when range < 1
15430
+ */
15431
+ var a = 0;
15432
+ var b = 1000;
15433
+ var c = (a + b) / 2;
15434
+ while (Math.abs(a - b) > 1) {
15435
+ styleContextStack.push({
15436
+ fontSize: c
15437
+ });
15438
+ rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);
15439
+ if (rotatedSize.width > pageSize.width) {
15440
+ b = c;
15441
+ c = (a + b) / 2;
15442
+ } else if (rotatedSize.width < pageSize.width) {
15443
+ if (rotatedSize.height > pageSize.height) {
15444
+ b = c;
15445
+ c = (a + b) / 2;
15446
+ } else {
15447
+ a = c;
15448
+ c = (a + b) / 2;
15449
+ }
15450
+ }
15451
+ styleContextStack.pop();
15452
+ }
15453
+ /*
15454
+ End binary search
15455
+ */
15456
+ return c;
15457
+ }
15458
+ };
15459
+ function decorateNode(node) {
15460
+ var x = node.x,
15461
+ y = node.y;
15462
+ node.positions = [];
15463
+ if (isArray(node.canvas)) {
15464
+ node.canvas.forEach(function (vector) {
15465
+ var x = vector.x,
15466
+ y = vector.y,
15467
+ x1 = vector.x1,
15468
+ y1 = vector.y1,
15469
+ x2 = vector.x2,
15470
+ y2 = vector.y2;
15471
+ vector.resetXY = function () {
15472
+ vector.x = x;
15473
+ vector.y = y;
15474
+ vector.x1 = x1;
15475
+ vector.y1 = y1;
15476
+ vector.x2 = x2;
15477
+ vector.y2 = y2;
15478
+ };
15479
+ });
15480
+ }
15481
+ node.resetXY = function () {
15482
+ node.x = x;
15483
+ node.y = y;
15484
+ if (isArray(node.canvas)) {
15485
+ node.canvas.forEach(function (vector) {
15486
+ vector.resetXY();
15487
+ });
15488
+ }
15489
+ };
15490
+ }
15491
+ LayoutBuilder.prototype.processNode = function (node) {
15492
+ var self = this;
15493
+ this.linearNodeList.push(node);
15494
+ decorateNode(node);
15495
+ applyMargins(function () {
15496
+ var unbreakable = node.unbreakable;
15497
+ if (unbreakable) {
15498
+ self.writer.beginUnbreakableBlock();
15499
+ }
15500
+ var absPosition = node.absolutePosition;
15501
+ if (absPosition) {
15502
+ self.writer.context().beginDetachedBlock();
15503
+ self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);
15504
+ }
15505
+ var relPosition = node.relativePosition;
15506
+ if (relPosition) {
15507
+ self.writer.context().beginDetachedBlock();
15508
+ self.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);
15509
+ }
15510
+ if (node.stack) {
15511
+ self.processVerticalContainer(node);
15512
+ } else if (node.columns) {
15513
+ self.processColumns(node);
15514
+ } else if (node.ul) {
15515
+ self.processList(false, node);
15516
+ } else if (node.ol) {
15517
+ self.processList(true, node);
15518
+ } else if (node.table) {
15519
+ self.processTable(node);
15520
+ } else if (node.text !== undefined) {
15521
+ self.processLeaf(node);
15522
+ } else if (node.toc) {
15523
+ self.processToc(node);
15524
+ } else if (node.image) {
15525
+ self.processImage(node);
15526
+ } else if (node.svg) {
15527
+ self.processSVG(node);
15528
+ } else if (node.canvas) {
15529
+ self.processCanvas(node);
15530
+ } else if (node.qr) {
15531
+ self.processQr(node);
15532
+ } else if (!node._span) {
15533
+ throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
15534
+ }
15535
+ if (absPosition || relPosition) {
15536
+ self.writer.context().endDetachedBlock();
15537
+ }
15538
+ if (unbreakable) {
15539
+ self.writer.commitUnbreakableBlock();
15540
+ }
15541
+ });
15542
+ function applyMargins(callback) {
15543
+ var margin = node._margin;
15544
+ if (node.pageBreak === 'before') {
15545
+ self.writer.moveToNextPage(node.pageOrientation);
15546
+ } else if (node.pageBreak === 'beforeOdd') {
15547
+ self.writer.moveToNextPage(node.pageOrientation);
15548
+ if ((self.writer.context().page + 1) % 2 === 1) {
15549
+ self.writer.moveToNextPage(node.pageOrientation);
15550
+ }
15551
+ } else if (node.pageBreak === 'beforeEven') {
15552
+ self.writer.moveToNextPage(node.pageOrientation);
15553
+ if ((self.writer.context().page + 1) % 2 === 0) {
15554
+ self.writer.moveToNextPage(node.pageOrientation);
15555
+ }
15556
+ }
15557
+ var isDetachedBlock = node.relativePosition || node.absolutePosition;
15558
+
15559
+ // Detached nodes have no margins, their position is only determined by 'x' and 'y'
15560
+ if (margin && !isDetachedBlock) {
15561
+ var availableHeight = self.writer.context().availableHeight;
15562
+ // If top margin is bigger than available space, move to next page
15563
+ // Necessary for nodes inside tables
15564
+ if (availableHeight - margin[1] < 0) {
15565
+ // Consume the whole available space
15566
+ self.writer.context().moveDown(availableHeight);
15567
+ self.writer.moveToNextPage(node.pageOrientation);
15568
+ /**
15569
+ * TODO - Something to consider:
15570
+ * Right now the node starts at the top of next page (after header)
15571
+ * Another option would be to apply just the top margin that has not been consumed in the page before
15572
+ * It would something like: this.write.context().moveDown(margin[1] - availableHeight)
15573
+ */
15574
+ } else {
15575
+ self.writer.context().moveDown(margin[1]);
15576
+ }
15577
+
15578
+ // Apply lateral margins
15579
+ self.writer.context().addMargin(margin[0], margin[2]);
15580
+ }
15581
+ callback();
15582
+
15583
+ // Detached nodes have no margins, their position is only determined by 'x' and 'y'
15584
+ if (margin && !isDetachedBlock) {
15585
+ var _availableHeight = self.writer.context().availableHeight;
15586
+ // If bottom margin is bigger than available space, move to next page
15587
+ // Necessary for nodes inside tables
15588
+ if (_availableHeight - margin[3] < 0) {
15589
+ self.writer.context().moveDown(_availableHeight);
15590
+ self.writer.moveToNextPage(node.pageOrientation);
15591
+ /**
15592
+ * TODO - Something to consider:
15593
+ * Right now next node starts at the top of next page (after header)
15594
+ * Another option would be to apply the bottom margin that has not been consumed in the next page?
15595
+ * It would something like: this.write.context().moveDown(margin[3] - availableHeight)
15596
+ */
15597
+ } else {
15598
+ self.writer.context().moveDown(margin[3]);
15599
+ }
15600
+
15601
+ // Apply lateral margins
15602
+ self.writer.context().addMargin(-margin[0], -margin[2]);
15603
+ }
15604
+ if (node.pageBreak === 'after') {
15605
+ self.writer.moveToNextPage(node.pageOrientation);
15606
+ } else if (node.pageBreak === 'afterOdd') {
15607
+ self.writer.moveToNextPage(node.pageOrientation);
15608
+ if ((self.writer.context().page + 1) % 2 === 1) {
15609
+ self.writer.moveToNextPage(node.pageOrientation);
15610
+ }
15611
+ } else if (node.pageBreak === 'afterEven') {
15612
+ self.writer.moveToNextPage(node.pageOrientation);
15613
+ if ((self.writer.context().page + 1) % 2 === 0) {
15614
+ self.writer.moveToNextPage(node.pageOrientation);
15615
+ }
15616
+ }
15617
+ }
15618
+ };
15619
+
15620
+ // vertical container
15621
+ LayoutBuilder.prototype.processVerticalContainer = function (node) {
15622
+ var self = this;
15623
+ node.stack.forEach(function (item) {
15624
+ self.processNode(item);
15625
+ addAll(node.positions, item.positions);
15626
+
15627
+ //TODO: paragraph gap
15628
+ });
15629
+ };
15630
+
15631
+ // columns
15632
+ LayoutBuilder.prototype.processColumns = function (columnNode) {
15633
+ this.nestedLevel++;
15634
+ var columns = columnNode.columns;
15635
+ var availableWidth = this.writer.context().availableWidth;
15636
+ var gaps = gapArray(columnNode._gap);
15637
+ if (gaps) {
15638
+ availableWidth -= (gaps.length - 1) * columnNode._gap;
15639
+ }
15640
+ ColumnCalculator.buildColumnWidths(columns, availableWidth);
15641
+ var result = this.processRow({
15642
+ marginX: columnNode._margin ? [columnNode._margin[0], columnNode._margin[2]] : [0, 0],
15643
+ cells: columns,
15644
+ widths: columns,
15645
+ gaps: gaps
15646
+ });
15647
+ addAll(columnNode.positions, result.positions);
15648
+ this.nestedLevel--;
15649
+ if (this.nestedLevel === 0) {
15650
+ this.writer.context().resetMarginXTopParent();
15651
+ }
15652
+ function gapArray(gap) {
15653
+ if (!gap) {
15654
+ return null;
15655
+ }
15656
+ var gaps = [];
15657
+ gaps.push(0);
15658
+ for (var i = columns.length - 1; i > 0; i--) {
15659
+ gaps.push(gap);
15660
+ }
15661
+ return gaps;
15662
+ }
15663
+ };
15664
+ LayoutBuilder.prototype.findStartingSpanCell = function (arr, i) {
15665
+ var requiredColspan = 1;
15666
+ for (var index = i - 1; index >= 0; index--) {
15667
+ if (!arr[index]._span) {
15668
+ if (arr[index].rowSpan > 1 && (arr[index].colSpan || 1) === requiredColspan) {
15669
+ return arr[index];
15670
+ } else {
15671
+ return null;
15672
+ }
15673
+ }
15674
+ requiredColspan++;
15675
+ }
15676
+ return null;
15677
+ };
15678
+ LayoutBuilder.prototype.processRow = function (_ref) {
15679
+ var _ref$marginX = _ref.marginX,
15680
+ marginX = _ref$marginX === void 0 ? [0, 0] : _ref$marginX,
15681
+ _ref$dontBreakRows = _ref.dontBreakRows,
15682
+ dontBreakRows = _ref$dontBreakRows === void 0 ? false : _ref$dontBreakRows,
15683
+ _ref$rowsWithoutPageB = _ref.rowsWithoutPageBreak,
15684
+ rowsWithoutPageBreak = _ref$rowsWithoutPageB === void 0 ? 0 : _ref$rowsWithoutPageB,
15685
+ cells = _ref.cells,
15686
+ widths = _ref.widths,
15687
+ gaps = _ref.gaps,
15688
+ tableBody = _ref.tableBody,
15689
+ rowIndex = _ref.rowIndex,
15690
+ height = _ref.height;
15691
+ var self = this;
15692
+ var isUnbreakableRow = dontBreakRows || rowIndex <= rowsWithoutPageBreak - 1;
15693
+ var pageBreaks = [];
15694
+ var positions = [];
15695
+ var willBreakByHeight = false;
15696
+ this.tracker.auto('pageChanged', storePageBreakData, function () {
15697
+ // Check if row should break by height
15698
+ if (!isUnbreakableRow && height > self.writer.context().availableHeight) {
15699
+ willBreakByHeight = true;
15700
+ }
15701
+ widths = widths || cells;
15702
+ // Use the marginX if we are in a top level table/column (not nested)
15703
+ var marginXParent = self.nestedLevel === 1 ? marginX : null;
15704
+ self.writer.context().beginColumnGroup(marginXParent);
15705
+ for (var i = 0, l = cells.length; i < l; i++) {
15706
+ var column = cells[i];
15707
+ var width = widths[i]._calcWidth;
15708
+ var leftOffset = colLeftOffset(i);
15709
+ if (column.colSpan && column.colSpan > 1) {
15710
+ for (var j = 1; j < column.colSpan; j++) {
15711
+ width += widths[++i]._calcWidth + gaps[i];
15712
+ }
15713
+ }
15714
+
15715
+ // if rowspan starts in this cell, we retrieve the last cell affected by the rowspan
15716
+ var endingCell = getEndingCell(column, i);
15717
+ if (endingCell) {
15718
+ // We store a reference of the ending cell in the first cell of the rowspan
15719
+ column._endingCell = endingCell;
15720
+ column._endingCell._startingRowSpanY = column._startingRowSpanY;
15721
+ }
15722
+
15723
+ // Check if exists and retrieve the cell that started the rowspan in case we are in the cell just after
15724
+ var startingSpanCell = self.findStartingSpanCell(cells, i);
15725
+ var endingSpanCell = null;
15726
+ if (startingSpanCell && startingSpanCell._endingCell) {
15727
+ // Reference to the last cell of the rowspan
15728
+ endingSpanCell = startingSpanCell._endingCell;
15729
+ // Store if we are in an unbreakable block when we save the context and the originalX
15730
+ if (self.writer.transactionLevel > 0) {
15731
+ endingSpanCell._isUnbreakableContext = true;
15732
+ endingSpanCell._originalXOffset = self.writer.originalX;
15733
+ }
15734
+ }
15735
+
15736
+ // We pass the endingSpanCell reference to store the context just after processing rowspan cell
15737
+ self.writer.context().beginColumn(width, leftOffset, endingSpanCell);
15738
+ if (!column._span) {
15739
+ self.processNode(column);
15740
+ addAll(positions, column.positions);
15741
+ } else if (column._columnEndingContext) {
15742
+ var discountY = 0;
15743
+ if (dontBreakRows) {
15744
+ // Calculate how many points we have to discount to Y when dontBreakRows and rowSpan are combined
15745
+ var ctxBeforeRowSpanLastRow = self.writer.writer.contextStack[self.writer.writer.contextStack.length - 1];
15746
+ discountY = ctxBeforeRowSpanLastRow.y - column._startingRowSpanY;
15747
+ }
15748
+ var originalXOffset = 0;
15749
+ // If context was saved from an unbreakable block and we are not in an unbreakable block anymore
15750
+ // We have to sum the originalX (X before starting unbreakable block) to X
15751
+ if (column._isUnbreakableContext && !self.writer.transactionLevel) {
15752
+ originalXOffset = column._originalXOffset;
15753
+ }
15754
+ // row-span ending
15755
+ // Recover the context after processing the rowspanned cell
15756
+ self.writer.context().markEnding(column, originalXOffset, discountY);
15757
+ }
15758
+ }
15759
+
15760
+ // Check if last cell is part of a span
15761
+ var endingSpanCell = null;
15762
+ var lastColumn = cells.length > 0 ? cells[cells.length - 1] : null;
15763
+ if (lastColumn) {
15764
+ // Previous column cell has a rowspan
15765
+ if (lastColumn._endingCell) {
15766
+ endingSpanCell = lastColumn._endingCell;
15767
+ // Previous column cell is part of a span
15768
+ } else if (lastColumn._span === true) {
15769
+ // We get the cell that started the span where we set a reference to the ending cell
15770
+ var startingSpanCell = self.findStartingSpanCell(cells, cells.length);
15771
+ if (startingSpanCell) {
15772
+ // Context will be stored here (ending cell)
15773
+ endingSpanCell = startingSpanCell._endingCell;
15774
+ // Store if we are in an unbreakable block when we save the context and the originalX
15775
+ if (self.writer.transactionLevel > 0) {
15776
+ endingSpanCell._isUnbreakableContext = true;
15777
+ endingSpanCell._originalXOffset = self.writer.originalX;
15778
+ }
15779
+ }
15780
+ }
15781
+ }
15782
+
15783
+ // If there are page breaks in this row, update data with prevY of last cell
15784
+ updatePageBreakData(self.writer.context().page, self.writer.context().y);
15785
+
15786
+ // If content did not break page, check if we should break by height
15787
+ if (!isUnbreakableRow && pageBreaks.length === 0 && willBreakByHeight) {
15788
+ self.writer.context().moveDown(self.writer.context().availableHeight);
15789
+ self.writer.moveToNextPage();
15790
+ }
15791
+ self.writer.context().completeColumnGroup(height, endingSpanCell);
15792
+ });
15793
+ return {
15794
+ pageBreaks: pageBreaks,
15795
+ positions: positions
15796
+ };
15797
+ function updatePageBreakData(page, prevY) {
15798
+ var pageDesc;
15799
+ // Find page break data for this row and page
15800
+ for (var i = 0, l = pageBreaks.length; i < l; i++) {
15801
+ var desc = pageBreaks[i];
15802
+ if (desc.prevPage === page) {
15803
+ pageDesc = desc;
15804
+ break;
15805
+ }
15806
+ }
15807
+ // If row has page break in this page, update prevY
15808
+ if (pageDesc) {
15809
+ pageDesc.prevY = Math.max(pageDesc.prevY, prevY);
15810
+ }
15811
+ }
15812
+ function storePageBreakData(data) {
15813
+ var pageDesc;
15814
+ for (var i = 0, l = pageBreaks.length; i < l; i++) {
15815
+ var desc = pageBreaks[i];
15816
+ if (desc.prevPage === data.prevPage) {
15817
+ pageDesc = desc;
15818
+ break;
15819
+ }
15820
+ }
15821
+ if (!pageDesc) {
15822
+ pageDesc = data;
15823
+ pageBreaks.push(pageDesc);
15824
+ }
15825
+ pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);
15826
+ pageDesc.y = Math.min(pageDesc.y, data.y);
15827
+ }
15828
+ function colLeftOffset(i) {
15829
+ if (gaps && gaps.length > i) {
15830
+ return gaps[i];
15831
+ }
15832
+ return 0;
15833
+ }
15834
+ function getEndingCell(column, columnIndex) {
15835
+ if (column.rowSpan && column.rowSpan > 1) {
15836
+ var endingRow = rowIndex + column.rowSpan - 1;
15837
+ if (endingRow >= tableBody.length) {
15838
+ throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';
15839
+ }
15840
+ return tableBody[endingRow][columnIndex];
15841
+ }
15842
+ return null;
15843
+ }
15844
+ };
15845
+
15846
+ // lists
15847
+ LayoutBuilder.prototype.processList = function (orderedList, node) {
15848
+ var self = this,
15849
+ items = orderedList ? node.ol : node.ul,
15850
+ gapSize = node._gapSize;
15851
+ this.writer.context().addMargin(gapSize.width);
15852
+ var nextMarker;
15853
+ this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {
15854
+ items.forEach(function (item) {
15855
+ nextMarker = item.listMarker;
15856
+ self.processNode(item);
15857
+ addAll(node.positions, item.positions);
15858
+ });
15859
+ });
15860
+ this.writer.context().addMargin(-gapSize.width);
15861
+ function addMarkerToFirstLeaf(line) {
15862
+ // I'm not very happy with the way list processing is implemented
15863
+ // (both code and algorithm should be rethinked)
15864
+ if (nextMarker) {
15865
+ var marker = nextMarker;
15866
+ nextMarker = null;
15867
+ if (marker.canvas) {
15868
+ var vector = marker.canvas[0];
15869
+ offsetVector(vector, -marker._minWidth, 0);
15870
+ self.writer.addVector(vector);
15871
+ } else if (marker._inlines) {
15872
+ var markerLine = new Line(self.pageSize.width);
15873
+ markerLine.addInline(marker._inlines[0]);
15874
+ markerLine.x = -marker._minWidth;
15875
+ markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();
15876
+ self.writer.addLine(markerLine, true);
15877
+ }
15878
+ }
15879
+ }
15880
+ };
15881
+
15882
+ // tables
15883
+ LayoutBuilder.prototype.processTable = function (tableNode) {
15884
+ var _this2 = this;
15885
+ this.nestedLevel++;
15886
+ var processor = new TableProcessor(tableNode);
15887
+ processor.beginTable(this.writer);
15888
+ var rowHeights = tableNode.table.heights;
15889
+ for (var i = 0, l = tableNode.table.body.length; i < l; i++) {
15890
+ // if dontBreakRows and row starts a rowspan
15891
+ // we store the 'y' of the beginning of each rowSpan
15892
+ if (processor.dontBreakRows) {
15893
+ tableNode.table.body[i].forEach(function (cell) {
15894
+ if (cell.rowSpan && cell.rowSpan > 1) {
15895
+ cell._startingRowSpanY = _this2.writer.context().y;
15896
+ }
15897
+ });
15898
+ }
15899
+ processor.beginRow(i, this.writer);
15900
+ var height;
15901
+ if (isFunction(rowHeights)) {
15902
+ height = rowHeights(i);
15903
+ } else if (isArray(rowHeights)) {
15904
+ height = rowHeights[i];
15905
+ } else {
15906
+ height = rowHeights;
15907
+ }
15908
+ if (height === 'auto') {
15909
+ height = undefined;
15910
+ }
15911
+ var result = this.processRow({
15912
+ marginX: tableNode._margin ? [tableNode._margin[0], tableNode._margin[2]] : [0, 0],
15913
+ dontBreakRows: processor.dontBreakRows,
15914
+ rowsWithoutPageBreak: processor.rowsWithoutPageBreak,
15915
+ cells: tableNode.table.body[i],
15916
+ widths: tableNode.table.widths,
15917
+ gaps: tableNode._offsets.offsets,
15918
+ tableBody: tableNode.table.body,
15919
+ rowIndex: i,
15920
+ height: height
15921
+ });
15922
+ addAll(tableNode.positions, result.positions);
15923
+ processor.endRow(i, this.writer, result.pageBreaks);
15924
+ }
15925
+ processor.endTable(this.writer);
15926
+ this.nestedLevel--;
15927
+ if (this.nestedLevel === 0) {
15928
+ this.writer.context().resetMarginXTopParent();
15929
+ }
15930
+ };
15931
+
15932
+ // leafs (texts)
15933
+ LayoutBuilder.prototype.processLeaf = function (node) {
15934
+ var line = this.buildNextLine(node);
15935
+ if (line && (node.tocItem || node.id)) {
15936
+ line._node = node;
15937
+ }
15938
+ var currentHeight = line ? line.getHeight() : 0;
15939
+ var maxHeight = node.maxHeight || -1;
15940
+ if (line) {
15941
+ var nodeId = getNodeId(node);
15942
+ if (nodeId) {
15943
+ line.id = nodeId;
15944
+ }
15945
+ }
15946
+ if (node._tocItemRef) {
15947
+ line._pageNodeRef = node._tocItemRef;
15948
+ }
15949
+ if (node._pageRef) {
15950
+ line._pageNodeRef = node._pageRef._nodeRef;
15951
+ }
15952
+ if (line && line.inlines && isArray(line.inlines)) {
15953
+ for (var i = 0, l = line.inlines.length; i < l; i++) {
15954
+ if (line.inlines[i]._tocItemRef) {
15955
+ line.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;
15956
+ }
15957
+ if (line.inlines[i]._pageRef) {
15958
+ line.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;
15959
+ }
15960
+ }
15961
+ }
15962
+ while (line && (maxHeight === -1 || currentHeight < maxHeight)) {
15963
+ var positions = this.writer.addLine(line);
15964
+ node.positions.push(positions);
15965
+ line = this.buildNextLine(node);
15966
+ if (line) {
15967
+ currentHeight += line.getHeight();
15968
+ }
15969
+ }
15970
+ };
15971
+ LayoutBuilder.prototype.processToc = function (node) {
15972
+ if (node.toc.title) {
15973
+ this.processNode(node.toc.title);
15974
+ }
15975
+ if (node.toc._table) {
15976
+ this.processNode(node.toc._table);
15977
+ }
15978
+ };
15979
+ LayoutBuilder.prototype.buildNextLine = function (textNode) {
15980
+ function cloneInline(inline) {
15981
+ var newInline = inline.constructor();
15982
+ for (var key in inline) {
15983
+ newInline[key] = inline[key];
15984
+ }
15985
+ return newInline;
15986
+ }
15987
+ if (!textNode._inlines || textNode._inlines.length === 0) {
15988
+ return null;
15989
+ }
15990
+ var line = new Line(this.writer.context().availableWidth);
15991
+ var textTools = new TextTools(null);
15992
+ var isForceContinue = false;
15993
+ while (textNode._inlines && textNode._inlines.length > 0 && (line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {
15994
+ var isHardWrap = false;
15995
+ var inline = textNode._inlines.shift();
15996
+ isForceContinue = false;
15997
+ if (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {
15998
+ var widthPerChar = inline.width / inline.text.length;
15999
+ var maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);
16000
+ if (maxChars < 1) {
16001
+ maxChars = 1;
16002
+ }
16003
+ if (maxChars < inline.text.length) {
16004
+ var newInline = cloneInline(inline);
16005
+ newInline.text = inline.text.substr(maxChars);
16006
+ inline.text = inline.text.substr(0, maxChars);
16007
+ newInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);
16008
+ inline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);
16009
+ textNode._inlines.unshift(newInline);
16010
+ isHardWrap = true;
16011
+ }
16012
+ }
16013
+ line.addInline(inline);
16014
+ isForceContinue = inline.noNewLine && !isHardWrap;
16015
+ }
16016
+ line.lastLineInParagraph = textNode._inlines.length === 0;
16017
+ return line;
16018
+ };
16019
+
16020
+ // images
16021
+ LayoutBuilder.prototype.processImage = function (node) {
16022
+ var position = this.writer.addImage(node);
16023
+ node.positions.push(position);
16024
+ };
16025
+ LayoutBuilder.prototype.processSVG = function (node) {
16026
+ var position = this.writer.addSVG(node);
16027
+ node.positions.push(position);
16028
+ };
16029
+ LayoutBuilder.prototype.processCanvas = function (node) {
16030
+ var height = node._minHeight;
16031
+ if (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {
16032
+ // TODO: support for canvas larger than a page
16033
+ // TODO: support for other overflow methods
16034
+
16035
+ this.writer.moveToNextPage();
16036
+ }
16037
+ this.writer.alignCanvas(node);
16038
+ node.canvas.forEach(function (vector) {
16039
+ var position = this.writer.addVector(vector);
16040
+ node.positions.push(position);
16041
+ }, this);
16042
+ this.writer.context().moveDown(height);
16043
+ };
16044
+ LayoutBuilder.prototype.processQr = function (node) {
16045
+ var position = this.writer.addQr(node);
16046
+ node.positions.push(position);
16047
+ };
16048
+ module.exports = LayoutBuilder;
16049
+
16050
+ /***/ }),
16051
+
16052
+ /***/ 21458:
15139
16053
  /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
15140
16054
 
15141
16055
  "use strict";
@@ -33595,6 +34509,26 @@ collection('Set', function (init) {
33595
34509
  }, collectionStrong);
33596
34510
 
33597
34511
 
34512
+ /***/ }),
34513
+
34514
+ /***/ 28356:
34515
+ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
34516
+
34517
+ "use strict";
34518
+
34519
+ var $ = __webpack_require__(56475);
34520
+ var createHTML = __webpack_require__(91159);
34521
+ var forcedStringHTMLMethod = __webpack_require__(7452);
34522
+
34523
+ // `String.prototype.bold` method
34524
+ // https://tc39.es/ecma262/#sec-string.prototype.bold
34525
+ $({ target: 'String', proto: true, forced: forcedStringHTMLMethod('bold') }, {
34526
+ bold: function bold() {
34527
+ return createHTML(this, 'b', '', '');
34528
+ }
34529
+ });
34530
+
34531
+
33598
34532
  /***/ }),
33599
34533
 
33600
34534
  /***/ 26663:
@@ -47323,8 +48257,8 @@ module.exports = function getPolyfill() {
47323
48257
  if (
47324
48258
  descriptor
47325
48259
  && typeof descriptor.get === 'function'
47326
- && typeof RegExp.prototype.dotAll === 'boolean'
47327
- && typeof RegExp.prototype.hasIndices === 'boolean'
48260
+ && 'dotAll' in RegExp.prototype
48261
+ && 'hasIndices' in RegExp.prototype
47328
48262
  ) {
47329
48263
  /* eslint getter-return: 0 */
47330
48264
  var calls = '';
@@ -47339,6 +48273,9 @@ module.exports = function getPolyfill() {
47339
48273
  calls += 'y';
47340
48274
  }
47341
48275
  });
48276
+
48277
+ descriptor.get.call(o);
48278
+
47342
48279
  if (calls === 'dy') {
47343
48280
  return descriptor.get;
47344
48281
  }
@@ -54401,7 +55338,7 @@ URLBrowserResolver.prototype.resolve = function (url, headers) {
54401
55338
  }
54402
55339
 
54403
55340
  return this.resolving[url];
54404
- }
55341
+ };
54405
55342
 
54406
55343
  URLBrowserResolver.prototype.resolved = function () {
54407
55344
  var _this = this;
@@ -54412,7 +55349,7 @@ URLBrowserResolver.prototype.resolved = function () {
54412
55349
  reject(result);
54413
55350
  });
54414
55351
  });
54415
- }
55352
+ };
54416
55353
 
54417
55354
  module.exports = URLBrowserResolver;
54418
55355
 
@@ -54429,7 +55366,7 @@ module.exports = URLBrowserResolver;
54429
55366
  var isFunction = (__webpack_require__(91867).isFunction);
54430
55367
  var isUndefined = (__webpack_require__(91867).isUndefined);
54431
55368
  var isNull = (__webpack_require__(91867).isNull);
54432
- var FileSaver = __webpack_require__(42616);
55369
+ var FileSaver = __webpack_require__(26835);
54433
55370
  var saveAs = FileSaver.saveAs;
54434
55371
 
54435
55372
  var defaultClientFonts = {
@@ -54451,13 +55388,13 @@ function Document(docDefinition, tableLayouts, fonts, vfs) {
54451
55388
  function canCreatePdf() {
54452
55389
  // Ensure the browser provides the level of support needed
54453
55390
  try {
54454
- var arr = new Uint8Array(1)
54455
- var proto = { foo: function () { return 42 } }
54456
- Object.setPrototypeOf(proto, Uint8Array.prototype)
54457
- Object.setPrototypeOf(arr, proto)
54458
- return arr.foo() === 42
55391
+ var arr = new Uint8Array(1);
55392
+ var proto = { foo: function () { return 42; } };
55393
+ Object.setPrototypeOf(proto, Uint8Array.prototype);
55394
+ Object.setPrototypeOf(arr, proto);
55395
+ return arr.foo() === 42;
54459
55396
  } catch (e) {
54460
- return false
55397
+ return false;
54461
55398
  }
54462
55399
  }
54463
55400
 
@@ -54774,7 +55711,7 @@ VirtualFileSystem.prototype.existsSync = function (filename) {
54774
55711
  filename = fixFilename(filename);
54775
55712
  return typeof this.fileSystem[filename] !== 'undefined'
54776
55713
  || typeof this.dataSystem[filename] !== 'undefined';
54777
- }
55714
+ };
54778
55715
 
54779
55716
  VirtualFileSystem.prototype.readFileSync = function (filename, options) {
54780
55717
  filename = fixFilename(filename);
@@ -56062,7 +56999,7 @@ DocPreprocessor.prototype._getNodeForNodeRef = function (node) {
56062
56999
  }
56063
57000
 
56064
57001
  return node;
56065
- }
57002
+ };
56066
57003
 
56067
57004
  module.exports = DocPreprocessor;
56068
57005
 
@@ -56101,7 +57038,7 @@ function DocumentContext(pageSize, pageMargins) {
56101
57038
  this.addPage(pageSize);
56102
57039
  }
56103
57040
 
56104
- DocumentContext.prototype.beginColumnGroup = function () {
57041
+ DocumentContext.prototype.beginColumnGroup = function (marginXTopParent) {
56105
57042
  this.snapshots.push({
56106
57043
  x: this.x,
56107
57044
  y: this.y,
@@ -56119,6 +57056,13 @@ DocumentContext.prototype.beginColumnGroup = function () {
56119
57056
  });
56120
57057
 
56121
57058
  this.lastColumnWidth = 0;
57059
+ if (marginXTopParent) {
57060
+ this.marginXTopParent = marginXTopParent;
57061
+ }
57062
+ };
57063
+
57064
+ DocumentContext.prototype.resetMarginXTopParent = function () {
57065
+ this.marginXTopParent = null;
56122
57066
  };
56123
57067
 
56124
57068
  DocumentContext.prototype.beginColumn = function (width, offset, endingCell) {
@@ -56143,10 +57087,10 @@ DocumentContext.prototype.calculateBottomMost = function (destContext, endingCel
56143
57087
  }
56144
57088
  };
56145
57089
 
56146
- DocumentContext.prototype.markEnding = function (endingCell) {
57090
+ DocumentContext.prototype.markEnding = function (endingCell, originalXOffset, discountY) {
56147
57091
  this.page = endingCell._columnEndingContext.page;
56148
- this.x = endingCell._columnEndingContext.x;
56149
- this.y = endingCell._columnEndingContext.y;
57092
+ this.x = endingCell._columnEndingContext.x + originalXOffset;
57093
+ this.y = endingCell._columnEndingContext.y - discountY;
56150
57094
  this.availableWidth = endingCell._columnEndingContext.availableWidth;
56151
57095
  this.availableHeight = endingCell._columnEndingContext.availableHeight;
56152
57096
  this.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;
@@ -56206,14 +57150,19 @@ DocumentContext.prototype.moveDown = function (offset) {
56206
57150
  DocumentContext.prototype.initializePage = function () {
56207
57151
  this.y = this.pageMargins.top;
56208
57152
  this.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;
56209
- this.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;
57153
+ const { pageCtx, isSnapshot } = this.pageSnapshot();
57154
+ pageCtx.availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;
57155
+ if (isSnapshot && this.marginXTopParent) {
57156
+ pageCtx.availableWidth -= this.marginXTopParent[0];
57157
+ pageCtx.availableWidth -= this.marginXTopParent[1];
57158
+ }
56210
57159
  };
56211
57160
 
56212
57161
  DocumentContext.prototype.pageSnapshot = function () {
56213
57162
  if (this.snapshots[0]) {
56214
- return this.snapshots[0];
57163
+ return { pageCtx: this.snapshots[0], isSnapshot: true };
56215
57164
  } else {
56216
- return this;
57165
+ return { pageCtx: this, isSnapshot: false };
56217
57166
  }
56218
57167
  };
56219
57168
 
@@ -56296,6 +57245,16 @@ DocumentContext.prototype.moveToNextPage = function (pageOrientation) {
56296
57245
  var prevPage = this.page;
56297
57246
  var prevY = this.y;
56298
57247
 
57248
+ // If we are in a column group
57249
+ if (this.snapshots.length > 0) {
57250
+ var lastSnapshot = this.snapshots[this.snapshots.length - 1];
57251
+ // We have to update prevY accordingly by also taking into consideration
57252
+ // the 'y' of cells that don't break page
57253
+ if (lastSnapshot.bottomMost && lastSnapshot.bottomMost.y) {
57254
+ prevY = Math.max(this.y, lastSnapshot.bottomMost.y);
57255
+ }
57256
+ }
57257
+
56299
57258
  var createNewPage = nextPageIndex >= this.pages.length;
56300
57259
  if (createNewPage) {
56301
57260
  var currentAvailableWidth = this.availableWidth;
@@ -56505,7 +57464,7 @@ ElementWriter.prototype.addImage = function (image, index, type) {
56505
57464
  };
56506
57465
 
56507
57466
  ElementWriter.prototype.addSVG = function (image, index) {
56508
- return this.addImage(image, index, 'svg')
57467
+ return this.addImage(image, index, 'svg');
56509
57468
  };
56510
57469
 
56511
57470
  ElementWriter.prototype.addQr = function (qr, index) {
@@ -56575,10 +57534,13 @@ ElementWriter.prototype.alignCanvas = function (node) {
56575
57534
  }
56576
57535
  };
56577
57536
 
56578
- ElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {
57537
+ ElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index, forcePage) {
56579
57538
  var context = this.context;
56580
- var page = context.getCurrentPage(),
56581
- position = this.getCurrentPositionOnPage();
57539
+ var page = context.getCurrentPage();
57540
+ if (isNumber(forcePage)) {
57541
+ page = context.pages[forcePage];
57542
+ }
57543
+ var position = this.getCurrentPositionOnPage();
56582
57544
 
56583
57545
  if (page) {
56584
57546
  offsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
@@ -56650,10 +57612,21 @@ ElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlock
56650
57612
  var v = pack(item.item);
56651
57613
 
56652
57614
  offsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);
56653
- page.items.push({
56654
- type: 'vector',
56655
- item: v
56656
- });
57615
+ if (v._isFillColorFromUnbreakable) {
57616
+ // If the item is a fillColor from an unbreakable block
57617
+ // We have to add it at the beginning of the items body array of the page
57618
+ delete v._isFillColorFromUnbreakable;
57619
+ const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page];
57620
+ page.items.splice(endOfBackgroundItemsIndex, 0, {
57621
+ type: 'vector',
57622
+ item: v
57623
+ });
57624
+ } else {
57625
+ page.items.push({
57626
+ type: 'vector',
57627
+ item: v
57628
+ });
57629
+ }
56657
57630
  break;
56658
57631
 
56659
57632
  case 'image':
@@ -56754,7 +57727,7 @@ function FontProvider(fontDescriptors, pdfKitDoc) {
56754
57727
 
56755
57728
  FontProvider.prototype.getFontType = function (bold, italics) {
56756
57729
  return typeName(bold, italics);
56757
- }
57730
+ };
56758
57731
 
56759
57732
  FontProvider.prototype.getFontFile = function (familyName, bold, italics) {
56760
57733
  var type = this.getFontType(bold, italics);
@@ -56763,7 +57736,7 @@ FontProvider.prototype.getFontFile = function (familyName, bold, italics) {
56763
57736
  }
56764
57737
 
56765
57738
  return this.fonts[familyName][type];
56766
- }
57739
+ };
56767
57740
 
56768
57741
  FontProvider.prototype.provideFont = function (familyName, bold, italics) {
56769
57742
  var type = this.getFontType(bold, italics);
@@ -56833,7 +57806,7 @@ function isUndefined(variable) {
56833
57806
  */
56834
57807
  function isPositiveInteger(variable) {
56835
57808
  if (!isNumber(variable) || !Number.isInteger(variable) || variable <= 0) {
56836
- return false;
57809
+ return false;
56837
57810
  }
56838
57811
  return true;
56839
57812
  }
@@ -56940,926 +57913,61 @@ module.exports = {
56940
57913
 
56941
57914
  "use strict";
56942
57915
  /* provided dependency */ var Buffer = __webpack_require__(50621)["Buffer"];
56943
-
56944
-
56945
- var fs = __webpack_require__(48181);
56946
-
56947
- function ImageMeasure(pdfKitDoc, imageDictionary) {
56948
- this.pdfKitDoc = pdfKitDoc;
56949
- this.imageDictionary = imageDictionary || {};
56950
- }
56951
-
56952
- ImageMeasure.prototype.measureImage = function (src) {
56953
- var image;
56954
- var that = this;
56955
-
56956
- if (!this.pdfKitDoc._imageRegistry[src]) {
56957
- try {
56958
- image = this.pdfKitDoc.openImage(realImageSrc(src));
56959
- if (!image) {
56960
- throw 'No image';
56961
- }
56962
- } catch (error) {
56963
- throw 'Invalid image: ' + error.toString() + '\nImages dictionary should contain dataURL entries (or local file paths in node.js)';
56964
- }
56965
- image.embed(this.pdfKitDoc);
56966
- this.pdfKitDoc._imageRegistry[src] = image;
56967
- } else {
56968
- image = this.pdfKitDoc._imageRegistry[src];
56969
- }
56970
-
56971
- return { width: image.width, height: image.height };
56972
-
56973
- function realImageSrc(src) {
56974
- var img = that.imageDictionary[src];
56975
-
56976
- if (!img) {
56977
- return src;
56978
- }
56979
-
56980
- if (typeof img === 'object') {
56981
- throw 'Not supported image definition: ' + JSON.stringify(img);
56982
- }
56983
-
56984
- if (fs.existsSync(img)) {
56985
- return fs.readFileSync(img);
56986
- }
56987
-
56988
- var index = img.indexOf('base64,');
56989
- if (index < 0) {
56990
- return that.imageDictionary[src];
56991
- }
56992
-
56993
- return Buffer.from(img.substring(index + 7), 'base64');
56994
- }
56995
- };
56996
-
56997
- module.exports = ImageMeasure;
56998
-
56999
-
57000
- /***/ }),
57001
-
57002
- /***/ 25235:
57003
- /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
57004
-
57005
- "use strict";
57006
-
57007
-
57008
- var TraversalTracker = __webpack_require__(2318);
57009
- var DocPreprocessor = __webpack_require__(98883);
57010
- var DocMeasure = __webpack_require__(42526);
57011
- var DocumentContext = __webpack_require__(79178);
57012
- var PageElementWriter = __webpack_require__(11220);
57013
- var ColumnCalculator = __webpack_require__(77530);
57014
- var TableProcessor = __webpack_require__(89836);
57015
- var Line = __webpack_require__(70770);
57016
- var isString = (__webpack_require__(91867).isString);
57017
- var isArray = (__webpack_require__(91867).isArray);
57018
- var isUndefined = (__webpack_require__(91867).isUndefined);
57019
- var isNull = (__webpack_require__(91867).isNull);
57020
- var pack = (__webpack_require__(91867).pack);
57021
- var offsetVector = (__webpack_require__(91867).offsetVector);
57022
- var fontStringify = (__webpack_require__(91867).fontStringify);
57023
- var getNodeId = (__webpack_require__(91867).getNodeId);
57024
- var isFunction = (__webpack_require__(91867).isFunction);
57025
- var TextTools = __webpack_require__(11548);
57026
- var StyleContextStack = __webpack_require__(76442);
57027
- var isNumber = (__webpack_require__(91867).isNumber);
57028
-
57029
- function addAll(target, otherArray) {
57030
- otherArray.forEach(function (item) {
57031
- target.push(item);
57032
- });
57033
- }
57034
-
57035
- /**
57036
- * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object
57037
- * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF
57038
- *
57039
- * @param {Object} pageSize - an object defining page width and height
57040
- * @param {Object} pageMargins - an object defining top, left, right and bottom margins
57041
- */
57042
- function LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {
57043
- this.pageSize = pageSize;
57044
- this.pageMargins = pageMargins;
57045
- this.tracker = new TraversalTracker();
57046
- this.imageMeasure = imageMeasure;
57047
- this.svgMeasure = svgMeasure;
57048
- this.tableLayouts = {};
57049
- }
57050
-
57051
- LayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {
57052
- this.tableLayouts = pack(this.tableLayouts, tableLayouts);
57053
- };
57054
-
57055
- /**
57056
- * Executes layout engine on document-definition-object and creates an array of pages
57057
- * containing positioned Blocks, Lines and inlines
57058
- *
57059
- * @param {Object} docStructure document-definition-object
57060
- * @param {Object} fontProvider font provider
57061
- * @param {Object} styleDictionary dictionary with style definitions
57062
- * @param {Object} defaultStyle default style definition
57063
- * @return {Array} an array of pages
57064
- */
57065
- LayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
57066
-
57067
- function addPageBreaksIfNecessary(linearNodeList, pages) {
57068
-
57069
- if (!isFunction(pageBreakBeforeFct)) {
57070
- return false;
57071
- }
57072
-
57073
- linearNodeList = linearNodeList.filter(function (node) {
57074
- return node.positions.length > 0;
57075
- });
57076
-
57077
- linearNodeList.forEach(function (node) {
57078
- var nodeInfo = {};
57079
- [
57080
- 'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns',
57081
- 'headlineLevel', 'style', 'pageBreak', 'pageOrientation',
57082
- 'width', 'height'
57083
- ].forEach(function (key) {
57084
- if (node[key] !== undefined) {
57085
- nodeInfo[key] = node[key];
57086
- }
57087
- });
57088
- nodeInfo.startPosition = node.positions[0];
57089
- nodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) { return node.pageNumber; })));
57090
- nodeInfo.pages = pages.length;
57091
- nodeInfo.stack = isArray(node.stack);
57092
-
57093
- node.nodeInfo = nodeInfo;
57094
- });
57095
-
57096
- for (var index = 0; index < linearNodeList.length; index++) {
57097
- var node = linearNodeList[index];
57098
- if (node.pageBreak !== 'before' && !node.pageBreakCalculated) {
57099
- node.pageBreakCalculated = true;
57100
- var pageNumber = node.nodeInfo.pageNumbers[0];
57101
- var followingNodesOnPage = [];
57102
- var nodesOnNextPage = [];
57103
- var previousNodesOnPage = [];
57104
- if (pageBreakBeforeFct.length > 1) {
57105
- for (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {
57106
- if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
57107
- followingNodesOnPage.push(linearNodeList[ii].nodeInfo);
57108
- }
57109
- if (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {
57110
- nodesOnNextPage.push(linearNodeList[ii].nodeInfo);
57111
- }
57112
- }
57113
- }
57114
- if (pageBreakBeforeFct.length > 3) {
57115
- for (var ii = 0; ii < index; ii++) {
57116
- if (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {
57117
- previousNodesOnPage.push(linearNodeList[ii].nodeInfo);
57118
- }
57119
- }
57120
- }
57121
- if (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {
57122
- node.pageBreak = 'before';
57123
- return true;
57124
- }
57125
- }
57126
- }
57127
-
57128
- return false;
57129
- }
57130
-
57131
- this.docPreprocessor = new DocPreprocessor();
57132
- this.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);
57133
-
57134
-
57135
- function resetXYs(result) {
57136
- result.linearNodeList.forEach(function (node) {
57137
- node.resetXY();
57138
- });
57139
- }
57140
-
57141
- var result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
57142
- while (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {
57143
- resetXYs(result);
57144
- result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);
57145
- }
57146
-
57147
- return result.pages;
57148
- };
57149
-
57150
- LayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {
57151
-
57152
- this.linearNodeList = [];
57153
- docStructure = this.docPreprocessor.preprocessDocument(docStructure);
57154
- docStructure = this.docMeasure.measureDocument(docStructure);
57155
-
57156
- this.writer = new PageElementWriter(
57157
- new DocumentContext(this.pageSize, this.pageMargins), this.tracker);
57158
-
57159
- var _this = this;
57160
- this.writer.context().tracker.startTracking('pageAdded', function () {
57161
- _this.addBackground(background);
57162
- });
57163
-
57164
- this.addBackground(background);
57165
- this.processNode(docStructure);
57166
- this.addHeadersAndFooters(header, footer);
57167
- if (watermark != null) {
57168
- this.addWatermark(watermark, fontProvider, defaultStyle);
57169
- }
57170
-
57171
- return { pages: this.writer.context().pages, linearNodeList: this.linearNodeList };
57172
- };
57173
-
57174
-
57175
- LayoutBuilder.prototype.addBackground = function (background) {
57176
- var backgroundGetter = isFunction(background) ? background : function () {
57177
- return background;
57178
- };
57179
-
57180
- var context = this.writer.context();
57181
- var pageSize = context.getCurrentPage().pageSize;
57182
-
57183
- var pageBackground = backgroundGetter(context.page + 1, pageSize);
57184
-
57185
- if (pageBackground) {
57186
- this.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);
57187
- pageBackground = this.docPreprocessor.preprocessDocument(pageBackground);
57188
- this.processNode(this.docMeasure.measureDocument(pageBackground));
57189
- this.writer.commitUnbreakableBlock(0, 0);
57190
- context.backgroundLength[context.page] += pageBackground.positions.length;
57191
- }
57192
- };
57193
-
57194
- LayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {
57195
- this.addDynamicRepeatable(function () {
57196
- return JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object
57197
- }, sizeFunction);
57198
- };
57199
-
57200
- LayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {
57201
- var pages = this.writer.context().pages;
57202
-
57203
- for (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {
57204
- this.writer.context().page = pageIndex;
57205
-
57206
- var node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);
57207
-
57208
- if (node) {
57209
- var sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);
57210
- this.writer.beginUnbreakableBlock(sizes.width, sizes.height);
57211
- node = this.docPreprocessor.preprocessDocument(node);
57212
- this.processNode(this.docMeasure.measureDocument(node));
57213
- this.writer.commitUnbreakableBlock(sizes.x, sizes.y);
57214
- }
57215
- }
57216
- };
57217
-
57218
- LayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {
57219
- var headerSizeFct = function (pageSize, pageMargins) {
57220
- return {
57221
- x: 0,
57222
- y: 0,
57223
- width: pageSize.width,
57224
- height: pageMargins.top
57225
- };
57226
- };
57227
-
57228
- var footerSizeFct = function (pageSize, pageMargins) {
57229
- return {
57230
- x: 0,
57231
- y: pageSize.height - pageMargins.bottom,
57232
- width: pageSize.width,
57233
- height: pageMargins.bottom
57234
- };
57235
- };
57236
-
57237
- if (isFunction(header)) {
57238
- this.addDynamicRepeatable(header, headerSizeFct);
57239
- } else if (header) {
57240
- this.addStaticRepeatable(header, headerSizeFct);
57241
- }
57242
-
57243
- if (isFunction(footer)) {
57244
- this.addDynamicRepeatable(footer, footerSizeFct);
57245
- } else if (footer) {
57246
- this.addStaticRepeatable(footer, footerSizeFct);
57247
- }
57248
- };
57249
-
57250
- LayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {
57251
- if (isString(watermark)) {
57252
- watermark = { 'text': watermark };
57253
- }
57254
-
57255
- if (!watermark.text) { // empty watermark text
57256
- return;
57257
- }
57258
-
57259
- watermark.font = watermark.font || defaultStyle.font || 'Roboto';
57260
- watermark.fontSize = watermark.fontSize || 'auto';
57261
- watermark.color = watermark.color || 'black';
57262
- watermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;
57263
- watermark.bold = watermark.bold || false;
57264
- watermark.italics = watermark.italics || false;
57265
- watermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;
57266
-
57267
- if (watermark.angle === null) {
57268
- watermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;
57269
- }
57270
-
57271
- if (watermark.fontSize === 'auto') {
57272
- watermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);
57273
- }
57274
-
57275
- var watermarkObject = {
57276
- text: watermark.text,
57277
- font: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),
57278
- fontSize: watermark.fontSize,
57279
- color: watermark.color,
57280
- opacity: watermark.opacity,
57281
- angle: watermark.angle
57282
- };
57283
-
57284
- watermarkObject._size = getWatermarkSize(watermark, fontProvider);
57285
-
57286
- var pages = this.writer.context().pages;
57287
- for (var i = 0, l = pages.length; i < l; i++) {
57288
- pages[i].watermark = watermarkObject;
57289
- }
57290
-
57291
- function getWatermarkSize(watermark, fontProvider) {
57292
- var textTools = new TextTools(fontProvider);
57293
- var styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });
57294
-
57295
- styleContextStack.push({
57296
- fontSize: watermark.fontSize
57297
- });
57298
-
57299
- var size = textTools.sizeOfString(watermark.text, styleContextStack);
57300
- var rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);
57301
-
57302
- return { size: size, rotatedSize: rotatedSize };
57303
- }
57304
-
57305
- function getWatermarkFontSize(pageSize, watermark, fontProvider) {
57306
- var textTools = new TextTools(fontProvider);
57307
- var styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });
57308
- var rotatedSize;
57309
-
57310
- /**
57311
- * Binary search the best font size.
57312
- * Initial bounds [0, 1000]
57313
- * Break when range < 1
57314
- */
57315
- var a = 0;
57316
- var b = 1000;
57317
- var c = (a + b) / 2;
57318
- while (Math.abs(a - b) > 1) {
57319
- styleContextStack.push({
57320
- fontSize: c
57321
- });
57322
- rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);
57323
- if (rotatedSize.width > pageSize.width) {
57324
- b = c;
57325
- c = (a + b) / 2;
57326
- } else if (rotatedSize.width < pageSize.width) {
57327
- if (rotatedSize.height > pageSize.height) {
57328
- b = c;
57329
- c = (a + b) / 2;
57330
- } else {
57331
- a = c;
57332
- c = (a + b) / 2;
57333
- }
57334
- }
57335
- styleContextStack.pop();
57336
- }
57337
- /*
57338
- End binary search
57339
- */
57340
- return c;
57341
- }
57342
- };
57343
-
57344
- function decorateNode(node) {
57345
- var x = node.x, y = node.y;
57346
- node.positions = [];
57347
-
57348
- if (isArray(node.canvas)) {
57349
- node.canvas.forEach(function (vector) {
57350
- var x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;
57351
- vector.resetXY = function () {
57352
- vector.x = x;
57353
- vector.y = y;
57354
- vector.x1 = x1;
57355
- vector.y1 = y1;
57356
- vector.x2 = x2;
57357
- vector.y2 = y2;
57358
- };
57359
- });
57360
- }
57361
-
57362
- node.resetXY = function () {
57363
- node.x = x;
57364
- node.y = y;
57365
- if (isArray(node.canvas)) {
57366
- node.canvas.forEach(function (vector) {
57367
- vector.resetXY();
57368
- });
57369
- }
57370
- };
57371
- }
57372
-
57373
- LayoutBuilder.prototype.processNode = function (node) {
57374
- var self = this;
57375
-
57376
- this.linearNodeList.push(node);
57377
- decorateNode(node);
57378
-
57379
- applyMargins(function () {
57380
- var unbreakable = node.unbreakable;
57381
- if (unbreakable) {
57382
- self.writer.beginUnbreakableBlock();
57383
- }
57384
-
57385
- var absPosition = node.absolutePosition;
57386
- if (absPosition) {
57387
- self.writer.context().beginDetachedBlock();
57388
- self.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);
57389
- }
57390
-
57391
- var relPosition = node.relativePosition;
57392
- if (relPosition) {
57393
- self.writer.context().beginDetachedBlock();
57394
- self.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);
57395
- }
57396
-
57397
- if (node.stack) {
57398
- self.processVerticalContainer(node);
57399
- } else if (node.columns) {
57400
- self.processColumns(node);
57401
- } else if (node.ul) {
57402
- self.processList(false, node);
57403
- } else if (node.ol) {
57404
- self.processList(true, node);
57405
- } else if (node.table) {
57406
- self.processTable(node);
57407
- } else if (node.text !== undefined) {
57408
- self.processLeaf(node);
57409
- } else if (node.toc) {
57410
- self.processToc(node);
57411
- } else if (node.image) {
57412
- self.processImage(node);
57413
- } else if (node.svg) {
57414
- self.processSVG(node);
57415
- } else if (node.canvas) {
57416
- self.processCanvas(node);
57417
- } else if (node.qr) {
57418
- self.processQr(node);
57419
- } else if (!node._span) {
57420
- throw 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);
57421
- }
57422
-
57423
- if (absPosition || relPosition) {
57424
- self.writer.context().endDetachedBlock();
57425
- }
57426
-
57427
- if (unbreakable) {
57428
- self.writer.commitUnbreakableBlock();
57429
- }
57430
- });
57431
-
57432
- function applyMargins(callback) {
57433
- var margin = node._margin;
57434
-
57435
- if (node.pageBreak === 'before') {
57436
- self.writer.moveToNextPage(node.pageOrientation);
57437
- } else if (node.pageBreak === 'beforeOdd') {
57438
- self.writer.moveToNextPage(node.pageOrientation);
57439
- if ((self.writer.context().page + 1) % 2 === 1) {
57440
- self.writer.moveToNextPage(node.pageOrientation);
57441
- }
57442
- } else if (node.pageBreak === 'beforeEven') {
57443
- self.writer.moveToNextPage(node.pageOrientation);
57444
- if ((self.writer.context().page + 1) % 2 === 0) {
57445
- self.writer.moveToNextPage(node.pageOrientation);
57446
- }
57447
- }
57448
-
57449
- if (margin) {
57450
- self.writer.context().moveDown(margin[1]);
57451
- self.writer.context().addMargin(margin[0], margin[2]);
57452
- }
57453
-
57454
- callback();
57455
-
57456
- if (margin) {
57457
- self.writer.context().addMargin(-margin[0], -margin[2]);
57458
- self.writer.context().moveDown(margin[3]);
57459
- }
57460
-
57461
- if (node.pageBreak === 'after') {
57462
- self.writer.moveToNextPage(node.pageOrientation);
57463
- } else if (node.pageBreak === 'afterOdd') {
57464
- self.writer.moveToNextPage(node.pageOrientation);
57465
- if ((self.writer.context().page + 1) % 2 === 1) {
57466
- self.writer.moveToNextPage(node.pageOrientation);
57467
- }
57468
- } else if (node.pageBreak === 'afterEven') {
57469
- self.writer.moveToNextPage(node.pageOrientation);
57470
- if ((self.writer.context().page + 1) % 2 === 0) {
57471
- self.writer.moveToNextPage(node.pageOrientation);
57472
- }
57473
- }
57474
- }
57475
- };
57476
-
57477
- // vertical container
57478
- LayoutBuilder.prototype.processVerticalContainer = function (node) {
57479
- var self = this;
57480
- node.stack.forEach(function (item) {
57481
- self.processNode(item);
57482
- addAll(node.positions, item.positions);
57483
-
57484
- //TODO: paragraph gap
57485
- });
57486
- };
57487
-
57488
- // columns
57489
- LayoutBuilder.prototype.processColumns = function (columnNode) {
57490
- var columns = columnNode.columns;
57491
- var availableWidth = this.writer.context().availableWidth;
57492
- var gaps = gapArray(columnNode._gap);
57493
-
57494
- if (gaps) {
57495
- availableWidth -= (gaps.length - 1) * columnNode._gap;
57496
- }
57497
-
57498
- ColumnCalculator.buildColumnWidths(columns, availableWidth);
57499
- var result = this.processRow(columns, columns, gaps);
57500
- addAll(columnNode.positions, result.positions);
57501
-
57502
-
57503
- function gapArray(gap) {
57504
- if (!gap) {
57505
- return null;
57506
- }
57507
-
57508
- var gaps = [];
57509
- gaps.push(0);
57510
57916
 
57511
- for (var i = columns.length - 1; i > 0; i--) {
57512
- gaps.push(gap);
57513
- }
57514
57917
 
57515
- return gaps;
57516
- }
57517
- };
57918
+ var fs = __webpack_require__(48181);
57518
57919
 
57519
- LayoutBuilder.prototype.findStartingSpanCell = function (arr, i) {
57520
- let requiredColspan = 1;
57521
- for (let index = i - 1; index >= 0; index--) {
57522
- if (!arr[index]._span) {
57523
- if (arr[index].rowSpan > 1 && (arr[index].colSpan || 1) === requiredColspan) {
57524
- return arr[index];
57525
- } else {
57526
- return null;
57527
- }
57528
- }
57529
- requiredColspan++;
57530
- }
57531
- return null;
57920
+ function ImageMeasure(pdfKitDoc, imageDictionary) {
57921
+ this.pdfKitDoc = pdfKitDoc;
57922
+ this.imageDictionary = imageDictionary || {};
57532
57923
  }
57533
57924
 
57534
- LayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {
57535
- var self = this;
57536
- var pageBreaks = [], positions = [];
57537
-
57538
- this.tracker.auto('pageChanged', storePageBreakData, function () {
57539
- widths = widths || columns;
57540
-
57541
- self.writer.context().beginColumnGroup();
57542
-
57543
- for (var i = 0, l = columns.length; i < l; i++) {
57544
- var column = columns[i];
57545
- var width = widths[i]._calcWidth;
57546
- var leftOffset = colLeftOffset(i);
57547
-
57548
- if (column.colSpan && column.colSpan > 1) {
57549
- for (var j = 1; j < column.colSpan; j++) {
57550
- width += widths[++i]._calcWidth + gaps[i];
57551
- }
57552
- }
57553
-
57554
- // if rowspan starts in this cell, we retrieve the last cell affected by the rowspan
57555
- var endingCell = getEndingCell(column, i);
57556
- if (endingCell) {
57557
- // We store a reference of the ending cell in the first cell of the rowspan
57558
- column._endingCell = endingCell;
57559
- }
57560
-
57561
- // Check if exists and retrieve the cell that started the rowspan in case we are in the cell just after
57562
- var startingSpanCell = self.findStartingSpanCell(columns, i);
57563
- var endingSpanCell = null;
57564
- if (startingSpanCell && startingSpanCell._endingCell) {
57565
- // Reference to the last cell of the rowspan
57566
- endingSpanCell = startingSpanCell._endingCell;
57567
- }
57568
-
57569
- // We pass the endingSpanCell reference to store the context just after processing rowspan cell
57570
- self.writer.context().beginColumn(width, leftOffset, endingSpanCell);
57571
- if (!column._span) {
57572
- self.processNode(column);
57573
- addAll(positions, column.positions);
57574
- } else if (column._columnEndingContext) {
57575
- // row-span ending
57576
- // Recover the context after processing the rowspanned cell
57577
- self.writer.context().markEnding(column);
57578
- }
57579
- }
57580
-
57581
- // Check if last cell is part of a span
57582
- var endingSpanCell = null;
57583
- var lastColumn = columns.length > 0 ? columns[columns.length - 1] : null;
57584
- if (lastColumn) {
57585
- // Previous column cell has a rowspan
57586
- if (lastColumn._endingCell) {
57587
- endingSpanCell = lastColumn._endingCell;
57588
- // Previous column cell is part of a span
57589
- } else if (lastColumn._span === true) {
57590
- // We get the cell that started the span where we set a reference to the ending cell
57591
- var startingSpanCell = self.findStartingSpanCell(columns, columns.length);
57592
- if (startingSpanCell) {
57593
- // Context will be stored here (ending cell)
57594
- endingSpanCell = startingSpanCell._endingCell;
57595
- }
57596
- }
57597
- }
57598
-
57599
- self.writer.context().completeColumnGroup(height, endingSpanCell);
57600
- });
57601
-
57602
- return { pageBreaks: pageBreaks, positions: positions };
57603
-
57604
- function storePageBreakData(data) {
57605
- var pageDesc;
57606
-
57607
- for (var i = 0, l = pageBreaks.length; i < l; i++) {
57608
- var desc = pageBreaks[i];
57609
- if (desc.prevPage === data.prevPage) {
57610
- pageDesc = desc;
57611
- break;
57612
- }
57613
- }
57614
-
57615
- if (!pageDesc) {
57616
- pageDesc = data;
57617
- pageBreaks.push(pageDesc);
57618
- }
57619
- pageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);
57620
- pageDesc.y = Math.min(pageDesc.y, data.y);
57621
- }
57622
-
57623
- function colLeftOffset(i) {
57624
- if (gaps && gaps.length > i) {
57625
- return gaps[i];
57626
- }
57627
- return 0;
57628
- }
57629
-
57630
- function getEndingCell(column, columnIndex) {
57631
- if (column.rowSpan && column.rowSpan > 1) {
57632
- var endingRow = tableRow + column.rowSpan - 1;
57633
- if (endingRow >= tableBody.length) {
57634
- throw 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';
57635
- }
57636
- return tableBody[endingRow][columnIndex];
57637
- }
57638
-
57639
- return null;
57640
- }
57641
- };
57642
-
57643
- // lists
57644
- LayoutBuilder.prototype.processList = function (orderedList, node) {
57645
- var self = this,
57646
- items = orderedList ? node.ol : node.ul,
57647
- gapSize = node._gapSize;
57648
-
57649
- this.writer.context().addMargin(gapSize.width);
57650
-
57651
- var nextMarker;
57652
- this.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {
57653
- items.forEach(function (item) {
57654
- nextMarker = item.listMarker;
57655
- self.processNode(item);
57656
- addAll(node.positions, item.positions);
57657
- });
57658
- });
57925
+ ImageMeasure.prototype.measureImage = function (src) {
57926
+ var image;
57927
+ var that = this;
57659
57928
 
57660
- this.writer.context().addMargin(-gapSize.width);
57661
-
57662
- function addMarkerToFirstLeaf(line) {
57663
- // I'm not very happy with the way list processing is implemented
57664
- // (both code and algorithm should be rethinked)
57665
- if (nextMarker) {
57666
- var marker = nextMarker;
57667
- nextMarker = null;
57668
-
57669
- if (marker.canvas) {
57670
- var vector = marker.canvas[0];
57671
-
57672
- offsetVector(vector, -marker._minWidth, 0);
57673
- self.writer.addVector(vector);
57674
- } else if (marker._inlines) {
57675
- var markerLine = new Line(self.pageSize.width);
57676
- markerLine.addInline(marker._inlines[0]);
57677
- markerLine.x = -marker._minWidth;
57678
- markerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();
57679
- self.writer.addLine(markerLine, true);
57929
+ if (!this.pdfKitDoc._imageRegistry[src]) {
57930
+ try {
57931
+ image = this.pdfKitDoc.openImage(realImageSrc(src));
57932
+ if (!image) {
57933
+ throw 'No image';
57680
57934
  }
57935
+ } catch (error) {
57936
+ throw 'Invalid image: ' + error.toString() + '\nImages dictionary should contain dataURL entries (or local file paths in node.js)';
57681
57937
  }
57938
+ image.embed(this.pdfKitDoc);
57939
+ this.pdfKitDoc._imageRegistry[src] = image;
57940
+ } else {
57941
+ image = this.pdfKitDoc._imageRegistry[src];
57682
57942
  }
57683
- };
57684
57943
 
57685
- // tables
57686
- LayoutBuilder.prototype.processTable = function (tableNode) {
57687
- var processor = new TableProcessor(tableNode);
57944
+ return { width: image.width, height: image.height };
57688
57945
 
57689
- processor.beginTable(this.writer);
57946
+ function realImageSrc(src) {
57947
+ var img = that.imageDictionary[src];
57690
57948
 
57691
- var rowHeights = tableNode.table.heights;
57692
- for (var i = 0, l = tableNode.table.body.length; i < l; i++) {
57693
- processor.beginRow(i, this.writer);
57694
-
57695
- var height;
57696
- if (isFunction(rowHeights)) {
57697
- height = rowHeights(i);
57698
- } else if (isArray(rowHeights)) {
57699
- height = rowHeights[i];
57700
- } else {
57701
- height = rowHeights;
57702
- }
57703
-
57704
- if (height === 'auto') {
57705
- height = undefined;
57949
+ if (!img) {
57950
+ return src;
57706
57951
  }
57707
57952
 
57708
- var result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);
57709
- addAll(tableNode.positions, result.positions);
57710
-
57711
- processor.endRow(i, this.writer, result.pageBreaks);
57712
- }
57713
-
57714
- processor.endTable(this.writer);
57715
- };
57716
-
57717
- // leafs (texts)
57718
- LayoutBuilder.prototype.processLeaf = function (node) {
57719
- var line = this.buildNextLine(node);
57720
- if (line && (node.tocItem || node.id)) {
57721
- line._node = node;
57722
- }
57723
- var currentHeight = (line) ? line.getHeight() : 0;
57724
- var maxHeight = node.maxHeight || -1;
57725
-
57726
- if (line) {
57727
- var nodeId = getNodeId(node);
57728
- if (nodeId) {
57729
- line.id = nodeId;
57953
+ if (typeof img === 'object') {
57954
+ throw 'Not supported image definition: ' + JSON.stringify(img);
57730
57955
  }
57731
- }
57732
57956
 
57733
- if (node._tocItemRef) {
57734
- line._pageNodeRef = node._tocItemRef;
57735
- }
57736
-
57737
- if (node._pageRef) {
57738
- line._pageNodeRef = node._pageRef._nodeRef;
57739
- }
57740
-
57741
- if (line && line.inlines && isArray(line.inlines)) {
57742
- for (var i = 0, l = line.inlines.length; i < l; i++) {
57743
- if (line.inlines[i]._tocItemRef) {
57744
- line.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;
57745
- }
57746
-
57747
- if (line.inlines[i]._pageRef) {
57748
- line.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;
57749
- }
57957
+ if (fs.existsSync(img)) {
57958
+ return fs.readFileSync(img);
57750
57959
  }
57751
- }
57752
57960
 
57753
- while (line && (maxHeight === -1 || currentHeight < maxHeight)) {
57754
- var positions = this.writer.addLine(line);
57755
- node.positions.push(positions);
57756
- line = this.buildNextLine(node);
57757
- if (line) {
57758
- currentHeight += line.getHeight();
57961
+ var index = img.indexOf('base64,');
57962
+ if (index < 0) {
57963
+ return that.imageDictionary[src];
57759
57964
  }
57760
- }
57761
- };
57762
57965
 
57763
- LayoutBuilder.prototype.processToc = function (node) {
57764
- if (node.toc.title) {
57765
- this.processNode(node.toc.title);
57766
- }
57767
- if (node.toc._table) {
57768
- this.processNode(node.toc._table);
57966
+ return Buffer.from(img.substring(index + 7), 'base64');
57769
57967
  }
57770
57968
  };
57771
57969
 
57772
- LayoutBuilder.prototype.buildNextLine = function (textNode) {
57773
-
57774
- function cloneInline(inline) {
57775
- var newInline = inline.constructor();
57776
- for (var key in inline) {
57777
- newInline[key] = inline[key];
57778
- }
57779
- return newInline;
57780
- }
57781
-
57782
- if (!textNode._inlines || textNode._inlines.length === 0) {
57783
- return null;
57784
- }
57785
-
57786
- var line = new Line(this.writer.context().availableWidth);
57787
- var textTools = new TextTools(null);
57788
-
57789
- var isForceContinue = false;
57790
- while (textNode._inlines && textNode._inlines.length > 0 &&
57791
- (line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {
57792
- var isHardWrap = false;
57793
- var inline = textNode._inlines.shift();
57794
- isForceContinue = false;
57795
-
57796
- if (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {
57797
- var widthPerChar = inline.width / inline.text.length;
57798
- var maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);
57799
- if (maxChars < 1) {
57800
- maxChars = 1;
57801
- }
57802
- if (maxChars < inline.text.length) {
57803
- var newInline = cloneInline(inline);
57804
-
57805
- newInline.text = inline.text.substr(maxChars);
57806
- inline.text = inline.text.substr(0, maxChars);
57807
-
57808
- newInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);
57809
- inline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);
57810
-
57811
- textNode._inlines.unshift(newInline);
57812
- isHardWrap = true;
57813
- }
57814
- }
57815
-
57816
- line.addInline(inline);
57817
-
57818
- isForceContinue = inline.noNewLine && !isHardWrap;
57819
- }
57820
-
57821
- line.lastLineInParagraph = textNode._inlines.length === 0;
57822
-
57823
- return line;
57824
- };
57825
-
57826
- // images
57827
- LayoutBuilder.prototype.processImage = function (node) {
57828
- var position = this.writer.addImage(node);
57829
- node.positions.push(position);
57830
- };
57831
-
57832
- LayoutBuilder.prototype.processSVG = function (node) {
57833
- var position = this.writer.addSVG(node);
57834
- node.positions.push(position);
57835
- };
57836
-
57837
- LayoutBuilder.prototype.processCanvas = function (node) {
57838
- var height = node._minHeight;
57839
-
57840
- if (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {
57841
- // TODO: support for canvas larger than a page
57842
- // TODO: support for other overflow methods
57843
-
57844
- this.writer.moveToNextPage();
57845
- }
57846
-
57847
- this.writer.alignCanvas(node);
57848
-
57849
- node.canvas.forEach(function (vector) {
57850
- var position = this.writer.addVector(vector);
57851
- node.positions.push(position);
57852
- }, this);
57853
-
57854
- this.writer.context().moveDown(height);
57855
- };
57856
-
57857
- LayoutBuilder.prototype.processQr = function (node) {
57858
- var position = this.writer.addQr(node);
57859
- node.positions.push(position);
57860
- };
57861
-
57862
- module.exports = LayoutBuilder;
57970
+ module.exports = ImageMeasure;
57863
57971
 
57864
57972
 
57865
57973
  /***/ }),
@@ -58021,8 +58129,8 @@ PageElementWriter.prototype.addQr = function (qr, index) {
58021
58129
  });
58022
58130
  };
58023
58131
 
58024
- PageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {
58025
- return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);
58132
+ PageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index, forcePage) {
58133
+ return this.writer.addVector(vector, ignoreContextX, ignoreContextY, index, forcePage);
58026
58134
  };
58027
58135
 
58028
58136
  PageElementWriter.prototype.beginClip = function (width, height) {
@@ -58155,7 +58263,7 @@ function _interopDefault(ex) {
58155
58263
  return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex;
58156
58264
  }
58157
58265
 
58158
- var PdfKit = _interopDefault(__webpack_require__(82759));
58266
+ var PdfKit = _interopDefault(__webpack_require__(21458));
58159
58267
 
58160
58268
  function getEngineInstance() {
58161
58269
  return PdfKit;
@@ -58183,7 +58291,7 @@ module.exports = {
58183
58291
 
58184
58292
  var PdfKitEngine = __webpack_require__(85208);
58185
58293
  var FontProvider = __webpack_require__(28284);
58186
- var LayoutBuilder = __webpack_require__(25235);
58294
+ var LayoutBuilder = __webpack_require__(8191);
58187
58295
  var sizes = __webpack_require__(70098);
58188
58296
  var ImageMeasure = __webpack_require__(93415);
58189
58297
  var SVGMeasure = __webpack_require__(89638);
@@ -58305,7 +58413,7 @@ PdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {
58305
58413
  userPassword: docDefinition.userPassword,
58306
58414
  ownerPassword: docDefinition.ownerPassword,
58307
58415
  permissions: docDefinition.permissions,
58308
- lang: docDefinition.language,
58416
+ lang: docDefinition.language,
58309
58417
  fontLayoutCache: isBoolean(options.fontLayoutCache) ? options.fontLayoutCache : true,
58310
58418
  bufferPages: options.bufferPages || false,
58311
58419
  autoFirstPage: false,
@@ -60025,21 +60133,25 @@ TableProcessor.prototype.beginTable = function (writer) {
60025
60133
  const keepWithHeaderRows = tableNode.table.keepWithHeaderRows;
60026
60134
 
60027
60135
  if (isPositiveInteger(keepWithHeaderRows)) {
60028
- this.rowsWithoutPageBreak += keepWithHeaderRows;
60136
+ this.rowsWithoutPageBreak += keepWithHeaderRows;
60029
60137
  }
60030
60138
  }
60031
60139
 
60032
60140
  this.dontBreakRows = tableNode.table.dontBreakRows || false;
60033
60141
 
60034
- if (this.rowsWithoutPageBreak) {
60142
+ if (this.rowsWithoutPageBreak || this.dontBreakRows) {
60035
60143
  writer.beginUnbreakableBlock();
60144
+ // Draw the top border of the table
60145
+ this.drawHorizontalLine(0, writer);
60146
+ if (this.rowsWithoutPageBreak && this.dontBreakRows) {
60147
+ // We just increase the value of transactionLevel
60148
+ writer.beginUnbreakableBlock();
60149
+ }
60036
60150
  }
60037
60151
 
60038
60152
  // update the border properties of all cells before drawing any lines
60039
60153
  prepareCellBorders(this.tableNode.table.body);
60040
60154
 
60041
- this.drawHorizontalLine(0, writer);
60042
-
60043
60155
  function getTableInnerContentWidth() {
60044
60156
  var width = 0;
60045
60157
 
@@ -60138,7 +60250,12 @@ TableProcessor.prototype.beginRow = function (rowIndex, writer) {
60138
60250
 
60139
60251
  this.rowCallback = this.onRowBreak(rowIndex, writer);
60140
60252
  writer.tracker.startTracking('pageChanged', this.rowCallback);
60141
- if (this.dontBreakRows) {
60253
+ if (rowIndex == 0 && !this.dontBreakRows && !this.rowsWithoutPageBreak) {
60254
+ // We store the 'y' to draw later and if necessary the top border of the table
60255
+ this._tableTopBorderY = writer.context().y;
60256
+ writer.context().moveDown(this.topLineWidth);
60257
+ }
60258
+ if (this.dontBreakRows && rowIndex > 0) {
60142
60259
  writer.beginUnbreakableBlock();
60143
60260
  }
60144
60261
  this.rowTopY = writer.context().y;
@@ -60149,7 +60266,7 @@ TableProcessor.prototype.beginRow = function (rowIndex, writer) {
60149
60266
  writer.context().moveDown(this.rowPaddingTop);
60150
60267
  };
60151
60268
 
60152
- TableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {
60269
+ TableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY, moveDown = true, forcePage) {
60153
60270
  var lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);
60154
60271
  if (lineWidth) {
60155
60272
  var style = this.layout.hLineStyle(lineIndex, this.tableNode);
@@ -60248,7 +60365,7 @@ TableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overr
60248
60365
  lineWidth: lineWidth,
60249
60366
  dash: dash,
60250
60367
  lineColor: borderColor
60251
- }, false, overrideY);
60368
+ }, false, isNumber(overrideY), null, forcePage);
60252
60369
  currentLine = null;
60253
60370
  borderColor = null;
60254
60371
  cellAbove = null;
@@ -60258,7 +60375,9 @@ TableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overr
60258
60375
  }
60259
60376
  }
60260
60377
 
60261
- writer.context().moveDown(lineWidth);
60378
+ if (moveDown) {
60379
+ writer.context().moveDown(lineWidth);
60380
+ }
60262
60381
  }
60263
60382
  };
60264
60383
 
@@ -60374,6 +60493,15 @@ TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {
60374
60493
  ys[ys.length - 1].y1 = endingY;
60375
60494
 
60376
60495
  var skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);
60496
+ if (rowIndex === 0 && !skipOrphanePadding && !this.rowsWithoutPageBreak && !this.dontBreakRows) {
60497
+ // Draw the top border of the table
60498
+ var pageTableStartedAt = null;
60499
+ if (pageBreaks && pageBreaks.length > 0) {
60500
+ // Get the page where table started at
60501
+ pageTableStartedAt = pageBreaks[0].prevPage;
60502
+ }
60503
+ this.drawHorizontalLine(0, writer, this._tableTopBorderY, false, pageTableStartedAt);
60504
+ }
60377
60505
  for (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {
60378
60506
  var willBreak = yi < ys.length - 1;
60379
60507
  var rowBreakWithoutHeader = (yi > 0 && !this.headerRows);
@@ -60393,6 +60521,14 @@ TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {
60393
60521
  this.reservedAtBottom = 0;
60394
60522
  }
60395
60523
 
60524
+ // Draw horizontal lines before the vertical lines so they are not overridden
60525
+ if (willBreak && this.layout.hLineWhenBroken !== false) {
60526
+ this.drawHorizontalLine(rowIndex + 1, writer, y2);
60527
+ }
60528
+ if (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
60529
+ this.drawHorizontalLine(rowIndex, writer, y1);
60530
+ }
60531
+
60396
60532
  for (i = 0, l = xs.length; i < l; i++) {
60397
60533
  var leftCellBorder = false;
60398
60534
  var rightCellBorder = false;
@@ -60458,7 +60594,9 @@ TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {
60458
60594
  h: bgHeight,
60459
60595
  lineWidth: 0,
60460
60596
  color: fillColor,
60461
- fillOpacity: fillOpacity
60597
+ fillOpacity: fillOpacity,
60598
+ // mark if we are in an unbreakable block
60599
+ _isFillColorFromUnbreakable: !!writer.transactionLevel
60462
60600
  }, false, true, writer.context().backgroundLength[writer.context().page]);
60463
60601
  }
60464
60602
 
@@ -60477,13 +60615,6 @@ TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {
60477
60615
  }
60478
60616
  }
60479
60617
  }
60480
-
60481
- if (willBreak && this.layout.hLineWhenBroken !== false) {
60482
- this.drawHorizontalLine(rowIndex + 1, writer, y2);
60483
- }
60484
- if (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
60485
- this.drawHorizontalLine(rowIndex, writer, y1);
60486
- }
60487
60618
  }
60488
60619
 
60489
60620
  writer.context().page = endingPage;
@@ -60522,7 +60653,8 @@ TableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {
60522
60653
  if (this.dontBreakRows) {
60523
60654
  writer.tracker.auto('pageChanged',
60524
60655
  function () {
60525
- if (!self.headerRows && self.layout.hLineWhenBroken !== false) {
60656
+ if (rowIndex > 0 && !self.headerRows && self.layout.hLineWhenBroken !== false) {
60657
+ // Draw the top border of the row after a page break
60526
60658
  self.drawHorizontalLine(rowIndex, writer);
60527
60659
  }
60528
60660
  },
@@ -60849,7 +60981,7 @@ TextTools.prototype.sizeOfRotatedText = function (text, angle, styleContextStack
60849
60981
  width: Math.abs(size.height * Math.sin(angleRad)) + Math.abs(size.width * Math.cos(angleRad)),
60850
60982
  height: Math.abs(size.width * Math.sin(angleRad)) + Math.abs(size.height * Math.cos(angleRad))
60851
60983
  };
60852
- }
60984
+ };
60853
60985
 
60854
60986
  TextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {
60855
60987
  return widthOfString(text, font, fontSize, characterSpacing, fontFeatures);
@@ -61057,7 +61189,7 @@ function measure(fontProvider, textArray, styleContextStack) {
61057
61189
 
61058
61190
  if ((sup || sub) && item.fontSize === undefined) {
61059
61191
  // font size reduction taken from here: https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing
61060
- fontSize *= 0.58
61192
+ fontSize *= 0.58;
61061
61193
  }
61062
61194
 
61063
61195
  var font = fontProvider.provideFont(fontName, bold, italics);
@@ -61167,7 +61299,7 @@ module.exports = TraversalTracker;
61167
61299
 
61168
61300
  /***/ }),
61169
61301
 
61170
- /***/ 42616:
61302
+ /***/ 26835:
61171
61303
  /***/ (function(module, exports, __webpack_require__) {
61172
61304
 
61173
61305
  var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(a,b){if(true)!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (b),
@@ -65186,7 +65318,7 @@ var CmapProcessor = (_class = /*#__PURE__*/function () {
65186
65318
  }
65187
65319
  };
65188
65320
  return CmapProcessor;
65189
- }(), (_applyDecoratedDescriptor(_class.prototype, "getCharacterSet", [cache], Object.getOwnPropertyDescriptor(_class.prototype, "getCharacterSet"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "codePointsForGlyph", [cache], Object.getOwnPropertyDescriptor(_class.prototype, "codePointsForGlyph"), _class.prototype)), _class);
65321
+ }(), _applyDecoratedDescriptor(_class.prototype, "getCharacterSet", [cache], Object.getOwnPropertyDescriptor(_class.prototype, "getCharacterSet"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, "codePointsForGlyph", [cache], Object.getOwnPropertyDescriptor(_class.prototype, "codePointsForGlyph"), _class.prototype), _class);
65190
65322
  var KernProcessor = /*#__PURE__*/function () {
65191
65323
  function KernProcessor(font) {
65192
65324
  this.kern = font.kern;
@@ -70744,7 +70876,7 @@ var Glyph = (_class$3 = /*#__PURE__*/function () {
70744
70876
  return this._getName();
70745
70877
  }
70746
70878
  }]);
70747
- }(), (_applyDecoratedDescriptor(_class$3.prototype, "cbox", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "cbox"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "bbox", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "bbox"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "path", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "path"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "advanceWidth", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "advanceWidth"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "advanceHeight", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "advanceHeight"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "name", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "name"), _class$3.prototype)), _class$3);
70879
+ }(), _applyDecoratedDescriptor(_class$3.prototype, "cbox", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "cbox"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "bbox", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "bbox"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "path", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "path"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "advanceWidth", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "advanceWidth"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "advanceHeight", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "advanceHeight"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, "name", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, "name"), _class$3.prototype), _class$3);
70748
70880
  var GlyfHeader = new r.Struct({
70749
70881
  numberOfContours: r.int16,
70750
70882
  // if negative, this is a composite glyph
@@ -73136,7 +73268,7 @@ var TTFFont = (_class$4 = /*#__PURE__*/function () {
73136
73268
  return new GlyphVariationProcessor(this, variationCoords);
73137
73269
  }
73138
73270
  }]);
73139
- }(), (_applyDecoratedDescriptor(_class$4.prototype, "bbox", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "bbox"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "_cmapProcessor", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "_cmapProcessor"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "characterSet", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "characterSet"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "_layoutEngine", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "_layoutEngine"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "variationAxes", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "variationAxes"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "namedVariations", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "namedVariations"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "_variationProcessor", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "_variationProcessor"), _class$4.prototype)), _class$4);
73271
+ }(), _applyDecoratedDescriptor(_class$4.prototype, "bbox", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "bbox"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "_cmapProcessor", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "_cmapProcessor"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "characterSet", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "characterSet"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "_layoutEngine", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "_layoutEngine"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "variationAxes", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "variationAxes"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "namedVariations", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "namedVariations"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, "_variationProcessor", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, "_variationProcessor"), _class$4.prototype), _class$4);
73140
73272
  var WOFFDirectoryEntry = new r.Struct({
73141
73273
  tag: new r.String(4),
73142
73274
  offset: new r.Pointer(r.uint32, 'void', {