首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图隐藏PDF上的第一个页脚/页眉

试图隐藏PDF上的第一个页脚/页眉
EN

Stack Overflow用户
提问于 2019-04-02 08:58:23
回答 2查看 9.4K关注 0票数 8

我是新使用nodejs功能的,也是木偶师。以前我使用wkhtmltopdf,但目前它的选项非常糟糕。

因此,我的想法是从带有第一页(具有完全A4宽度/高度的图像)的html中生成一个PDF,因为页脚是从index.js生成的,所以没有办法将其隐藏在pdf的第一页上。

代码语言:javascript
运行
复制
//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);
})();

我的问题是,是否有任何方法来定位第一个页脚并将其隐藏在索引函数中?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-02 17:14:50

目前存在多个bug(请参阅这个问题/答案这一个),使其无法工作。

这目前仅适用于使用此技巧的头部(取自此github评论):

代码语言:javascript
运行
复制
await page.addStyleTag({
    content: `
        body { margin-top: 1cm; }
        @page:first { margin-top: 0; }
    `,
});

这基本上会隐藏第一页上的页边距,但在使用底部边距(也如这里所指出的)时将无法工作。

可能解决办法

我推荐的解决方案是创建两个PDF,一个只有第一页,没有页边距,另一个有剩余的页面和页边距:

代码语言:javascript
运行
复制
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,也可以使用像轻松-pdf-合并这样的工具来自动化它(我自己还没有使用这个工具)。

票数 12
EN

Stack Overflow用户

发布于 2019-12-12 14:46:33

小提示:easy-pdf-merge an pdf-merge有一些“系统-工具-依赖关系”,我更喜欢pdf-lib,这是一个简单的js工具,您可以在这里使用缓冲区和类型记录支持。

我的打字稿:

代码语言:javascript
运行
复制
import {PDFDocument} from 'pdf-lib'
...

const options: PDFOptions = {
    format: 'A4',
    displayHeaderFooter: true,
    footerTemplate: footerTemplate,
    margin: {
        top: '20mm',
        bottom: '20mm',
    },
}
const page1: Buffer = await page.pdf({
    ...options,
    headerTemplate: '<div><!-- no header hack --></div>',
    pageRanges: '1',
})
const page2: Buffer = await page.pdf({
    ...options,
    headerTemplate: headerTemplate,
    pageRanges: '2-',
})

const pdfDoc = await PDFDocument.create()

const coverDoc = await PDFDocument.load(page1)
const [coverPage] = await pdfDoc.copyPages(coverDoc, [0])
pdfDoc.addPage(coverPage)

const mainDoc = await PDFDocument.load(page2)
for (let i = 0; i < mainDoc.getPageCount(); i++) {
    const [aMainPage] = await pdfDoc.copyPages(mainDoc, [i])
    pdfDoc.addPage(aMainPage)
}

const pdfBytes = await pdfDoc.save()

// Buffer for https response in my case
return Buffer.from(pdfBytes)
...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55470714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档