【问题标题】:create pdf from python从python创建pdf
【发布时间】:2014-01-09 15:31:06
【问题描述】:

我希望从 Python 应用程序生成 PDF。 它们开始时相对简单,但有些可能会变得更复杂(基本上是像文件一样的字母,但稍后会包括水印)

我之前在原始 postscript 中工作过,如果我可以生成正确的标头等并在其末尾生成文件,我想避免使用可能无法完全满足我要求的复杂库。有些似乎有 bitrot 并且不再受支持(pypdf 和 pypdf2),尤其是当我知道 PDF/Postscript 可以完全满足我的需要时。 PDF 内容真的没有那么复杂。

只需将适当的文本标题写入文件和我的后记代码,我就可以很好地生成 EPS(封装后记)。但是检查 PDF 有一个 lil 二进制标题,我不确定如何生成。

我可以生成 EPS 并将其转换。我对此并不太满意,因为生产环境是 Windows 2008 服务器(Dev 是 Ubuntu 12.04)并且制作和转换它看起来很傻。

以前有人做过吗? 我不想使用图书馆是不是很迂腐?

【问题讨论】:

  • 我确定您可以找到 PDF 文档的规范……但从头开始将是一场噩梦……您为什么反对使用库? (粗鲁的人以前做过……他们创建了一个库来做这件事:P)
  • 异议部分是依赖地狱问题,具体取决于库。在 Ubuntu 12.04 上开发,但需要在 Windows 上进行测试,以便在 Win server 2008 上进行部署和生产。例如,我正在尝试 PYX,它大量使用 LaTex 库,只需要我获取 LaTex 和 Type1 字体,它有在我的机器上拥有一长串依赖项,总计额外增加 200 兆。感觉很OTT,但我可能误解了所需的复杂性。 (感谢您的快速响应)
  • 我认为reportlab只适用于easy_install(或者pip)......但这既不是这里也不是那里......只是公平的警告,从头开始这样做将是它自己特殊的地狱(尽管可能是一次有趣的学习经历)
  • 我之前对报告实验室的简要介绍是它非常复杂,但我会再试一次。
  • 查看Introduction to PDF 获取简单的“Hello World”PDF。从 Python 手动生成它与使用任何其他语言没有什么不同,尽管您可能希望使用通用模板语言(如 Jinja2Mako)让您的生活更轻松。

标签: python pdf eps


【解决方案1】:

我建议您使用库。我花了很多时间创建pdfme 并在此过程中学到了很多东西,但这不是你会为单个项目做的事情。如果您想使用我的库,请查看文档here

【讨论】:

    【解决方案2】:

    borrowed from ask.yahoo

    如果 PDF 文件是 1.1 版类型的 PDF 文件,则它以“%PDF-1.1”开头。当 PDF 文件中没有存储二进制数据对象时,您可以正常阅读它们,如果您不需要在其中存储像 Paint 位图这样的二进制对象,您甚至可以使用记事本制作一个。

    但是在看到“%PDF-1.1”之后,您会忽略其后的内容(Adobe Reader 也会这样做),并直接转到文件末尾有一行写着“%%EOF”的地方。这始终是文件中的最后一件事;如果在那里,您知道文件中该位置之前的几个字符是单词“startxref”,后跟一个数字。这个数字告诉阅读器程序在文件中的何处查找描述文件结构的项目列表的开始。列表中的这些项目可以是页面对象、字典对象或流对象(如位图的二进制数据),每个项目都有“obj”和“endobj”标记其描述的开始和结束位置。

    对于相当简单的 PDF 文件,您可以像使用记事本一样键入文本,以制作 Adob​​e Reader 和其他 PDF 查看器程序可以正确读取和显示的工作 PDF 文件。

    做这样的事情是一个挑战,即使对于一个简单的文件也是如此,而且你真的必须知道你在做什么才能将任何二进制数据放入它应该去的文件中;但是对于字符数据,您只需输入即可。PDF 中使用的所有命令都是您可以输入的字符串形式。最困难的部分是计算那些给出文件偏移量的数字文件中的项目(例如“startxref”后面的数字)。

    如果文件格式的布局方式引起您的兴趣,请继续阅读 PDF 手册,它讲述了整个故事。 http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf

    但实际上你应该只使用一个库

    感谢@LukasGraf 提供此链接http://www.gnupdf.org/Introduction_to_PDF,它展示了如何从头开始创建一个简单的hello world pdf

    【讨论】:

    • 如果您从其他地方借用了一些文本,您应该提供指向源的链接以及简单的出处。
    • 你去吧 :) 你是正确的粗...
    • 我将把这个交给 Joran,因为他让我在尝试手动操作时受益匪浅。还有一个指向我在 PDF 上还没有找到的优秀文档的链接。这表示我将尝试投降并使用其中一个可用的库。当我与他们战斗时,可能会出现很多咒骂。但是,如果我最终使用 Report Lab,我会回来并在此处注明。非常感谢!
    • 谢谢。 “introduction-to-pdf”链接似乎不再起作用,但我猜this example by Felix Schütt 类似。
    【解决方案3】:

    只要您使用 Python 2.7,Reportlab 似乎是目前最好的解决方案。它功能齐全,使用起来可能有点复杂,具体取决于您正在使用它做什么,但是由于您似乎通常熟悉 PDF 内部结构,因此希望学习曲线不会太陡峭。

    【讨论】:

    • 他明确表示他不想使用图书馆......但是如果做的不仅仅是简单的文本,那么报告实验室是最好的选择
    • 我会尝试 PYX 和 Report lab,如果我最终使用 report lab,我会在此处注明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多