6

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

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

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

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

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

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

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

4

2 回答 2

2

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

于 2009-11-30T13:20:04.737 回答
1

您可以在 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/

于 2012-10-04T14:50:25.313 回答