一、環境
node版本為v8.11.2
typescript版本為^3.0.0
html-pdf版本為^2.2.0
二、需求
html轉pdf,並且添加頁碼
三、實現
由於需要在node端實現該需求,因此尋找了一下html轉pdf的依賴,發現各式各樣的還是蠻多的,從以前的項目里發現了一個html-pdf的依賴,也就直接拿來用用看。
配置直接參考https://www.npmjs.com/package/html-pdf上面,已經很詳細了。
其實現本質上還是需要前端將渲染好的html源碼,包括樣式等作為字符串傳到node端,然后直接調用依賴中的方法導出pdf即可,工作量主要還是在前端的處理上。
node端代碼如下:
@PostMapping('/xhr/downloadPDF')
async downloadPDF(
ctx: Context
) {
const html: string = ctx.request.body.html as string;
ctx.body = await new Promise((resolve, reject) => {
create(html + '', {
format: 'A4',
border: '10px',
httpHeaders: {
Cookie: ctx.request.headers.cookie
},
base: `http://127.0.0.1:${9123}`,
type: 'pdf',
footer: {
height: '10mm',
contents: {
default: '<span style="color: #444;">{{page}}</span>/<span>{{pages}}</span>' // fallback value
}
}
}).toStream((err, stream) => {
if (err) reject(err);
resolve(stream);
});
});
}
