【问题标题】:Pure python solution to convert XHTML to PDF将XHTML转换为PDF的纯python解决方案
【发布时间】:2009-10-21 04:26:37
【问题描述】:

我正在使用纯 Python 解决方案(用于 GAE)将网页转换为 pdf。

我查看了 reportlab,但文档侧重于从头开始生成 pdf,而不是从 HTML 转换。

你有什么推荐的? - pisa?

编辑: 我的用例是我有一个 HTML 报告,我也想以 PDF 格式提供。我将对此报告结构进行更新,因此我不想维护单独的 PDF 版本,而是(希望)自动转换。
另外,因为我生成报告 HTML,我可以确保它是格式良好的 XHTML,以使 PDF 转换更容易。

【问题讨论】:

  • 不知道,但对于一个非常有趣的问题 +1

标签: python google-app-engine pdf


【解决方案1】:

Pisa 声称支持我想做的事:

pisa 是一个 html2pdf 转换器,使用 ReportLab 工具包、HTML5lib 和 pyPDF。它支持 HTML 5 和 CSS 2.1 (以及一些 CSS 3)。这是完全 用纯 Python 编写,所以它是 独立于平台。主要好处 使用 Web 的用户使用此工具 HTML 和 CSS 等技能能够 快速生成 PDF 模板 不学习新技术。 轻松集成到 Python 中 CherryPy、KID 等框架 模板,TurboGears,Django,Zope, Plone、Google AppEngine (GAE) 等

所以我会进一步调查

【讨论】:

  • 您是否成功地将 Pisa 集成到您的 Gae 项目中?
  • 这个人解释得比我好:blog.notdot.net/2010/04/…
  • 我让 pisa 在 gae 上工作,效果很好。但是,它不支持所有 CSS 标签。例如,我大量使用了位置、top、left 和 floats,所有这些都不受 pisa 支持:htmltopdf.org/doc/pisa-en.html(查看支持的 CSS)。除了这些限制之外,它还是一个很棒的图书馆。
【解决方案2】:

你考虑过pyPdf吗?我怀疑它是否具有您所需的功能丰富性,但是,它只是一个开始,并且是纯 Python 的。 PdfFileWriter 类将是生成 PDF 输出的类,不幸的是它需要 PageObject 实例并且不提供将它们组合在一起的真正方法,除了从现有的 PDF 文档中提取它们。不幸的是,我能找到的所有更丰富的 pdf 页面生成包似乎都依赖于 reportlab 或其他非纯 Python 库:-(。

【讨论】:

  • ReportLab 有哪些不是纯 Python 的? AFAIK C 扩展是可选的,仅用于性能加速。
  • @Vinay,根据reportlab.com/docs/reportlab-userguide.pdf,在 Unix-y 系统上,您还需要 freetype2、PIL 和 &c ——您是说文档是错误的,而您实际上并不需要 那些部分(reportlab 神奇地做了字体、图像和 c 无论如何都没有它们)...?
  • 我还听说 reportlab 是纯 Python ...... pyPdf 似乎对我的需要来说太低了,因为我不想从头开始创建 PDF。
  • 显然 reportlab 有可选的 c 模块来运行得更快。并且PIL可以用GAE:code.google.com/appengine/docs/python/images/installingPIL.html
  • @Richard,你对 GAE 上的 PIL 的完全误解非常普遍,让我再次尝试澄清一下:在实际服务中使用 GAE,你会得到一个小于 1/ 的显微图像处理 API 100 PIL 功能; GAE SDK 可以模拟基于本地安装的 PIL 的微型 API,这不会意味着当您在 Google 的服务器上运行 GAE 应用程序时您将获得 PIL。而且对我来说,freetype2 似乎不是“运行更快的 C 模块的可选”:当 freetype2 不存在时,你将如何处理字体,不管你是快还是慢?!
【解决方案3】:

您需要的是一个纯 Python HTML 渲染器,至少可以说这是一项艰巨的任务(像 webkit 这样的“真正的”渲染器是数千小时工作的产物)。据我所知,没有。

我建议不要寻找 HTML 到 PDF 转换器,而是以易于转换为两者的格式构建您的报告 - 例如,您可以将其构建为 DOM(一组链接对象),并且为 HTML 和 PDF 输出编写转换器。这是一个比将 HTML 转换为 PDF 更有限的问题,因此更容易实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-20
    • 2010-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多