2016-04-12 7 views
3

Можно ли сделать таблицу содержания (TOC) с помощью pdfmake? Библиотека будет генерировать PDF для меня, но я понятия не имею, на какой странице будет отображаться определенный объект. Конечно, это зависит от размера страницы, ориентации и т. Д. Некоторое содержимое будет переходить на следующую страницу. Я не могу понять, как рассчитывать заранее, когда заканчивается глава.Как сделать оглавление с помощью pdfmake?

Рассмотрим это определение документа:

var dd = { 
    footer: function(currentPage, pageCount) { return currentPage.toString() + ' of ' + pageCount; }, 
    content: [ 
     'Table of contents\n\n', 
     'Chapter 1 ....... ?', 
     'Chapter 2 ....... ?', 
     'Chapter 3 ....... ?', 
     'Chapter 4 ....... ?', 
     { 
      text: '', 
      pageBreak: 'after' 
     }, 
     { 
      text: 'Chapter 1: is on page 2', 
      pageBreak: 'after' 
     }, 
     { 
      stack: [ 
       'Chapter 2: is on page 3\n', 
       'A LOT OF ROWS 2\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', 
       'A LOT OF ROWS 2\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', 
       'A LOT OF ROWS 2\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n', 
       'A LOT OF ROWS 2\nWill go to the next page if this line contains a lot of text. Will go to the next page if this line contains a lot of text. Will go to the next page if this line contains a lot of text.' 
       ], 
      pageBreak: 'after' 
     }, 
     { 
      text: 'chapter 3: is on page 5', 
      pageBreak: 'after' 
     }, 
     { 
      text: 'chapter 4: is on page 6' 
     }, 
    ] 
} 

Самый простой Ват тест, чтобы вставить этот объект дд на детской площадке: http://pdfmake.org/playground.html

Любые идеи о том, как создать ТОС?

ответ

2

Хотя это не было поддержано до недавнего времени вы можете сделать

var docDefinition = { 
    content: [ 
    { 
     toc: { 
     // id: 'mainToc' // optional 
     title: {text: 'INDEX', style: 'header'} 
     } 
    }, 
    { 
     text: 'This is a header', 
     style: 'header', 
     tocItem: true, // or tocItem: 'mainToc' if is used id in toc 
     // or tocItem: ['mainToc', 'subToc'] for multiple tocs 
    } 
    ] 
} 

Источник: https://github.com/bpampuch/pdfmake#table-of-contents


Обратите внимание, что это еще не в недавнем 0.1.28 релизе. Но я думаю, он будет включен в следующий, а между тем вы можете легко построить из источника:

git clone https://github.com/bpampuch/pdfmake.git 
cd pdfmake 
npm install # or: yarn 
git submodule update --init libs/FileSaver.js 
npm run build # or: yarn run build 

Источник: https://github.com/bpampuch/pdfmake#building-from-sources


Я могу подтвердить, что в приведенном выше примере ToC функционирующий в этом случае до тех пор, так как у вас есть хотя бы один tocItem. Zero tocItem s и toc в настоящее время выдают исключение из-за пустой таблицы ToC.