我需要使用嵌入字体从一个简单的模板(几页和几个表)预生成一百万或两个PDF文件。通常情况下,我会在这样的情况下保持低水平,并使用像ReportLab这样的库来构建所有内容,但是我加入了项目的后期。
目前,我有一个template.odt,并在content.xml文件中使用标记来填充数据库中的数据。我可以顺利地创建ODT文件,它们看起来总是很严谨。
对于ODT到PDF的转换,我在服务器模式下使用openoffice(和PyODConverter w / named管道),但它不是很可靠:在一批文件中,最终有一个点,之后所有处理过的文件都被转换成垃圾(页面上遍布错误的字体和字母)。
问题是不可预测的可再现性(不依赖于数据) 在OOo 2.3和3.2中,在Ubuntu,XP,Server 2003和Windows 7中。我的Heisenbug探测器正在滴答作响。
我试图减少批量的大小并在每个批次之后重新启动OOo;仍然是一小部分文件 搞砸了。
当然我会在Ooo邮件列表上写下这个,但与此同时,我有一个交付并且已经失去了太多时间。
我该去哪儿?
完全避免使用ODT格式并转到另一个模板系统。
保留格式,但转到另一个工具/程序进行转换。
转换为中间.DOC格式有助于避免OOo错误,但会使处理时间加倍,并使已经太毛茸茸的任务复杂化。
尝试生成两次PDF并进行比较,如果出现问题则丢弃整批文件。
处理完每个文档后重启OOo。
转到ReportLab并以编程方式重新创建页面。这是我将在几分钟内尝试的方法。
了解如何正确设置项目符号列表的格式
非常感谢。
编辑:好像我根本不能使用ReportLab,它不会让我嵌入字体。 我的字体有TrueType和OpenType版本。
TrueType表示“TTFError:字体不允许子集化/嵌入(0100)”。
OpenType版本说“不支持TTFError [...] postscript大纲”。
非常非常有趣。
答案 0 :(得分:3)
对于创建如此大量的PDF文件,OpenOffice似乎是错误的产品。您应该使用针对创建大量PDF文件进行优化的实际报告解决方案。有许多不同的工具。我建议 i-net Clear Reports (以前称为i-net Crystal-Clear)。
缺点是您必须重新开始开发。
答案 1 :(得分:2)
我可能最终会找到一些方法来确定批处理何时变得混乱,然后在失败之前不久重新处理所有内容。如何确定何时出现乱码?这将需要分析一些正确的PDF和一些失败的PDF,以寻找它们之间的相似之处:
我怀疑将它们转换回文本并寻找预期的字符串将是最准确的解决方案,但也很慢。如果在每个文件上运行速度太慢,请每隔1/100左右运行一次,然后在最后一次正确的文件之后重新转换每个文件。
答案 2 :(得分:0)
对于您的场景,似乎Reportlab PLUS非常适合,包括模板和电话支持,以帮助您快速前进。
答案 3 :(得分:0)
非常有趣的问题。由于您已将其编写到多台计算机上的集群中,因此为什么不使用双重生产方法并将其传播到EC2节点上。它会花费额外的费用,但你可以使用md5或sha哈希比较东西,如果2个版本是相同的,你可以继续。
答案 4 :(得分:0)
为了比较2个pdf文件,我建议i-net PDF content comparer。它可以比较2个PDF文件目录非常好。我们在回归测试系统中使用它。