当您从 Google Docs 打印(使用“打印”链接,而不是文件/打印)时,您最终会打印格式良好的 PDF 文件,而不是依赖浏览器的打印引擎。Google Analytics 中的一些报告也是如此。. . PDF格式的打印报告很漂亮。他们是怎么做到的?我无法想象他们会使用 Adobe Acrobat 之类的工具来促进它,但也许他们会这样做。我不时在网上看到一些昂贵的 HTML 到 PDF 转换器,但从未厌倦过。有什么想法吗?
6 回答
如果您专门研究 Google 是如何做到的。如果您查看PDF 属性页面,他们使用 Prince 6.0(请参阅princexml.com)
还有很多其他的 PDF 生成器。我在使用PDFlib处理棘手的工作方面取得了巨大成功。
iTextSharp 和 iText 分别是用于 .NET 和 Java 的开源和免费 PDF 生成库。
我以前用它们来生成报告 PDF 并且对结果非常满意。
PrinceXML 的绝佳免费替代品:wkhtmltopdf 。有很多用于各种语言的包装库——但我只使用过 Ruby 的。然而,该产品本身与 PrinceXML 恕我直言。
我在pd4ml上取得了成功。它有一个标签库,因此您可以通过以下方式将任何现有的 HTML 转换为 PDF
<pd4ml:transform>
<!-- Your HTML is here -->
<c:import url="/page.html" />
</pd4ml:transform>
好吧,我怀疑它像生成 HTML 一样容易。. . 我的意思是,首先,PDF 不是人类可读的格式,也不是纯文本(如 SVG)。事实上,我会将 SVG 文件与 PDF 文件进行比较,因为两者都可以精确控制打印页面上的布局。但 SVG 的不同之处在于它是 XML(而且浏览器不完全支持它……仍在研究 SVG)。想想看,SVG 应该是我的下一个问题。
我知道 Google 不使用 .NET,而且我怀疑他们使用 Java,所以他们必须使用其他一些库来生成 PDF 文件。更重要的是,他们如何创建 PDF 而不必将所有内容重写为 PDF 而不是 HTML?我的意思是,当它们生成 HTML 视图而不是 PDF 视图时,它们之间必须有一些共享代码。想一想,也许 PDF 视图和 HTML 视图是完全分开的,它们只有两个视图,因此为什么 MVC 开发风格似乎是要走的路。
渲染 PDF 是一个困难而复杂的问题。然而生成它们,不是。简单地组成一些实体,并生成。它与为网页生成 HTML 与显示(渲染)它的问题域大致相同。