掌桥专利:专业的专利平台
掌桥专利
首页

一种动态生成PDF的方法、装置、设备及可读存储介质

文献发布时间:2023-06-19 11:02:01


一种动态生成PDF的方法、装置、设备及可读存储介质

技术领域

本发明涉及计算机技术领域,尤其涉及一种动态生成PDF的方法、装置、 设备及可读存储介质。

背景技术

PDF(Portable Document Format,可携带文档格式),是由Adobe Systems 用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格 式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证 精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色 以及图象。通常我们把文件制作成pdf文件有几种途径:一:通过pdf制作工具 制作如Adobe、PDF-XChange、AbleWord等二:通过浏览器直接打印另存为pdf。

在一些情况下,在应用系统中我们希望把网页直接转成pdf,又能保持页面 的完整不失真,下载过程尽量文件小,或者通过程序去生成pdf,通过以上途径 显然是一件费力不讨好的事情。

为此,目前将网页转成PDF还可通过如下方式实现:

一:jsPDF:整个过程在客户端执行(不需要服务器参与),调用简单

二:iText:功能基本可以实现,比较灵活,生成pdf质量较高

三:Wkhtmltopdf:调用方式简单(只需执行一行脚本),生成pdf质量较高

以上几种解决方案基本能满足业务系统需求,但仍然存在一些不足:

1、通过jsPDF方式生成PDF的原理是利用html2canvas遍历页面中的dom 节点,渲染成canvas image,再用jsPDF把canvas image转化为pdf,最后转化 的pdf的内容都是图片形式,类似于把整个网页截图、切割,再一页一页拼接成 一个完整的pdf。该方式pdf为图片形式,生成的pdf质量不高,失真比较严重, 不支持链接;

2、iText方式对html标签严格,少一个结束标签就会报错,后端实现复杂, 服务器需要安装字体,图片渲染比较复杂;

3、wkhtmltopdf是一个可以把html转为pdf的插件,有windows、linux等 平台的版本,最大的特点就是使用简单,语言无关性。wkhtmltopdf方式服务器 需要安装wkhtmltopdf环境,根据网址生成pdf,对于有权限控制的页面需要在 拦截器进行处理,且生成文件占用空间较大,在浏览器端下载生成文件占用网 络资源大。

发明内容

有鉴于此,本发明实施例的目的在于提出一种动态生成PDF的方法、装置、 设备及可读存储介质,以解决上述问题。

本发明实施例提供了一种动态生成PDF的方法,其包括:

获取目标页面及其访问路径;

通过执行PhantomJS以及预置的目标页面的访问路径,生成html文件,并 将所述html文件保存在服务器的指定目录下;

将所述html文件的文件路径传递给wkhtmltopdf;

经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文件生成参数, 生成PDF文件。

优选地,在经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文 件生成参数,生成PDF文件之后,还包括:

使用FileInputStream文件字节输入流,读取所述PDF文件,对PDF文件的 文件数据以字节的形式进行读取操作,从而将PDF文件转成byte字节流,使用 文件压缩流ZipOutputStream进行压缩处理;

使用输出流并设置压缩包自动解压、将文件写到客户端浏览器,以供用户 下载后自动解压。

优选地,还包括:

对客户端的下载权限进行认证。

优选地,在获取目标页面及其访问路径之前,还包括:

在服务器上安装PhantomJS以及wkhtmltopdf。

优选地,在通过执行PhantomJS以及预置的目标页面的访问路径,生成html 文件,并将所述html文件保存在服务器的指定目录下之前,还包括:

获取设置参数;其中,所述设置参数包括wkhtmltopdf路径、PhantomJS路 径、保存文件地址以及文件生成参数。

本发明实施例还提供了一种动态生成PDF的装置,其包括:

获取单元,用于获取目标页面及其访问路径;

Html文件生成单元,用于通过执行PhantomJS以及预置的目标页面的访问 路径,生成html文件,并将所述html文件保存在服务器的指定目录下;

传递单元,用于将所述html文件的文件路径传递给wkhtmltopdf;

PDF文件生成单元,用于经由wkhtmltopdf、所述文件路径、预置的文件保 存地址以及文件生成参数,生成PDF文件。

优选地,还包括:

字节处理单元,用于使用FileInputStream文件字节输入流,读取所述PDF 文件,对PDF文件的文件数据以字节的形式进行读取操作,从而将PDF文件转 成byte字节流,使用文件压缩流ZipOutputStream进行压缩处理;

输出单元,用于使用输出流并设置压缩包自动解压、将文件写到客户端浏 览器,以供用户下载后自动解压。

优选地,还包括:

权限认证单元,用于对客户端的下载权限进行认证。

本发明实施例还提供了一种动态生成PDF的设备,其包括存储器以及处理 器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行, 以实现如上述的动态生成PDF的方法。

本发明实施例还提供了一种计算机可读存储介质,其存储有计算机程序, 所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实 现如上述的动态生成PDF的方法。

附图说明

图1是本发明第一实施例提供了一种动态生成PDF的方法的流程示意图。

图2是本发明第二实施例提供了一种动态生成PDF的装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清 楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是 全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造 性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

