Python 可靠而快速地将大量ODT文件转换为PDF格式?

Python 可靠而快速地将大量ODT文件转换为PDF格式?,python,pdf,reporting,openoffice.org,Python,Pdf,Reporting,Openoffice.org,我需要从一个带有嵌入式字体的简单模板(几页和几张表格)预生成一百万或两个PDF文件。通常,在这种情况下,我会保持低水平,并使用ReportLab之类的库编写所有内容,但我加入项目的时间较晚 目前,我有一个template.odt,并在content.xml文件中使用标记来填充数据库中的数据。我可以顺利地创建ODT文件,它们看起来总是正确的 对于ODT到PDF的转换,我在服务器模式下使用openoffice(和w/named pipe),但它不是很可靠:在一批文档中,最终会有一个点,在这个点之后,

我需要从一个带有嵌入式字体的简单模板(几页和几张表格)预生成一百万或两个PDF文件。通常,在这种情况下,我会保持低水平,并使用ReportLab之类的库编写所有内容,但我加入项目的时间较晚

目前,我有一个template.odt,并在content.xml文件中使用标记来填充数据库中的数据。我可以顺利地创建ODT文件,它们看起来总是正确的

对于ODT到PDF的转换,我在服务器模式下使用openoffice(和w/named pipe),但它不是很可靠:在一批文档中,最终会有一个点,在这个点之后,所有处理过的文件都会被转换成垃圾(错误的字体和字母遍布整个页面)

问题不可预测地再现(不取决于数据),可能会发生 在OOO2.3和3.2中,在Ubuntu、XP、Server2003和Windows7中。我的海森堡探测器在滴答作响

我试图减少批次的大小,并在每次之后重新启动OOo;尽管如此,仍有一小部分文件 我们搞砸了

当然,我会在Ooo邮件列表上写下这一点,但与此同时,我有一个快递,已经浪费了太多的时间

我该去哪里

  • 完全避免ODT格式,选择另一个模板系统

    • 建议?任何需要几秒钟才能运行的东西都太慢了。OOo大约需要一秒钟,总共需要15天的处理时间。我必须编写一个程序,将作业集中到多个客户机上
  • 保留格式,但使用其他工具/程序进行转换

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

  • 试着制作两次PDF并进行比较,如果出现问题,则丢弃整批PDF

    • 虽然这些文档看起来是相同的,但我不知道如何比较二进制内容
  • 在处理每个文档后重新启动OOo

    • 生产它们需要更多的时间
    • 这将降低错误文件的百分比,并使识别它们变得非常困难
  • 转到ReportLab并以编程方式重新创建页面。这就是我几分钟后要尝试的方法

  • 学习正确设置项目符号列表的格式

  • 非常感谢

    编辑:看起来我根本不能使用ReportLab,它不允许我嵌入字体。 我的字体有TrueType和OpenType两种版本

    TrueType one说“TTFError:Font不允许子集/嵌入(0100)”

    OpenType版本表示“不支持TTFError[…]postscript大纲”


    非常有趣。

    对于您的场景,Reportlab PLUS似乎非常适合,包括模板和电话支持,让您快速运行

    非常有趣的问题。既然您已经将它编写成跨多台机器的集群,为什么不使用双生产方法并将其分布在EC2节点上呢。这将花费一些额外的费用,但您可以使用md5或sha哈希来比较内容,如果两个版本相同,您可以继续。

    我可能最终会找到某种方法来确定批处理何时失控,然后在失败前不久重新处理所有内容。如何确定它何时失控?这需要分析一些正确的PDF和一些失败的PDF,以寻找它们之间的相似之处:

    • 生成的文件与其源文件相比大小不正确
    • 这些文件不包含某些字符串(如字体名称)
    • 某些数据位不在预期位置
    • 当转换回文本时,它们不包含模板中的预期数据
    • 转换为位图时,文本不在正确的位置

    我怀疑将它们转换回文本并查找期望的字符串将是最准确的解决方案,但速度也很慢。如果在每个文件上运行速度太慢,请每隔1/100左右运行一次,然后在最后一个已知的好文件之后重新转换每个文件。

    对于比较2个pdf文件,我建议。它可以比较2个目录的PDF文件非常好。我们在回归测试系统中使用它。

    创建如此大量的PDF文件,OpenOffice似乎是错误的产品。您应该使用真正的报告解决方案,该解决方案针对创建大量PDF文件进行了优化。有许多不同的工具。我推荐(以前被称为I-net水晶般透明)

    • 我希望一个PDF文件的创建速度比OpenOfice更快
    • 创建2个PDF文件并进行比较将耗费大量的速度
    • 它可以嵌入真正的字体
    • 使用API,您可以在循环中工作
    • 使用试用许可证,您可以在批次上工作90天

    缺点是您必须重新启动开发。

    不,将同一个文件转换两次会产生两个完全不同的二进制文件。因此转换过程是不确定的?真奇怪。内容有什么不同?diff可以比较二进制-你也可以试试这个。reportlab的商业版每年的租赁费用为数千英镑,具体取决于生成的页面数量(!),而且金融部门的定价也有所不同。。我现在没有那个预算。当我运行它时,我将进行评估。有没有一种方法可以可靠地检测结果PDF文件中的损坏?他们都有某种签名