2013-12-20 79 views
3

我期待从Python应用程序生成PDF。 他们开始相对简单,但有些可能会变得更复杂(基本上像字母文件,但将包括水印,例如以后)从python创建PDF

我曾在原始postscript之前,并提供我可以生成正确的头文件等文件在最后它我想避免使用复杂的库,可能不完全是我想要的。有些似乎已经得到了唾液,不再被支持(pypdf和pypdf2)。特别是当我知道PDF/Postscript可以完成我所需要的功能时。 PDF内容确实不那么复杂。

我可以通过将适当的文本标题写入文件和我的postscript代码来生成EPS(封装后记)。但检查PDF的那里是一个lil二进制标题,我不知道如何生成。

我可以生成EPS并将其转换。由于生产环境是Windows 2008服务器(Dev是Ubuntu 12.04)并且制作和转换它看起来非常愚蠢,我对此并不满意。

有没有人做过这个? 我是否因为不想使用图书馆而迂腐?

+0

我确信你创建一个简单的Hello World PDF可以找到PDF文档的规范......但它将成为一场恶梦,从头开始......为什么你反对使用图书馆? (粗糙的某人在之前完成了它们......他们创建了一个库来执行此操作:P) –

+0

异议部分依赖于地狱问题,这取决于图书馆。在Ubuntu 12.04上进行开发,但需要迁移到Windows上进行测试,以便在Win Server 2008上进行部署和生产。例如,我尝试了大量使用LaTex库的PYX,并且刚要求我抓取LaTex和Type1字体,在我的机器上拥有长长的依赖关系列表,最多可多加200毫克。这感觉非常OTT,但我可能会误解所需的复杂性。 (感谢快速响应btw) – Jetblackstar

+0

我认为reportlab只适用于easy_install(或者也许是pip)......但那不是在这里或那里......只是公平的警告,从头开始做它将是它自己的特殊类型的地狱(allthough可能是一种有趣的学习体验) –

回答

3

borrowed from ask.yahoo

一个PDF文件开始用 “​​%PDF-1.1”,如果它是一个版本1.1类型的PDF文件。如果没有存储二进制数据对象,您可以阅读PDF文件,如果您不需要像绘制位图那样存储二进制对象,那么您甚至可以使用记事本创建一个。

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

对于相当简单的PDF文件,您可以像使用记事本一样键入文本,以生成Adobe 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展示了如何从无到有

+2

如果您从其他地方借用了某些文本,则应该提供一个指向源的链接以及简单归因。 – Hannele

+0

有你去:)你是正确的粗...我的意思是......但后来我被卡住试图找到规范的正确链接 –

+0

我要给这个给乔兰,因为他给了我的好处在试图用手做这件事时有疑问。此外,我还没有在PDF上找到优秀文档的链接。这说我要尝试投降并使用其中一个可用的库。当我与他们抗争时,可能会发生许多咒骂。但是,如果我最终使用报告实验室,我会回来并在此处记下。非常感谢两个! – Jetblackstar

4

只要你在Python 2.7中工作,Reportlab似乎是目前最好的解决方案。它的功能非常全面,可能有点复杂,具体取决于你使用它做什么,但是由于你似乎对PDF内部部件很熟悉,所以希望学习曲线不会太陡峭。

+0

他特别说他不想使用图书馆......但是是的报告实验室是最好的选择,如果做的不仅仅是简单的文本 –

+0

我会尝试PYX和报告实验室,如果我最终使用报告实验室我会注意到它回到了这里。 – Jetblackstar