当前位置: 首页 > 科技观察

前端PDF配置?CMS+PDF

时间:2023-03-15 15:31:23 科技观察

大部分生成PDF的需求都是在服务端实现的,那么前端能不能生成PDF呢?这篇文章的目的:记录一个新的前端PDF生成技术,记录一个CMS可配置的PDF解决方案猜测PDF在前端市场是一个普遍的需求,肯定有一些现成的技术方案。一种是基于服务器的实现,另一种是基于客户端的实现。相对于服务端,iText、wkhtmltopdf、prince都是后端生成pdf的工具。可惜这三个都没有nodeapi。与客户端相比,最常见的是Html转换方案。比如JSPDF技术。这个方案的逻辑是:将DOM树转为canvas对象,可以使用html2canvas将canvas转为图片,可以使用canvas.toDataURL将图片转为PDF,使用jsPDF完成该方案的缺点:制作的PDF模糊,质量不高,浏览器兼容,css样式支持不够。比如阴影分页效果不理想,会出现断层、缺失等问题。生成一个canvas,所以对于一个特别长的报表,当DOM没有加载,你点击下载的时候,会导致报表生成问题。另一种解决方案是依赖浏览器自带的打印window.print。本方案的重点是CSS样式控制。如果要实现改变页面大小、页边距、设置页眉页脚等效果,可能还需要Prince(应用程序,需要安装)。最后说一下pdfmake技术。纯js技术实现PDF生成,并提供服务端生成和客户端生成方案,可以说是非常方便了。还提供动态演示文档,可以自由拼接内容。我被这个页面“征服”了。可以自定义页眉、页脚自定义、封面自定义、水印设置、PDF加密等。而且使用起来非常方便只需要两个js,一个是pdfmake.js,一个是字体文件vfs_fonts.js。同样,它的缺点也特别明显。文本元素没有内边距,样式也有限,不如html灵活。与其他技术相比,它对JS程序员非常友好。更重要的是,它已经维护了3年。基本上每个月都有更新。CMS解决方案猜测大家可以百度一下自己对cms的理解,但是对于我来说,cms就是配置。之前写过一个关于forms的CMS技术方案,比较成熟。解决产品配置和app动态显示问题。缺点是调动了全身心,一直来不及更新和填写新的规则。关于CMS-PDF的猜想也是为了解决PDF模板定制的问题。通常,一个团队开发一个pdf模板可能需要一个月的时间。CMSPDF要做的是缩短开发时间,提高开发效率,提供可配置的解决方案。实现这个方案,首页考虑的是我们使用的方法和我们想要达到的效果。通俗地说,一组数据代表一个模板,而这组数据的生成取决于我们的配置(点点滴滴)。那么我们要考虑的问题就很明确了:分析出需要的pdf的样式,解析出模块类型,建立模板与界面数据的关系(桥梁),建立模板绑定关系。pdfmake提供了一些不错的API,方便我们同时设计模块,同时查看效果。比如我们想要左边的配置,右边的预览。需要注意的一点是pdfmake默认是不支持中文的,需要自己去寻找pdf报告需要的字体,还有一些字体的属性,比如粗体、斜体等,也需要字体支持。这个方案的难点在于模块类型的设计,需要建立页面展示数据结构和pdfmake代码规则数据结构之间的联系。对于模块类型,使用pdfmake即可,只需要在上面封装一层即可。比较复杂的是表格的样式设计,比如你怎么配置表格每条边的样式,和服务器返回的数据建立关系。所以处理微妙的风格是比较困难的。这个计划还没有落地,但不失为一个很好的实践计划。如果你对款式没有特别高的要求,可以试试。