2009-11-30 69 views
6

我有一個WSGI應用程序生成發票並將它們存儲爲PDF。生成ODT/DOC(X)並轉換爲PDF,無OO.o/MS

到目前爲止我已經解決類​​似的問題與FPDF(或等同物),產生從像GUI從頭PDF。可悲的是,這意味着整個格式化邏輯(定位頁眉,頁腳和內容,樣式)都在應用程序中,而實際上不應該這樣做。

爲模板在Office格式(ODT,DOC,DOCX)已經存在,我更願意簡單地使用這些作爲基礎,並填寫實際內容。我找到了Appy框架,它用註釋的ODT文件做了很多工作。

這仍然留下了更大的問題開放,壽:將ODT(或DOC,DOCX或)爲PDF。在服務器上。運行Linux。沒有GUI庫。因此,沒有OO.o或MS Office。

這是在所有可能或我最好保持在我的代碼樣式?

的實際內容,將在實際上是相當限制吃飽了幾段,其中一些可能是可選的,一個或兩個標題,總是在同一個地方,和一張桌子幾排。在HTML中這將是微不足道的。

編輯:基本上,我希望能夠產生從作爲模板ODF文件ODT文件庫,並且可以將結果轉換成PDF(這可能是癥結所在)庫。

回答

2

我不知道如何去自動ODT - > PDF轉換,但更簡單的路線可能是生成您的發票作爲HTML並使用http://www.xhtml2pdf.com/將它們轉換爲PDF。我自己並沒有試過這個圖書館,但它絕對看起來很有希望。

+0

我用這種方法想通的問題將是頁腳/頭仍然需要直接處理 - 我必須保持頁腳每一頁上的同一個地方。我知道CSS有很多打印選項,但我不確定它是否可以這樣做(證明我錯了)。 – 2009-11-30 13:56:39

+1

看來XHTML2PDF/Pisa通過CSS擴展支持頁眉和頁腳。查看http://www.xhtml2pdf.com/doc/pisa-en.html - 第7.4節包含有關如何在文檔的每個頁面上創建頁腳的示例。 – 2009-11-30 14:02:20

+0

這似乎是個伎倆。大!我將不得不擺弄一下,但我認爲這是保持代碼樣式不變的完美解決方案。它仍然留下重新創建ODF/DOC(X)模板爲XHTML/CSS +的冗餘,但這只是一個小問題。 – 2009-11-30 14:34:12

1

您可以使用另外,QTextDocument,QTextCursor和QTextDocumentWriter PyQt4中。一個簡單的例子來顯示如何寫入一個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'。所以我認爲這是odt。您可以使用QPrinter打印到PDF文件。在

的更多信息: http://qt-project.org/doc/qt-4.8/