使用 html css 将页脚添加到 pdf 的每一页

Add Footer to every page of pdf using html css

我在 nodejs 中使用 ejs 文件生成 PDF。是否可以在生成的 PDF 的每一页上添加页脚?

这是我的 ejs 文件:

<!DOCTYPE html>
<html>
...
<head>
 <style>
  footer{
            background-color: red;
            width: 100%;
            position: absolute;
            bottom: 0;
            left: 0;
            right: 0;
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
        }
 </style>
</head>
<body> ... </body>
<footer>
 <p>this is footer</p>
</footer>
</html>

这是我的 nodejs 代码片段:

ejs.renderFile(path.join(__dirname, './views', "report-template.ejs"), { invoicedata: JSON.parse(results[0].jsondata), moment:moment }, (fileerr, data) => {
                    if (fileerr) {
                        console.log("Error!", fileerr);
                    } else {
                        let options = {
                            "height": "11.7in",
                            "width": "8.3in",
                        }
                        pdf.create(data, options).toFile("report.pdf", function (err, data) {
                            if (err) {
                                console.log("error!!");
                            } else {
                                console.log("file created successfully");
                            }
                        })
                    }
                })

得到的输出pdf是:

screenshot of pdf

也许这个 CSS 能帮上忙? IE。将“绝对”位置更改为固定位置?

@media print {
  footer {
    position: fixed;
    bottom: 0;
  }
}

此问题中的一些评论可能会有所帮助: How to use HTML to print header and footer on every printed page of a document?

虽然在 HTML 中模拟分页页眉和页脚相当容易,但对于专为不受限制的页面宽度或长度而设计的格式而言,它们并不自然。

通常将 HTML 对象描述为变量的百分比 canvas PDF 所需的固定笛卡尔页面的转换容易出现舍入错误。

举个例子,主要目的是在 Microsoft Edge 中模拟 PDF 布局(基于 Chrome),但是 fiddle 在一个浏览器中非常适合查看和打印的因素将需要另外调整。

请参阅插图,其中 与目标打印机 完全相同的代码的页面在边缘打印预览中非常完美,在 Internet Explore 中受到 creep-age 的影响,在相同的打印机默认值! crap-page 因此通常需要进行微调以保持同步,从而导致源代码的两个不同副本!

<!DOCTYPE html>
<html><head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<title>Dynamic Styles: NewPage Breaking Headline News</title>

<!--
 <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/break-after"></a> 
 Generic break values
 NewPage break values
 Column break values
 Region break values
 Global values
-->

<style type="text/css" media="all">
.body {
    position: absolute;
}
#page {
   break-before: auto;
   margin: 0px;
   width: 736px;
   height: 1103px;
   position: relative;
}
h1 {
    text-align: center;
}

#page-break {
    position: absolute;
    bottom: 0;
    width: 100%;
    height: 20px;
    padding: 20px;
    background-color: red;
    text-align: center;
}
</style>

</head>
<body>
<div id="page">
<div>
<br><h1>Headline on Page 1</h1>
...
 more content on Page 1
...
</div>
<div id="page-break"> Footline on Page 1 </div>
</div>
<div id="page">
<br><h1>Headline on Page 2</h1>
...
 more content on Page 2
...
<div id="page-break"> Footline on Page 2 </div>
</div>
<div id="page">
<br><br><h1>Headline on Page 3</h1>
...
 more content on Page 3
...
<div id="page-break"> Footline on Page 3 </div>
</div>
</body></html>