CN112818177A - 一种动态生成pdf的方法、装置、设备及可读存储介质 - Google Patents
一种动态生成pdf的方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN112818177A CN112818177A CN202011641492.4A CN202011641492A CN112818177A CN 112818177 A CN112818177 A CN 112818177A CN 202011641492 A CN202011641492 A CN 202011641492A CN 112818177 A CN112818177 A CN 112818177A
- Authority
- CN
- China
- Prior art keywords
- file
- generating
- wkhtmltopdf
- path
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 34
- 238000003860 storage Methods 0.000 title claims abstract description 18
- 238000004590 computer program Methods 0.000 claims description 15
- 230000006835 compression Effects 0.000 claims description 12
- 238000007906 compression Methods 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 5
- 238000012546 transfer Methods 0.000 claims description 5
- 238000004519 manufacturing process Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000007639 printing Methods 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 238000013515 script Methods 0.000 description 2
- 239000003086 colorant Substances 0.000 description 1
- 238000005520 cutting process Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/84—Mapping; Conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明公开了一种动态生成PDF的方法、装置、设备及可读存储介质,方法包括:获取目标页面及其访问路径;通过执行PhantomJS以及预置的目标页面的访问路径,生成html文件,并将所述html文件保存在服务器的指定目录下;将所述html文件的文件路径传递给wkhtmltopdf;经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文件生成参数,生成PDF文件。本实施例通过PhantomJs和wkhtmltopdf相结合,解决wkhtmltopdf生成文件较慢和文件过大问题,本发明直接访问html动态生成PDF文件,使得复杂的网页也能高质量输出。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种动态生成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的方法。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分 离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件 可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多 个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实 施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关 系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。 本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技 术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这 些改进和润饰也视为本发明的保护范围。
Claims (10)
1.一种动态生成PDF的方法,其特征在于,包括:
获取目标页面及其访问路径;
通过执行PhantomJS以及预置的目标页面的访问路径,生成html文件,并将所述html文件保存在服务器的指定目录下;
将所述html文件的文件路径传递给wkhtmltopdf;
经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文件生成参数,生成PDF文件。
2.根据权利要求1所述的动态生成PDF的方法,其特征在于,在经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文件生成参数,生成PDF文件之后,还包括:
使用FileInputStream文件字节输入流,读取所述PDF文件,对PDF文件的文件数据以字节的形式进行读取操作,从而将PDF文件转成byte字节流,使用文件压缩流ZipOutputStream进行压缩处理;
使用输出流并设置压缩包自动解压、将文件写到客户端浏览器,以供用户下载后自动解压。
3.根据权利要求1所述的动态生成PDF的方法,其特征在于,还包括:
对客户端的下载权限进行认证。
4.根据权利要求1所述的动态生成PDF的方法,其特征在于,在获取目标页面及其访问路径之前,还包括:
在服务器上安装PhantomJS以及wkhtmltopdf。
5.根据权利要求1所述的动态生成PDF的方法,其特征在于,在通过执行PhantomJS以及预置的目标页面的访问路径,生成html文件,并将所述html文件保存在服务器的指定目录下之前,还包括:
获取设置参数;其中,所述设置参数包括wkhtmltopdf路径、PhantomJS路径、保存文件地址以及文件生成参数。
6.一种动态生成PDF的装置,其特征在于,包括:
获取单元,用于获取目标页面及其访问路径;
Html文件生成单元,用于通过执行PhantomJS以及预置的目标页面的访问路径,生成html文件,并将所述html文件保存在服务器的指定目录下;
传递单元,用于将所述html文件的文件路径传递给wkhtmltopdf;
PDF文件生成单元,用于经由wkhtmltopdf、所述文件路径、预置的文件保存地址以及文件生成参数,生成PDF文件。
7.根据权利要求6所述的动态生成PDF的装置,其特征在于,还包括:
字节处理单元,用于使用FileInputStream文件字节输入流,读取所述PDF文件,对PDF文件的文件数据以字节的形式进行读取操作,从而将PDF文件转成byte字节流,使用文件压缩流ZipOutputStream进行压缩处理;
输出单元,用于使用输出流并设置压缩包自动解压、将文件写到客户端浏览器,以供用户下载后自动解压。
8.根据权利要求1所述的动态生成PDF的装置,其特征在于,还包括:
权限认证单元,用于对客户端的下载权限进行认证。
9.一种动态生成PDF的设备,其特征在于,包括存储器以及处理器,所述存储器内存储有计算机程序,所述计算机程序能够被所述处理器执行,以实现如权利要求1至5任意一项所述的动态生成PDF的方法。
10.一种计算机可读存储介质,其特征在于,存储有计算机程序,所述计算机程序能够被所述计算机可读存储介质所在设备的处理器执行,以实现如权利要求1至5任意一项所述的动态生成PDF的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011641492.4A CN112818177A (zh) | 2020-12-31 | 2020-12-31 | 一种动态生成pdf的方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011641492.4A CN112818177A (zh) | 2020-12-31 | 2020-12-31 | 一种动态生成pdf的方法、装置、设备及可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112818177A true CN112818177A (zh) | 2021-05-18 |
Family
ID=75858113
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011641492.4A Pending CN112818177A (zh) | 2020-12-31 | 2020-12-31 | 一种动态生成pdf的方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112818177A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150149371A1 (en) * | 2013-11-27 | 2015-05-28 | Red Ball Express, LLC | System And Method For Generating And Formatting Formally Correct Case Documents From Rendered Semantic Content |
CN105302550A (zh) * | 2015-10-12 | 2016-02-03 | 江苏中威科技软件系统有限公司 | 将页面转为版式数据流文件的方法及系统 |
CN107967412A (zh) * | 2017-11-27 | 2018-04-27 | 武汉武钢众鹏信息系统有限公司 | 一种控制pdf文件受限访问的方法 |
CN109710902A (zh) * | 2018-08-17 | 2019-05-03 | 深圳壹账通智能科技有限公司 | Pdf文档的生成方法、装置、设备及计算机可读存储介质 |
-
2020
- 2020-12-31 CN CN202011641492.4A patent/CN112818177A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150149371A1 (en) * | 2013-11-27 | 2015-05-28 | Red Ball Express, LLC | System And Method For Generating And Formatting Formally Correct Case Documents From Rendered Semantic Content |
CN105302550A (zh) * | 2015-10-12 | 2016-02-03 | 江苏中威科技软件系统有限公司 | 将页面转为版式数据流文件的方法及系统 |
CN107967412A (zh) * | 2017-11-27 | 2018-04-27 | 武汉武钢众鹏信息系统有限公司 | 一种控制pdf文件受限访问的方法 |
CN109710902A (zh) * | 2018-08-17 | 2019-05-03 | 深圳壹账通智能科技有限公司 | Pdf文档的生成方法、装置、设备及计算机可读存储介质 |
Non-Patent Citations (3)
Title |
---|
NEJIMON: "html2pdf", 《GITHUB》 * |
STORM_FURY: "利用ZipOutputStream和ZipInputStream实现文件的压缩和解压缩", 《CSDN》 * |
李晓波, 地质出版社 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108733738B (zh) | 一种页面加载方法、系统、服务器及终端 | |
US8549395B2 (en) | Method and system for transforming an integrated webpage | |
US8682964B1 (en) | Progressively loading network content | |
CN109542427B (zh) | 一种系统定制方法、装置及电子设备和存储介质 | |
WO2020048189A1 (zh) | 图片生成 | |
EP4198773A1 (en) | Image processing method and apparatus, and computer readable storage medium | |
CN111294395A (zh) | 一种终端页面传输方法、装置、介质和电子设备 | |
CN103823841A (zh) | 提高移动终端客户端浏览速度的方法及其装置 | |
CN112799663A (zh) | 页面显示方法、装置、计算机可读存储介质及电子设备 | |
CN110727429A (zh) | 一种前端页面的生成方法、装置及设备 | |
CN111737614B (zh) | 页面显示方法、装置、电子设备和存储介质 | |
CN111431767A (zh) | 多浏览器资源同步方法、装置、计算机设备和存储介质 | |
CN117093386B (zh) | 页面截图方法、装置、计算机设备和存储介质 | |
CN112632425B (zh) | 一种离线资源文件的生成方法、装置、设备及存储介质 | |
CN112307385A (zh) | 网页数据加载和处理方法、装置、电子设备及存储介质 | |
CN114756228A (zh) | 页面处理方法、装置、设备及存储介质 | |
CN116578795A (zh) | 网页页面的生成方法及装置、存储介质、电子设备 | |
CN113050921A (zh) | 一种网页转换方法、装置、存储介质和计算机设备 | |
CN112818177A (zh) | 一种动态生成pdf的方法、装置、设备及可读存储介质 | |
CN115878226A (zh) | 一种h5离线包加载方法及装置 | |
CN113590564B (zh) | 数据存储方法、装置、电子设备及存储介质 | |
CN112199112B (zh) | 自动配置模拟服务的方法、装置、终端设备及存储介质 | |
CN114780888A (zh) | 网页图片生成方法、系统、电子设备及存储介质 | |
CN113626392A (zh) | 文档数据更新的方法和装置、电子设备和存储介质 | |
CN113625979B (zh) | 一种图片自适应显示方法、装置、系统及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210518 |