从 HTML 生成 pdfmake header 和页脚:渲染不完整
Generating pdfmake header & footer from HTML: incomplete rendering
我正在开发一款可以导出 PDF 的浏览器应用程序。此 PDF 必须包含 user-defined header 和页脚。这些 header 和页脚作为字符串存储在数据库中,并通过 API 调用获取。
我正在为此使用 pdfmake 和 htmltopdfmake。我正在像这样解析这些 HTML 字符串:
exportReportToPDF (tableData, tableKeyMap, reportSettings, reportTitle) {
/* Style constants */
const blue = '#044e99'
const marginArray = [40, 5, 0, 10]
const documentDefinition = {}
const rawHTMLStyles = {
h1: {
fontSize: 16,
color: blue,
margin: marginArray
},
h2: {
fontSize: 14,
color: blue,
margin: marginArray
},
h3: {
fontSize: 12,
color: blue,
margin: marginArray
},
p: {
fontSize: 8,
margin: marginArray
},
hr: {
margin: [0, 0, 0, 0]
}
}
/* Generate header and footer */
if (reportSettings.header && reportSettings.footer) {
const header = htmlToPdfmake(reportSettings.header, {
defaultStyles: rawHTMLStyles,
imagesByReference: true
})
const footer = htmlToPdfmake(reportSettings.footer, {
defaultStyles: rawHTMLStyles,
imagesByReference: true
})
documentDefinition.header = header.content
documentDefinition.footer = footer.content
}
/* irrelevant code redacted */
pdfMake.createPdf(documentDefinition).open()
},
这不是很好用。如果我将其作为 reportSettings
传递给函数,则 header 显示不正确。 <h1>
出现,但 <h2>
没有出现。
{
"id": 1,
"title": "Prueba",
"header": "<h1>Lorem Ipsum Dolor Sit Amet</h1><h2>consectetur adipiscing elit</h2>",
"footer": "<p>Lorem ipsum 2021</p>",
"created": "2021-07-06T15:21:10.864259Z",
"updated": "2021-07-06T15:21:10.864358Z",
"creator": 1
}
我做错了什么?我应该如何制作这个 HTML 渲染?
提前致谢!
在 this GitHub issue 中找到了解决方案!增加文档的 pageMargins
会使隐藏线出现。文档正文似乎隐藏了页眉和页脚,就好像它具有更高的 z-index。
像这样:
exportReportToPDF (tableData, tableKeyMap, reportSettings, reportTitle) {
const documentDefinition = {
pageMargins: [40, 80, 40, 80]
}
/* ... */
pdfMake.createPdf(documentDefinition).open()
},
我正在开发一款可以导出 PDF 的浏览器应用程序。此 PDF 必须包含 user-defined header 和页脚。这些 header 和页脚作为字符串存储在数据库中,并通过 API 调用获取。
我正在为此使用 pdfmake 和 htmltopdfmake。我正在像这样解析这些 HTML 字符串:
exportReportToPDF (tableData, tableKeyMap, reportSettings, reportTitle) {
/* Style constants */
const blue = '#044e99'
const marginArray = [40, 5, 0, 10]
const documentDefinition = {}
const rawHTMLStyles = {
h1: {
fontSize: 16,
color: blue,
margin: marginArray
},
h2: {
fontSize: 14,
color: blue,
margin: marginArray
},
h3: {
fontSize: 12,
color: blue,
margin: marginArray
},
p: {
fontSize: 8,
margin: marginArray
},
hr: {
margin: [0, 0, 0, 0]
}
}
/* Generate header and footer */
if (reportSettings.header && reportSettings.footer) {
const header = htmlToPdfmake(reportSettings.header, {
defaultStyles: rawHTMLStyles,
imagesByReference: true
})
const footer = htmlToPdfmake(reportSettings.footer, {
defaultStyles: rawHTMLStyles,
imagesByReference: true
})
documentDefinition.header = header.content
documentDefinition.footer = footer.content
}
/* irrelevant code redacted */
pdfMake.createPdf(documentDefinition).open()
},
这不是很好用。如果我将其作为 reportSettings
传递给函数,则 header 显示不正确。 <h1>
出现,但 <h2>
没有出现。
{
"id": 1,
"title": "Prueba",
"header": "<h1>Lorem Ipsum Dolor Sit Amet</h1><h2>consectetur adipiscing elit</h2>",
"footer": "<p>Lorem ipsum 2021</p>",
"created": "2021-07-06T15:21:10.864259Z",
"updated": "2021-07-06T15:21:10.864358Z",
"creator": 1
}
我做错了什么?我应该如何制作这个 HTML 渲染? 提前致谢!
在 this GitHub issue 中找到了解决方案!增加文档的 pageMargins
会使隐藏线出现。文档正文似乎隐藏了页眉和页脚,就好像它具有更高的 z-index。
像这样:
exportReportToPDF (tableData, tableKeyMap, reportSettings, reportTitle) {
const documentDefinition = {
pageMargins: [40, 80, 40, 80]
}
/* ... */
pdfMake.createPdf(documentDefinition).open()
},