Skip to content

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参数用法的帮助信息。
-htmlURL 或者 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' : 不启用。

-cookiescookies 文件路径,该文件是从您需要转换的 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 文件

  1. 定义一个继承自 FileReaderCallback 的 FileRead 类,用于从 stream 或内存中获取 html 数据。并定义一个继承自 FileWriterCallback 的 FileWriter 类,用于文件写入。关于 FileRead 和 FileWriter 类的实现,请参考 \examples\simple_demo\html2pdf 文件夹中的 html2pdf demo。
  2. 从 stream 中获取 html 数据并设置与源 html 相关的资源。
  3. 调用 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!");