背景
之前有需求,一键生成pdf,下载到本地,详见;http://t.csdn.cn/5GzSx。
本次的需求基于上次有升级,上次是直接生成pdf,只是为了看。这次的需求是预览账单并保存为pdf,保存的pdf是可以选中复制的,那么之前的方案就不能用了。
调研
网上有很多方法,但是都或多或少存在问题,大部分的都是先生成图片,然后再生成pdf文件。不可复制,还容易失真。后面尝试了多种方式后,发现了一个宝藏,直接利用浏览器的打印功能。一语点醒梦中人呀,不仅可以预览,还可以保存为pdf,还可以选中复制。
后面尝试了写一写,发现存在一些兼容问题和样式问题,而且需要处理选定固定的dom去保存。基于此,去调研了一下,找到一个比较好用的库,兼容性挺好,样式也能保留。— print-js:https://printjs.crabbly.com/
- 直接使用window.print,中间将我们需要打印的dom替换body,样式有问题,而且,在点击预览之前,我页面其实是没有渲染的,这样替换,会导致我页面的变化。
const print = () => {
let printHtml = printRef.value.innerHTML
let oldHtml = window.document.body.innerHTML
window.document.body.innerHTML = printHtml
// 调用打印功能
window.print()
window.document.body.innerHTML = oldHtml
return false
}
- 使用iframe 这会丢掉我们写的css样式,但是style的没有丢。还可能存在兼容性问题
const print = () => {
let iframe = document.getElementById('print-iframe')
// 防止多次重建iframe
if (