HTML 转 PDF
对于一些内容比较多的 HTML 大文件或者网页,直接进行打印或者存档不太容易。Foxit PDF SDK 提供 API 接口将在线网页或者本地 HTML 文件转换为 PDF 文件,比如发票,报告等,使其更容易打印或者存档。在 HTML 转 PDF 的过程中,Foxit PDF SDK 支持在基于 HTML 的组织结构的基础上创建和添加 PDF Tag。
对于 HTML 转 PDF 模块,其支持 HTML5、CSS3 和 JavaScript。
从 7.6 版本开始,Foxit PDF SDK 支持在 Linux 平台将 HTML 转化为 PDF。但是对于 Linux 平台的 HTML 转 PDF 引擎,libnss 必须是 3.22 版本的。
从 8.1 版本开始, Foxit PDF SDK 支持以文件流的形式提供 HTML2PDF 转换后生成的文件,如果您需要使用该功能,请联系 Foxit 支持团队或者销售团队以获取最新的 HTML 转 PDF 引擎文件包。
本节主要介绍如何配置运行 'html2pdf' demo 所需的环境。
系统需求
平台: Windows, Linux (x86 和 x64), Mac
开发语言: C, C++, Java, C#, Python, Objective-C
License Key: license key 中包含 'Conversion' 模块的权限
SDK 版本: Foxit PDF SDK (C++, Java, C#, Objective-C) 7.0 或更高版本; Foxit PDF SDK (C) 7.4 或更高版本; Foxit PDF SDK (Python) 8.3 或更高版本
HTML 转 PDF 引擎资源
请联系 Foxit 支持团队或者销售团队以获取 HTML 转 PDF 引擎文件包。
当获取到引擎文件包后,将其解压到所需目录 (比如,Windows 解压到 "htmltopdf/win", Linux 解压到 "htmltopdf/linux",Mac 解压到 "htmltopdf/mac")。
如何运行 html2pdf demo
Foxit PDF SDK 提供了一个 html2pdf demo 用来展示如何使用 Foxit PDF SDK 将 html 文件转换为 PDF 文件。该 demo 位于 \examples\simple_demo\html2pdf
文件夹下。
准备一个 HTML2PDF 引擎目录
在运行 html2pdf demo 之前,您需要先将引擎包解压到一个指定的目录(比如,Windows 解压到:"D:/htmltopdf/win/"),然后将引擎文件路径传递给 API com.foxit.sdk.addon.conversion.Convert.fromHTML
,以将 html 转换为 PDF 文件。
配置 demo
对于 html2pdf demo,您可以在 \examples\simple_demo\html2pdf\html2pdf.java
文件中配置 demo,或者您可以在命令行窗口中直接使用参数来对 demo 进行配置。以下将在 Windows 平台下,在 html2pdf.java
文件中配置 demo。对于 Linux 和 Mac 平台,其配置操作与 Windows 相同。
指定 html2pdf 引擎资源目录
在 "html2pdf.java" 文件中,如下所示,添加 "fxhtml2pdf.exe" 引擎文件的路径,用以将 html 文件转换为 PDF 文件。
(可选) 指定 cookies 文件路径
添加 cookies 文件路径,该文件是从您需要转换的 web 页面中导出的。比如,
运行 demo
运行 demo (不带参数)
定位到 \examples\simple_demo\html2pdf
,运行 RunDemo.bat
,然后控制台将默认打印以下内容:
运行 demo (带参数)
首先定位到 \examples\simple_demo\html2pdf
,运行 RunDemo.bat
。
然后,打开一个命令行窗口,导航到 \examples\simple_demo\html2pdf
,输入java -Djava.library.path=../../../lib -classpath.;../../../lib/fsdk.jar html2pdf --help
命令查看如何使用参数来运行 demo。
例如,将 "www.foxitsoftware.com" 网页转换为 PDF 文件,并且设置转换后的 PDF 页面的宽度为 900 points,高度为 300 points。
输出文档位于 \examples\simple_demo\output\_files\html2pdf
文件夹下。
参数描述
基本语法:
[//]: # (*html2pdf\_xxx <-html <The url or html path>> <-o <output pdf path>> <)
[//]: # (-engine <htmltopdf engine path>>[-w <page width>] [-h <page height>] [-ml <margin left>] [-mr <margin right>]*)
[//]: # ()
[//]: # (*[-mt <margin top>] [-mb <margin bottom>] [-r <page rotation degree>] [-mode <page mode>] [-scale <scaling mode>] [-link <whether to convert link>]*)
[//]: # ()
[//]: # (*[-tag <whether to generate tag>] [-bookmarks <whether to generate bookmarks>]*)
[//]: # ()
[//]: # (*[-print\_background <whether to print background>]*)
[//]: # ()
[//]: # (*[-optimize\_tag <whether to optimize tag tree>] [-media <media style>] [-encoding <HTML encoding format>] [-render\_images <Whether to render images>]*)
[//]: # ()
[//]: # (*[-remove\_underline\_for\_link <Whether to remove underline for link>]*)
[//]: # ()
[//]: # (*[-headerfooter <Whether to generate headerfooter>] [-headerfooter\_title <headerfooter title>] [-headerfooter\_url <headerfooter url>] [-bookmark\_root\_name <bookmark root name>] [-resize\_objects <Whether to enable the JavaScripts related resizing of the objects>]*)
[//]: # ()
[//]: # (*[-cookies <cookies file path>] [-timeout <timeout>][--help<Parameter usage>]*)
备注:
- <> 必选
- [ ] 可选
参数 | 描述 |
---|---|
--help | 参数用法的帮助信息。 |
-html | URL 或者 html 文件的路径。比如'-html <www.foxitsoftware.com'。> |
-o | 输出 PDF 文件的路径。 |
-engine | "fxhtml2pdf.exe" 引擎文件的路径。 |
-w | 输出 PDF 文件页面的宽度,单位是 points。 |
-h | 输出 PDF 文件页面的高度,单位是 points。 |
-r | 输出 PDF 文件页面的旋转度。 - 0 : 0 . - 1 : 90 度. - 2 : 180 度. - 3 : 270 度. |
-ml | 输出 PDF 文件页面的左边距。 |
-mr | 输出 PDF 文件页面的右边距。 |
-mt | 输出 PDF 文件页面的上边距。 |
-mb | 输出 PDF 文件页面的下边距。 |
-mode | 输出 PDF 文件的页面模式。 - 0 : 单页模式。 - 1 : 多页模式。 |
-scale | 页面缩放模式。 - 0 : 不需要缩放页面。 - 1 : 将 HTML 页面缩放到输出的 PDF 的页面大小。 - 2 : 将 输出的 PDF 页面放大到 HTML 的页面大小。 |
-link | 是否转换链接。 - 'yes' : 转换链接。 - 'no' : 不需要转换链接。 |
-tag | 是否生成 tag. - 'yes' : 生成 tag。 - 'no' : 不需要生成 tag。 |
-bookmarks | 是否生成书签。 - 'yes' : 生成书签。 - 'no' : 不需要生成书签。 |
-print_background | 是否打印背景。 - 'yes' : 打印背景。 - 'no' : 不需要打印背景。 |
-optimize_tag | 是否优化 tag 树。 - 'yes' : 优化 tag 树。 - 'no' : 不需要优化 tag 树。 |
-media | 媒体风格。 - 0 : 屏幕媒体风格。 - 1 : 印刷媒体风格。 |
-encoding | HTML 编码格式。 - 0 : 自动编码。 - 1-73 : 其它编码. |
-render_images | 是否渲染图片。 - 'yes' : 渲染图片。 - 'no' : 不需要渲染图片。 |
-remove_underline_for_link | 是否删除链接的下划线。 - 'yes' : 删除链接的下划线。 - 'no' : 不需要删除链接的下划线。 |
-headerfooter | 是否生成页眉页脚。 - 'yes' : 生成页眉页脚。 - 'no' : 不需要生成页眉页脚。 |
-headerfooter_title | 页眉页脚的标题信息。 |
-headerfooter_url | 页眉页脚的 url 信息。 |
-bookmark_root_name | 书签根名称。 |
-resize_objects | 是否在渲染过程中启用调整对象大小相关的 JavaScripts。 - 'yes' : 启用。 - 'no' : 不启用。 |
-cookies | cookies 文件路径,该文件是从您需要转换的 web 页面中导出的。 |
-timeout | 加载 web 页面的超时时间。 |
如何使用 Html2PDF API
import com.foxit.sdk.addon.conversion.HTML2PDFSettingData;
com.foxit.sdk.addon.conversion.HTML2PDFSettingData pdf\_setting\_data = new com.foxit.sdk.addon.conversion.HTML2PDFSettingData();
pdf\_setting\_data.setIs\_convert\_link(true);
pdf\_setting\_data.setIs\_generate\_tag(true);
pdf\_setting\_data.setTo\_generate\_bookmarks(true);
pdf\_setting\_data.setRotate\_degrees(0);
pdf\_setting\_data.setPage\_width(900);
pdf\_setting\_data.setPage\_height(640);
pdf\_setting\_data.setPage\_mode(HTML2PDFSettingData.e\_PageModeSinglePage);
pdf\_setting\_data.setScaling\_mode(HTML2PDFSettingData.e\_ScalingModeScale);
pdf\_setting\_data.setTo\_print\_background(true);
pdf\_setting\_data.setTo\_optimize\_tag\_tree(false);
pdf\_setting\_data.setMedia\_style(HTML2PDFSettingData.e\_MediaStyleScreen);
...
com.foxit.sdk.addon.conversion.Convert.fromHTML(url\_or\_html, engine\_path, cookies\_path, pdf\_setting\_data, output\_pdf\_path, timeout);
如何从 stream 中获取 HTML 数据并将其转换为 PDF 文件
- 定义一个继承自 FileReaderCallback 的 FileRead 类,用于从 stream 或内存中获取 html 数据。并定义一个继承自 FileWriterCallback 的 FileWriter 类,用于文件写入。关于 FileRead 和 FileWriter 类的实现,请参考
\examples\simple_demo\html2pdf
文件夹中的 html2pdf demo。 - 从 stream 中获取 html 数据并设置与源 html 相关的资源。
- 调用
com.foxit.sdk.addon.conversion.Convert.fromHTML
函数将其转换为 PDF 文件。
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.addon.conversion.HTML2PDFSettingData;
import com.foxit.sdk.common.fxcrt.FileReaderCallback;
import com.foxit.sdk.common.fxcrt.FileWriterCallback;
import com.foxit.sdk.addon.conversion.HTML2PDFRelatedResourceArray;
import com.foxit.sdk.addon.conversion.HTML2PDFRelatedResource;
com.foxit.sdk.addon.conversion.HTML2PDFSettingData pdf\_setting\_data=new com.foxit.sdk.addon.conversion.HTML2PDFSettingData();
pdf\_setting\_data.setPage\_height(650);
pdf\_setting\_data.setPage\_width(950);
pdf\_setting\_data.setIs\_to\_page\_scale(false);
pdf\_setting\_data.setPage\_margin(new RectF(18, 18, 18, 18));
pdf\_setting\_data.setIs\_convert\_link(true);
pdf\_setting\_data.setRotate\_degrees(0);
pdf\_setting\_data.setIs\_generate\_tag(true);
pdf\_setting\_data.setPage\_mode(HTML2PDFSettingData.e\_PageModeSinglePage);
pdf\_setting\_data.setScaling\_mode(HTML2PDFSettingData.e\_ScalingModeScale);
pdf\_setting\_data.setTo\_generate\_bookmarks(true);
pdf\_setting\_data.setEncoding\_format(0);
pdf\_setting\_data.setTo\_render\_images(true);
pdf\_setting\_data.setTo\_remove\_underline\_for\_link(false);
pdf\_setting\_data.setTo\_set\_headerfooter(false);
pdf\_setting\_data.setHeaderfooter\_title("");
pdf\_setting\_data.setHeaderfooter\_url("");
pdf\_setting\_data.setBookmark\_root\_name("abcde");
pdf\_setting\_data.setTo\_resize\_objects(true);
pdf\_setting\_data.setTo\_print\_background(false);
pdf\_setting\_data.setTo\_optimize\_tag\_tree(false);
pdf\_setting\_data.setMedia\_style(0);
pdf\_setting\_data.getTo\_load\_active\_content();
String output\_path = output\_directory + "html2pdf\_filestream\_result.pdf";
FoxitFileWriter filewrite = new FoxitFileWriter();
filewrite.LoadFile(output\_path);
// "htmlfile" is the path of the html file to be loaded. For example: "C:/aaa.html". The method of "FromHTML" will load this file as a stream.
String htmlfile = "";
FileRead filereader = new FileRead();
filereader.loadFile(htmlfile,false);
//"htmlfilepng" is the path of the png resource file to be loaded. For example: "C:/aaa.png". set "htmlfilepng" in the related\_resource\_file of HTML2PDFRelatedResource.
String htmlfilepng ="";
FileRead filereader1 = new FileRead();
filereader1.loadFile(htmlfilepng,false);
//"relativefilepath" is the resource file's relative path. For example: "./aaa.png".
String relativefilepath = "";
com.foxit.sdk.addon.conversion.HTML2PDFRelatedResourceArray html2PDFRelatedResourceArray = new com.foxit.sdk.addon.conversion.HTML2PDFRelatedResourceArray();
com.foxit.sdk.addon.conversion.HTML2PDFRelatedResource html2PDFRelatedResource = new com.foxit.sdk.addon.conversion.
HTML2PDFRelatedResource(filereader1,relativefilepath);
html2PDFRelatedResourceArray.add(html2PDFRelatedResource);
com.foxit.sdk.addon.conversion.Convert.fromHTML(filereader, html2PDFRelatedResourceArray, engine\_path, null,
pdf\_setting\_data, filewrite, 30);
System.out.println("Convert HTML to PDF successfully by filestream!");