我需要生成一个超过100个的PDF文档。该过程需要大量的数据来处理,全在一次代花费更多的时间和记忆,我可以给。如何生成PDF文档页逐页在后台任务在App Engine上
我已经尝试了几种不同的方法来破解,虽然我的方式:
一些网页和
我生成文档并不复杂,主要是表格和文本,没有内部的引用,没有TOC,没有任何应了解该文件的其余部分。我可以和platypus一起进行布局,并且我不需要花哨的文档外观或HTML2PDF转换。
我们的目标是尽可能快的数据存储将允许它生成的文件。并行页面生成会很好,但不是必需的。
我在想每页生成blobstore files api,其中每个任务都会生成一个页面,最后一个任务将最终确定blobstore文件的可读性。但我似乎无法找到如何,暂停发电,存储部分PDF格式的流,并恢复与流产生在不同的任务来生成下一个页面。
所以我的问题是:
如何在GAE上产生一个比一个几页的PDF文件较大,分裂任务要求之间产生,然后存储在Blob存储所得到的文档?
如果发生分裂是不可能的ReportLab的,那么如何融合不同的PDF文档,因此将适合通过GAE的任务要求设置的限制的足迹最小化?
更新: 转换API的替代方案非常感谢。
月2日更新 转换API正在被取消,所以现在不是一种选择。
3rd UPDATE Can Pileline或MapReduce API的帮助在这里?
你有分裂源数据到页面大小的块而不做实际转换的一种方式?如果是这样,您可以编写一个函数,使用replortlab生成单个页面,并使用'multiprocessing.Pool.map'在所有输入的块的列表上并行运行该页面。作为最后一步,使用pyPdf将页面合并到单个文档中。 – 2012-04-22 14:52:00
我已经做了类似的事情,但没有取得太大的成功,对于某些文档,合并需要很长时间才能完成(必须少于10分钟)。也许我做错了,无论如何,我想要一个代码示例如何正确地做到这一点。 – 2012-04-22 15:25:57
快速排版大文档听起来像是TeX的工作(可能使用LaTeX或conTeXt宏包)。你必须在单独的服务器上运行它。 – 2012-04-22 15:47:30