html生成pdf--print-js,保存下载到本地,可选中复制,且解决font-size不生效问题

文章探讨了一种生成可选中复制的PDF的方法,通过利用浏览器的打印功能,避免了图片生成和样式丢失的问题。作者尝试了直接修改DOM、使用iframe以及print-js库,最终选择了print-js,解决了兼容性和样式问题。在使用print-js时,注意了因页面元素初始为隐藏导致的打印空白问题,并通过调整CSS属性解决了字体大小样式失效的难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

之前有需求,一键生成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 (
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DiuDiu_yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值