【问题标题】:Generate ODT/DOC(X) and convert to PDF, without OO.o/MS生成 ODT/DOC(X) 并转换为 PDF,无需 OO.o/MS
【发布时间】:2009-11-30 13:01:30
【问题描述】:

我有一个 WSGI 应用程序,它可以生成发票并将它们存储为 PDF。

到目前为止,我已经解决了 FPDF(或等价物)的类似问题,像 GUI 一样从头开始生成 PDF。遗憾的是,这意味着整个格式化逻辑(定位页眉、页脚和内容、样式)都在应用程序中,而实际上不应该在其中。

由于模板已经存在于 Office 格式(ODT、DOC、DOCX)中,我更愿意简单地以这些为基础并填写实际内容。我找到了 Appy 框架,它对带注释的 ODT 文件做了很多工作。

这仍然留下了更大的问题:将 ODT(或 DOC 或 DOCX)转换为 PDF。在服务器上。运行 Linux。没有 GUI 库。因此,没有 OO.o 或 MS Office。

这完全有可能还是我最好在代码中保留样式?

要填写的实际内容实际上是非常有限的:几个段落,其中一些可能是可选的,一个或两个标题,总是在同一个地方,以及表格的几行。在 HTML 中,这将是微不足道的。

编辑:基本上,我想要一个可以从充当模板的 ODF 文件生成 ODT 文件的库和一个可以将结果转换为 PDF 的库(这可能是症结所在)。

【问题讨论】:

    标签: python pdf ms-office openoffice.org odf


    【解决方案1】:

    我不知道如何进行自动 ODT -> PDF 转换,但更简单的方法可能是将发票生成为 HTML 并使用 http://www.xhtml2pdf.com/ 将它们转换为 PDF。我自己没有尝试过这个库,但它看起来很有希望。

    【讨论】:

    • 我认为这种方法的问题在于页脚/页眉仍然需要直接处理——我必须将页脚保持在每一页的相同位置。我知道 CSS 有很多打印选项,但我不确定它是否可以做到这一点(证明我错了)。
    • 似乎 XHTML2PDF/Pisa 通过一些 CSS 扩展支持页眉和页脚。查看xhtml2pdf.com/doc/pisa-en.html - 第 7.4 节包含有关如何在文档的每一页上创建页脚的示例。
    • 这似乎可以解决问题。伟大的!我将不得不稍微摆弄一下,但我认为这是将样式排除在代码之外的完美解决方案。它仍然留下了将 ODF/DOC(X) 模板重新创建为 XHTML/CSS+ 的冗余,但这只是一个小问题。
    【解决方案2】:

    您可以在 PyQt4 中使用 QTextDocument、QTextCursor 和 QTextDocumentWriter。显示如何写入 odt 文件的简单示例:

    >>>from pyqt4 import QtGui
    # Create a document object
    >>>doc = QtGui.QTextDocument()
    # Create a cursor pointing to the beginning of the document
    >>>cursor = QtGui.QTextCursor(doc)
    # Insert some text
    >>>cursor.insertText('Hello world')
    # Create a writer to save the document
    >>>writer = QtGui.QTextDocumentWriter()
    >>>writer.supportedDocumentFormats()
    [PyQt4.QtCore.QByteArray(b'HTML'), PyQt4.QtCore.QByteArray(b'ODF'), PyQt4.QtCore.QByteArray(b'plaintext')]
    >>>odf_format = writer.supportedDocumentFormats()[1]
    >>>writer.setFormat(odf_format)
    >>>writer.setFileName('hello_world.odt')
    >>>writer.write(doc) # Return True if successful
    True
    

    如果不确定这种情况下 odt 和 odf 之间的区别。我检查了文件类型,上面写着“application/vnd.oasis.opendocument.text”。所以我认为这是奇怪的。您可以使用 QPrinter 打印到 pdf 文件。

    更多信息请访问: http://qt-project.org/doc/qt-4.8/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-13
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 2012-01-14
      • 2019-08-29
      相关资源
      最近更新 更多