当前位置: 首页 > 知识库问答 >
问题:

Puppeteer pdf分页错误

许明朗
2023-03-14

我尝试用木偶器生成pdf文件。它对一个页面很好,但当我尝试生成多页pdf文档时,我有一个bug的分页符。HTML模板用于下面生成。拜托,能帮我就帮我。复制的前提条件:以100%的高度填充第一页,并为下面的块添加标题。

HTML模板

function getHTMLTemplate(
    height = 'auto', 
    component = '<div></div>', 
    style = '<style></style>',
    header = '<div></div>',
    footer = '<div></div>',
) {
    return `
        <!DOCTYPE html>
        <html>                
            <head>
                <meta charset="utf-8" />
                <meta http-equiv="X-UA-Compatible" content="IE=edge">
                <title>HTML to PDF Example</title>
                <meta name="viewport" content="width=device-width, initial-scale=1">
                <style>
                    * {margin: 0; padding: 0; border-spacing: 0;}

                    .page {
                        width: 210mm;
                        height: ${height};
                        overflow: hidden;
                        background: transparent;
                        margin-top: -1px !important;
                        margin-bottom: -1px !important;
                    }

                    body>div {
                        width: 100%;
                        position: fixed;
                    }

                    body>div:first-child {
                        top: 0;
                    }

                    body>div:nth-child(2) {
                        bottom: 0;
                    }
                    
                    @page {
                        size: 'A4';
                        margin: 0;
                    }
                    
                    @media print {
                        thead {display: table-header-group;} 
                        tfoot {display: table-footer-group;}

                        html, body {
                            width: 210mm;
                            height: 297mm;
                        }
                        
                        tbody::after {
                            content: ''; 
                            display: block;
                            page-break-after: always;
                            page-break-inside: avoid;
                            page-break-before: avoid;        
                        }
                    }

                    .block {
                        top: 0;
                        width: 210mm;
                        height: 40px;
                        position: absolute;
                        background: #092a4e;
                        z-index: 1;
                    }
                </style>
            </head>
            <body>
                <div class="block"></div>
                ${header}
                ${footer}
                <table>
                    <thead>
                        <tr>
                            <td>
                                ${header}
                            </td>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>
                                <div class="page">
                                    ${component}
                                    ${style}
                                </div>
                            </td>
                        </tr>
                    </tbody>
                    <tfoot>
                        <tr>
                            <td>
                                ${footer}
                            </td>
                        </tr>
                    </tfoot>
                </table>
            </body>
        </html>
    `;
}

生成PDF

const browser = await puppeteer.launch({ args: ['--no-sandbox', '--disable-setuid-sandbox'] });
const page = await browser.newPage();
await page.emulateMediaType('print');
await page.setContent(utils.getHTMLTemplate(`calc(891mm - 82px)`, component, sheet.getStyleTags(), template.header, template.footer));
const buffer = await page.pdf({
   format: "A4",
   margin: { top: 0, bottom: 0, right: 0, left: 0 },
   printBackground: true,
});

Bug在此输入图像描述

共有1个答案

凌长恨
2023-03-14

为了避免一个div分成两个页面,在html中添加一个类(例如“mydiv”)到div中,并在页面CSS中包含下面的代码。

@media print {
  .myDiv {
     break-inside: avoid;
  }
}
 类似资料:
  • 问题内容: 我有这样的代码和方法,并在此所有其他方法作品和我都找过我所能,该方法适用于这也是 但这给了我 到处都是的错误,我找不到任何解决方案。 问题答案: 从你的问题… 我认为这是你感到困惑的地方。“查询”是指SQLAlchemy 对象。是指对象,它是的子类。此子类包括诸如和的帮助器。但是,这意味着Query对象不具有该功能。实际构建对象的方式称为“查询”对象,这取决于你处理的是还是对象。 在此

  • 对,第一次使用分页,无法使其在第一页之外工作(404错误)。这一切似乎都围绕着$offset变量展开,就好像我将offset的变量更改为整数(如15),它会在第一页上显示从第15行开始的结果-但是$offset- 控制器: 型号: URL(首页): URL(第二页): 我做错了什么? 虽然这与错误无关,但请查看:

  • 我的页面正在成功加载智能表js,但是当我尝试使用分页功能(如留档所示)时,我收到以下错误 和 我不确定我做错了什么,但下面是我的代码。任何帮助都会很好!谢谢

  • 我在Spring MongoRepository上有一个简单的分页请求,但MongoRepository显然在某个任意的高页面#之后开始发送不正确的结果。我在这里发帖是想知道我是否遗漏了什么,或者这可能是Spring MongoRepository的一个bug。 在我的测试中,我的测试mongo db中有14个元素,下面的分页请求工作良好(如果数据在那里,则检索数据):但是下面的PageReque

  • 我使用了spring boot(1.3.5)、spring-data、spring-data-jpa、JPA(hibernate/hsqldb)。 代码: 控制器: 我试着 也是,但不起作用。 浏览器输出: SQL无效!额外的“:”和重复的“ASC ASC”。 控制台输出:

  • 在我的Wordpress自定义主题中,一个分页,在加载上面1的页面时给出404错误。我已经检查了Permalink和其他东西,但没有scuccess。 请帮我脱掉。 这是我的密码。