参阅图1,本发明第一实施例提供了一种动态生成PDF的方法,其可由动 态生成PDF的设备(以下简称设备)来执行,特别的,由所述设备内的一个或 者多个处理器来执行,以实现如下步骤:

S101,获取目标页面及其访问路径。

在本实施例中,所述设备可为服务器,其内可安装有相应的软件或者插件 或者应用等计算机程序,并通过执行这些计算机程序来实现本实施例的动态生 成PDF的方法。

在本实施例中,具体地,这些计算机程序可包括wkhtmltopdf以及PhantomJS。 其中,PhantomJS是一个无界面的、可脚本编程的WebKit浏览器引擎,其快速, 原生支持各种Web标准:DOM处理,CSS选择器,JSON,Canvas,和SVG, 且提供Javascript API接口,可以通过编写JS程序直接与webkit内核交互。 PhantomJS无需浏览器的Web测试、网页截屏、页面访问自动化。

在本实施例中,wkhtmltopdf是开源的(LGPLv3)命令行工具来渲染HTML 到使用QtWebKit渲染引擎PDF和各种图像格式。它们完全headless运行,不 需要显示或显示服务。

wkhtmltopdf的使用命令如下:

wkhtmltopdf{http://网页地址(或者html文件地址)}{保存文件地址}。

在本实施例中,当用户需要下载当前页面,并将其转换为PDF文件时,其 可发出下载指令来选择待下载的目标页面。服务器在接收到用户的下载指令后, 判断用户是否有下载的权限。若无,则拒绝用户下载。若有,则执行后续的流 程。

S102,通过执行PhantomJS以及预置的目标页面的访问路径,生成html文 件,并将所述html文件保存在服务器的指定目录下。

S103,将所述html文件的文件路径传递给wkhtmltopdf。

S104,经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文件生 成参数,生成PDF文件。

在本实施例中,为了生成PDF文件,服务器首先运行 Runtime.getRuntime().exec(cmd)以进行参数的设置,包括设置wkhtmltopdf路 径、PhantomJS路径、保存文件地址以及文件生成参数等。

此后,所述服务器执行phantomjs以及访问路径,并将目标页面转换成html 文件保存在的指定目录下。

接着,在执行完成phantomjs后,服务器将生成的html文件的文件路径传 递给wkhtmltopdf。

最后,服务器通过执行wkhtmltopdf{http://网页地址(或者html文件的文件 路径)}{保存文件地址}{文件生成参数}将html文件转换生成PDF文件。

在本实施例中,在生成PDF文件后,服务器还可以使用FileInputStream文 件字节输入流,读取所述PDF文件,对PDF文件的文件数据以字节的形式进行 读取操作,从而将PDF文件转成byte字节流,使用文件压缩流ZipOutputStream 进行压缩处理,再使用输出流并设置压缩包自动解压、将文件写到客户端浏览 器,以供用户下载后自动解压生成解压的PDF文件。

综上所述,本实施例通过PhantomJs和wkhtmltopdf相结合,解决 wkhtmltopdf生成文件较慢和文件过大问题,PhantomJs负责访问目标页面,并 截图,生成文件保存在指定目录,并把生成的文件的访问路径传给 wkhtmltopdf以最终生成PDF文件。服务器接收到生成的PDF的路径,读取PDF 文件并输出到浏览器,在浏览器下载。本实施例具有如下优点:

1、直接访问html动态生成PDF文件,复杂的网页也能高质量输出。

2、用户可指定网页地址直接下载,也可自定义制作html网页文件,适于各 种使用场景。

3、可通过权限认证控制文件是否可下载。

4、生成的PDF文件自动压缩减少下载占用过多网络资源。

请参阅图2,本发明第二实施例还提供了一种动态生成PDF的装置,其包 括:

获取单元210,用于获取目标页面及其访问路径;

html文件生成单元220,用于通过执行PhantomJS以及预置的目标页面的访 问路径,生成html文件,并将所述html文件保存在服务器的指定目录下;

传递单元230,用于将所述html文件的文件路径传递给wkhtmltopdf;

PDF文件生成单元240,用于经由wkhtmltopdf、所述文件路径、预置的文 件保存地址以及文件生成参数,生成PDF文件。

优选地,还包括:

字节处理单元,用于使用FileInputStream文件字节输入流,读取所述PDF 文件,对PDF文件的文件数据以字节的形式进行读取操作,从而将PDF文件转 成byte字节流,使用文件压缩流ZipOutputStream进行压缩处理;

输出单元,用于使用输出流并设置压缩包自动解压、将文件写到客户端浏 览器,以供用户下载后自动解压。

优选地,还包括:

权限认证单元,用于对客户端的下载权限进行认证。

本发明第三实施例还提供了一种动态生成PDF的设备,其包括存储器以及 处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器 执行,以实现如上述的动态生成PDF的方法。

本发明第四实施例还提供了一种计算机可读存储介质,其存储有计算机程 序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行, 以实现如上述的动态生成PDF的方法。

需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分 离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件 可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多 个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实 施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关 系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。 本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技 术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这 些改进和润饰也视为本发明的保护范围。

相关技术
  • 一种动态生成PDF的方法、装置、设备及可读存储介质
  • 页面在线动态生成方法、装置、电子设备和可读存储介质
技术分类

06120112774120