我有一个WSGI应用程序,可以生成发票并将它们存储为PDF格式。
到目前为止,我已经解决了FPDF(或等效物)的类似问题,从头开始生成PDF,就像GUI一样。遗憾的是,这意味着整个格式化逻辑(定位页眉,页脚和内容,样式)都在应用程序中,它实际上不应该是。
由于模板已经存在于Office格式(ODT,DOC,DOCX)中,我宁愿只使用这些模板作为基础并填写实际内容。我找到了Appy框架,它使用带注释的ODT文件做了很多。
这仍然留下了更大的问题,即:将ODT(或DOC或DOCX)转换为PDF。在服务器上。运行Linux。没有GUI库。因此,没有OO.o或MS Office。
这是完全可能还是我最好不要在我的代码中保留样式?
实际内容实际上是非常有限的:一些段落,其中一些可能是可选的,一两个标题,总是在同一个地方,以及几行表格。在HTML中,这将是微不足道的。
编辑:基本上,我想要一个可以从作为模板的ODF文件生成ODT文件的库和一个可以将结果转换为PDF的库(这可能是关键)。
答案 0 :(得分:2)
我不知道如何进行自动ODT - > PDF转换,但更简单的路线可能是将您的发票生成为HTML并使用http://www.xhtml2pdf.com/将其转换为PDF。我自己没有尝试过这个库,但它看起来很有希望。
答案 1 :(得分: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文件。