几百个表单的页面打印pdf,如何做到不截断文字?有无付费插件?或者比较好的实现方案?
打印时的分页位置,可以由 css 属性 page-break-after 来控制,具体用法可以百度一下。
注意给每一页留个一两行的余量,以避免自动分页。余量的意思,就好比说它会在第120行分页导致该行被切断,那么你可能要在第 118 行的后面就给它加分页,可以用 JavaScript 来计算。
13 回答13k 阅读
7 回答2.2k 阅读
9 回答1.7k 阅读✓ 已解决
6 回答1.6k 阅读
3 回答1.3k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
实现技术:表单组件化本地获取dom,第三方工具wkhtmltopdf(浏览器打印也是将页面转成pdf),生成pdf打印
问题:
第三方工具wkhtmltopdf较为古老(功能齐全),不支持现代前端框架(vue,react),不支持es6语法,不支持css3中的部分语法。
解决:思路是组成一个静态的html文件,绕过语法和框架支持问题。前框提供一个html模版里面包含对打印特殊处理的css,在页面完成渲染后获取需要打印的dom传给后端。由后端组成新的静态html文件,再通过wkhtmltopdf转成pdf。
新问题:
都昌的表单样式文件并非行内引入的方式,直接获取dom,会丢失样式。
解决:通过都昌提供的方法GetContentHtml,获取完整的带样式的html,替换里面的dom为需要打印的dom,组成新的html,这样dom中会动态插入style,确保dom中包含样式。
有his病历时转pdf缓慢。
解决:因为his病历中存在的一些图片,转pdf为同步加载,导致异步资源加载完毕才会执行。资源加载完成把所有图片转为base64形式,这样wkhtmltopdf只需要解析图片,不用再次加载,大幅提升速度。
所有表单控件丢失值(下拉框文本域输入框)
解决:由表单解决,将所有表单控件中的原生input标签增加value属性。
修改一些转dpf过程中的样式问题。
解决:对有问题的样式专门解决。
部分表格转pdf出现丢失边框的问题。
解决:将出现问题的表格全部用原生的table重写提高兼容性和性能。
pdf生成过后,跳转打开被浏览器阻止。
解决:抛弃window.open的打开方式,可能被浏览器认为是垃圾信息,生成a标签手动触发点击事件,绕过浏览器检测。