Попытка скрыть первый нижний колонтитул / заголовок в PDF, сгенерированном с помощью Puppeteer - PullRequest
2 голосов
/ 02 апреля 2019

Я новый, использующий функции nodejs, а также кукловод. Раньше я использовал wkhtmltopdf, но в настоящее время его параметры очень скудны.

Итак, моя идея заключалась в том, чтобы сгенерировать pdf из html с первой титульной страницей (изображение с полной шириной / высотой A4), поскольку нижний колонтитул генерируется из index.js, поэтому в первую очередь его невозможно спрятать. страница PDF.

//Imports
const puppeteer = require('puppeteer');
//Open browser
async function startBrowser() {
    const browser = await puppeteer.launch({headless: true, args:['--no-sandbox']});
    const page = await browser.newPage();
    return {browser, page};
}
//Close browser
async function closeBrowser(browser) {
    return browser.close();
}
//Html to pdf
async function html2pdf(url) {
    const {browser, page} = await startBrowser();
    await page.goto(url, {waitUntil: 'networkidle2'});
    await page.emulateMedia('screen');
    //Options
    await page.pdf({
        printBackground: true,
        path: 'result.pdf',
        displayHeaderFooter: true,
        footerTemplate: '<div style="width:100%;text-align:right;position:relative;top:10px;right:10px;"><img width="60px" src="data:data:image/..."'
        margin : {top: '0px',right: '0px',bottom: '40px',left: '0px' },
        scale: 1,
        landscape: false,
        format: 'A4',
        pageRanges: ""
    });
}
//Exec
(async () => {
    await html2pdf('file:///loc/node_pdfs/givenhtml.html');
    process.exit(1);
})();

У меня вопрос, есть ли способ найти первый нижний колонтитул и скрыть его от функции индекса?

Спасибо!

1 Ответ

2 голосов
/ 02 апреля 2019

В настоящее время существует несколько ошибок (см. этот вопрос / ответ или этот ), которые делают невозможным получение этой работы.

В настоящее время это возможно только для заголовков, использующих этот трюк (взят из этого комментария github ):

await page.addStyleTag({
    content: `
        body { margin-top: 1cm; }
        @page:first { margin-top: 0; }
    `,
});

Это будет в основном скрывать поле на первой странице, но не будет работать при использовании нижнего поля (как также отмечено здесь ).

Возможное решение

Решение, которое я рекомендую, - создать два PDF-файла, один с первой страницей без полей, а другой с оставшимися страницами и полем:

await page.pdf({
    displayHeaderFooter: false,
    pageRanges: '1',
    path: 'page1.pdf',
});

await page.pdf({
    displayHeaderFooter: true,
    footerTemplate: '<div style="font-size:5mm;">Your footer text</div>',
    margin: {
        bottom: '10mm'
    },
    pageRanges: '2-', // start this PDF at page 2
    path: 'remaining-pages.pdf',
});

В зависимости от того, как часто вам нужно выполнять задачу, вы можете либо объединить PDF-файлы вручную, либо автоматизировать их с помощью инструмента, подобного easy-pdf-merge (я сам этим не пользовался).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...