以PDF格式转换zillion ODT文件的可靠而快速的方法?

时间:2010-05-25 10:24:41

标签: python pdf reporting openoffice.org

我需要使用嵌入字体从一个简单的模板(几页和几个表)预生成一百万或两个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邮件列表上写下这个,但与此同时,我有一个交付并且已经失去了太多时间。

我该去哪儿?

  1. 完全避免使用ODT格式并转到另一个模板系统。

    • 连连呢?任何需要几秒钟才能运行的东西都太慢了。 OOo花费大约一秒钟,总计达到15天的处理时间。我不得不编写一个程序,用于将作业聚集在几个客户端上。
  2. 保留格式,但转到另一个工具/程序进行转换。

    • 哪一个?共享软件或商业存储库中有许多用于Windows的应用程序,但尝试每个应用程序都是一项艰巨的任务。 有些太慢,有些不能先批量运行,有些不能从命令行等工作。
    • 开源工具往往不会重新发明轮子,而且往往依赖于openoffice。
  3. 转换为中间.DOC格式有助于避免OOo错误,但会使处理时间加倍,并使已经太毛茸茸的任务复杂化。

  4. 尝试生成两次PDF并进行比较,如果出现问题则丢弃整批文件。

    • 虽然文档看起来相同,但我知道无法比较二进制内容。
  5. 处理完每个文档后重启OOo。

    • 生产它们需要更多时间
    • 它会降低错误文件的百分比,并且很难识别它们。
  6. 转到ReportLab并以编程方式重新创建页面。这是我将在几分钟内尝试的方法。

  7. 了解如何正确设置项目符号列表的格式

  8. 非常感谢。

    编辑:好像我根本不能使用ReportLab,它不会让我嵌入字体。 我的字体有TrueType和OpenType版本。

    TrueType表示“TTFError:字体不允许子集化/嵌入(0100)”。

    OpenType版本说“不支持TTFError [...] postscript大纲”。

    非常非常有趣。

5 个答案:

答案 0 :(得分:3)

对于创建如此大量的PDF文件,OpenOffice似乎是错误的产品。您应该使用针对创建大量PDF文件进行优化的实际报告解决方案。有许多不同的工具。我建议 i-net Clear Reports (以前称为i-net Crystal-Clear)。

  • 我希望使用OpenOfice可以更快地创建一个PDF文件。
  • 创建2个PDF文件并进行比较会花费很多时间。
  • 它可以嵌入True Type字体。
  • 使用API​​,您可以循环工作。
  • 使用试用许可证,您可以在批次上工作90天

缺点是您必须重新开始开发。

答案 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文件目录非常好。我们在回归测试系统中使用它。