DataTables PDF export (pdfmake): как предотвратить разрыв строк в разрывах страниц?

Я пытаюсь настроить экспорт в PDF с помощью DataTables (который использует pdfmake). Все мои пользовательские стили работают, кроме dontBreakRows, это, похоже, не имеет никакого значения, поэтому содержимое строк таблицы разбивается на разрывы страниц вместо того, чтобы держать их вместе на следующей странице, когда они не помещаются в предыдущую, что это то, что я ожидал.

Моя версия pdfmake - 0.1.27 (последняя по дате), DataTables 1.10.12, Buttons 1.2.1

Это мой код:

(...)
$.extend( true, {}, buttonCommon, {
    'extend': 'pdf',
    'text': 'PDF A4',
    'orientation': 'landscape',
    'pageSize': 'A4',
    'message': 'Date '+todays,
    'customize': function (doc) {
      doc.content.splice(1, 0, {
        margin: \{0, -32, 0, 8\},
        alignment: 'right',
        image: 'data:image/png;base64,(...)'
      });
      //These styles are working:
      doc.defaultStyle.fontSize = 10;
      doc.styles.title.fontSize = 12;
      doc.styles.tableHeader.fontSize = 11;
      doc.styles.tableFooter.fontSize = 11;
      doc.styles.tableHeader.alignment = 'left';
      doc.styles.title.bold = true;
      doc.styles.tableHeader.bold = true;
      doc.styles.tableHeader.color = '#ffffff';
      doc.styles.tableHeader.fillColor = '#666666';
      doc.styles.tableBodyOdd.fillColor = '#ffffff';
      doc.styles.tableBodyEven.fillColor = '#e9e9e9';
      doc.styles.tableHeader.noWrap = true;

      //It doesn't work:
      doc.styles.tableBodyOdd.dontBreakRows = true;
      doc.styles.tableBodyEven.dontBreakRows = true;
      doc.styles.tableBodyOdd.pageBreak = 'before';
      doc.styles.tableBodyEven.pageBreak = 'before';

      //It doesn't work neither:
      doc.defaultStyle = 
        {
          dontBreakRows: true
        }              
    }

}),
(...)

Что я делаю неправильно? Спасибо!


person chimos    schedule 05.04.2017    source источник


Ответы (2)


У меня была точно такая же проблема. Стили не работают.

Для меня это сработало (в зависимости от позиции таблицы в содержимом):

doc.content[1].table.dontBreakRows = true; 

Если вы придумали лучший способ, просто дайте мне знать

person TOS    schedule 25.09.2017

Вы используете bodyOdd и bodyEven, поэтому вам нужно использовать

doc.styles.tableBodyOdd.noWrap = true;
doc.styles.tableBodyEven.noWrap = true;
person Marcos Lima    schedule 25.09.2019