From 757b955300f8f3e507f65f46cececce9a4d1b4ca Mon Sep 17 00:00:00 2001 From: Libor M Date: Sat, 27 Jul 2019 14:26:51 +0200 Subject: [PATCH] fixed rendering empty ToC master commit: 388e6ea9a85b130dab9e97253e610610ff8c0f93 --- src/docMeasure.js | 56 ++++++++++++++++++++++-------------------- src/layoutBuilder.js | 4 ++- tests/layoutBuilder.js | 17 ++++++++++++- 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/src/docMeasure.js b/src/docMeasure.js index 6e4a385e3..6414a45a4 100644 --- a/src/docMeasure.js +++ b/src/docMeasure.js @@ -244,33 +244,35 @@ DocMeasure.prototype.measureToc = function (node) { node.toc.title = this.measureNode(node.toc.title); } - var body = []; - var textStyle = node.toc.textStyle || {}; - var numberStyle = node.toc.numberStyle || textStyle; - var textMargin = node.toc.textMargin || [0, 0, 0, 0]; - for (var i = 0, l = node.toc._items.length; i < l; i++) { - var item = node.toc._items[i]; - var lineStyle = item._textNodeRef.tocStyle || textStyle; - var lineMargin = item._textNodeRef.tocMargin || textMargin; - var lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle; - var destination = getNodeId(item._nodeRef); - body.push([ - { text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin }, - { text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] } - ]); - } - - - node.toc._table = { - table: { - dontBreakRows: true, - widths: ['*', 'auto'], - body: body - }, - layout: 'noBorders' - }; - - node.toc._table = this.measureNode(node.toc._table); + if (node.toc._items.length > 0) { + var body = []; + var textStyle = node.toc.textStyle || {}; + var numberStyle = node.toc.numberStyle || textStyle; + var textMargin = node.toc.textMargin || [0, 0, 0, 0]; + for (var i = 0, l = node.toc._items.length; i < l; i++) { + var item = node.toc._items[i]; + var lineStyle = item._textNodeRef.tocStyle || textStyle; + var lineMargin = item._textNodeRef.tocMargin || textMargin; + var lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle; + var destination = getNodeId(item._nodeRef); + body.push([ + { text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin }, + { text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] } + ]); + } + + + node.toc._table = { + table: { + dontBreakRows: true, + widths: ['*', 'auto'], + body: body + }, + layout: 'noBorders' + }; + + node.toc._table = this.measureNode(node.toc._table); + } return node; }; diff --git a/src/layoutBuilder.js b/src/layoutBuilder.js index c69f56829..a4f739934 100644 --- a/src/layoutBuilder.js +++ b/src/layoutBuilder.js @@ -662,7 +662,9 @@ LayoutBuilder.prototype.processToc = function (node) { if (node.toc.title) { this.processNode(node.toc.title); } - this.processNode(node.toc._table); + if (node.toc._table) { + this.processNode(node.toc._table); + } }; LayoutBuilder.prototype.buildNextLine = function (textNode) { diff --git a/tests/layoutBuilder.js b/tests/layoutBuilder.js index d50c30b0e..3e58cd64b 100644 --- a/tests/layoutBuilder.js +++ b/tests/layoutBuilder.js @@ -1627,7 +1627,6 @@ describe('LayoutBuilder', function () { it.skip('should render lines to pdf in a single call if style is the same'); it.skip('should support document encryption'); it.skip('should support document permissions'); - it.skip('should support TOC'); it.skip('should support in-document-references'); it.skip('should support uppercase text transforms'); it.skip('should support lowercase text transforms'); @@ -2014,4 +2013,20 @@ describe('LayoutBuilder', function () { assert.deepEqual(pageBreakBeforeFunction.getCall(3).args[0].pageNumbers, [2]); }); }); + + describe('table of content', function () { + it('should render empty ToC', function () { + var desc = [ + { + toc: { + title: { text: 'INDEX' } + } + } + ]; + + var pages = builder.layoutDocument(desc, sampleTestProvider); + + assert.equal(pages.length, 1); + }); + }); });