从 html 模板动态生成 pdf 文件并在 java 中生成 table 内容
Generate pdf file dynamically from html template and produce table of contents in java
我们有一个用于设计目录模板的编辑器。它基本上是为了设计目的。首先,我们在编辑器中设计一个模板,并以该模板格式绑定我们的数据。然后我们从前端获取 HTML 格式的模板。从该模板,我需要绑定数据并生成包含 table 内容(索引)的 pdf 文件。
许多人建议使用 itext
库。但我的要求不是将 html 页面转换为 pdf。我必须根据用户动态生成的 html 模板转储所有产品数据。
任何人都可以建议如何实施吗?
有一些开源选项和一些付费选项。如果您可以使用 AGPL 许可下的产品,itext imho 会带来最好的结果。
如果您正在寻找开源/免费
另一个 Html 到 Pdf 转换器 ==> http://www.allcolor.org/YaHPConverter/
wkhtmltopdf ==> http://wkhtmltopdf.org/
PDF 框 ==> http://pdfbox.apache.org/
itext(AGPL(免费)/商业许可)http://itextpdf.com/pricing
如果您正在寻找付费(而且几乎总是更容易)
http://pdfcrowd.com/web-html-to-pdf-java/
http://www.aspose.com/docs/display/pdfjava/Convert+HTML+to+PDF+Format
关于目录
此答案由 itext 的创建者 Bruno Lowagie 提供。
http://support.itextpdf.com/node/113
有多种方法可以解决这个问题。
解决方案 1:您可以在第一遍中创建带有书签的 PDF,而不用担心 table 的内容。然后在第二遍中,使用生成的 PDF 基于书签创建 TOC,并使用 TOC 创建新的 PDF,然后是内容。
解决方案 2:您可以同时创建两个 PDF 文件,一个包含实际内容,一个包含目录。创建所有内容后,您可以连接两个文件:首先是目录,然后是实际内容。
解决方案3:您可以将目录的所有条目保留在内存中,将这些条目添加到文档的末尾,然后重新排列页面。
首先想到这三种方案(根据书中的例子);可能还有其他方法。
您需要考虑一个主要困难:页码如何?
如果您查看 Manning 的书(例如 "iText in Action"),您会看到 TOC 编号为 i、ii、iii、iv、v...,而实际内容编号为1, 2, 3, 4, 5,...
如果你想避免这种情况,如果你想从一开始就给第 1、2、3、4、5、6、7、... 页编号,创建 PDF 的解决方案 "in two passes" 最好,因为您可以等到第二次通过时添加页码(只有那时您才知道 TOC 中有多少页)。
同时检查链接
http://itextpdf.com/sandbox/merge/MergeWithToc
How to generate a Table of Contents "TOC" with iText?
我们有一个用于设计目录模板的编辑器。它基本上是为了设计目的。首先,我们在编辑器中设计一个模板,并以该模板格式绑定我们的数据。然后我们从前端获取 HTML 格式的模板。从该模板,我需要绑定数据并生成包含 table 内容(索引)的 pdf 文件。
许多人建议使用 itext
库。但我的要求不是将 html 页面转换为 pdf。我必须根据用户动态生成的 html 模板转储所有产品数据。
任何人都可以建议如何实施吗?
有一些开源选项和一些付费选项。如果您可以使用 AGPL 许可下的产品,itext imho 会带来最好的结果。
如果您正在寻找开源/免费
另一个 Html 到 Pdf 转换器 ==> http://www.allcolor.org/YaHPConverter/
wkhtmltopdf ==> http://wkhtmltopdf.org/
PDF 框 ==> http://pdfbox.apache.org/
itext(AGPL(免费)/商业许可)http://itextpdf.com/pricing
如果您正在寻找付费(而且几乎总是更容易)
http://pdfcrowd.com/web-html-to-pdf-java/
http://www.aspose.com/docs/display/pdfjava/Convert+HTML+to+PDF+Format
关于目录
此答案由 itext 的创建者 Bruno Lowagie 提供。
http://support.itextpdf.com/node/113
有多种方法可以解决这个问题。
解决方案 1:您可以在第一遍中创建带有书签的 PDF,而不用担心 table 的内容。然后在第二遍中,使用生成的 PDF 基于书签创建 TOC,并使用 TOC 创建新的 PDF,然后是内容。
解决方案 2:您可以同时创建两个 PDF 文件,一个包含实际内容,一个包含目录。创建所有内容后,您可以连接两个文件:首先是目录,然后是实际内容。
解决方案3:您可以将目录的所有条目保留在内存中,将这些条目添加到文档的末尾,然后重新排列页面。
首先想到这三种方案(根据书中的例子);可能还有其他方法。
您需要考虑一个主要困难:页码如何?
如果您查看 Manning 的书(例如 "iText in Action"),您会看到 TOC 编号为 i、ii、iii、iv、v...,而实际内容编号为1, 2, 3, 4, 5,...
如果你想避免这种情况,如果你想从一开始就给第 1、2、3、4、5、6、7、... 页编号,创建 PDF 的解决方案 "in two passes" 最好,因为您可以等到第二次通过时添加页码(只有那时您才知道 TOC 中有多少页)。
同时检查链接
http://itextpdf.com/sandbox/merge/MergeWithToc
How to generate a Table of Contents "TOC" with iText?