Динамическое разбиение страниц после четырех таблиц в PDF-файлах: методы и примеры кода

При динамическом создании PDF-документов с помощью PDFMake вы можете столкнуться со сценариями, когда вам нужно разбить страницу после определенного количества таблиц. В этой статье блога рассматриваются различные методы достижения этого требования и приводятся примеры кода для реализации каждого подхода.

Метод 1: разрывы страниц вручную
Один простой метод – вручную вставлять разрыв страницы после каждой четвертой таблицы. Этого можно добиться, вычислив количество таблиц и при необходимости добавив элемент «разрыв страницы». Вот пример:

var docDefinition = {
    content: [
        // Table 1
        {...},
        // Table 2
        {...},
        // Table 3
        {...},
        // Table 4
        {...},
        // Page break
        { text: '', pageBreak: 'after' },
        // Table 5
        {...},
        // Table 6
        {...},
        // ...
    ]
};

Метод 2: функция пользовательского макета
PDFMake позволяет определить функцию пользовательского макета, которая определяет, как контент будет располагаться на каждой странице. Вы можете использовать эту функцию для динамической вставки разрывов страниц после каждой четвертой таблицы. Вот пример:

var docDefinition = {
    content: [
        // Table 1
        {...},
        // Table 2
        {...},
        // Table 3
        {...},
        // Table 4
        {...},
        // Table 5
        {...},
        // Table 6
        {...},
        // ...
    ],
    // Custom layout function
    layout: function (currentNode, repeatingBlock) {
        if (repeatingBlock && currentNode.table && currentNode.table.body) {
            return (currentNode.table.body.length % 4 === 0) ? { pageBreak: 'after' } : null;
        }
    }
};

Метод 3: разделение контента на отдельные PDF-файлы.
Если разделение страниц после четырех таблиц имеет решающее значение, а таблицы слишком велики и не помещаются на одной странице, вы можете разделить содержимое на отдельные PDF-файлы, каждый из которых содержит четыре таблицы. Затем вы можете объединить полученные PDF-файлы. Вот пример кода с использованием библиотеки pdf-lib:

// Split content into separate PDFs
var content = [/* Array of tables */];
var chunks = [];
for (var i = 0; i < content.length; i += 4) {
    chunks.push(content.slice(i, i + 4));
}
// Generate separate PDFs
var PDFLib = require('pdf-lib');
var mergedPdf = await PDFLib.PDFDocument.create();
for (var chunk of chunks) {
    var doc = await PDFLib.PDFDocument.create();
    // Add tables to the doc
    chunk.forEach(table => doc.addTable(table));
    var pdfBytes = await doc.save();
    var pdf = await PDFLib.PDFDocument.load(pdfBytes);
    await PDFLib.PDFDocument.load(pdfBytes);
    mergedPdf.insertPage(mergedPdf.getPageCount());
    mergedPdf.copyPages(pdf, [0]);
}
// Save the merged PDF
var mergedPdfBytes = await mergedPdf.save();

В этой статье мы рассмотрели три различных метода динамического разбиения страниц после каждых четырех таблиц в PDF-файлах, созданных с помощью PDFMake. Вы можете выбрать метод, который лучше всего соответствует вашим требованиям, и реализовать его, используя предоставленные примеры кода. С помощью этих методов вы сможете улучшить читаемость и структуру ваших PDF-документов.