ODT / DOC(X)を生成し、OO.o / MSなしでPDFに変換します
-
10-07-2019 - |
質問
請求書を生成してPDFとして保存するWSGIアプリケーションがあります。
これまでのところ、FPDF(または同等のもの)で同様の問題を解決し、GUIのようにゼロからPDFを生成しました。悲しいことに、これはフォーマットロジック全体(ヘッダー、フッター、コンテンツの配置、スタイリング)がアプリケーション内にあり、本来はそうすべきではないことを意味します。
テンプレートは既にOffice形式(ODT、DOC、DOCX)で存在しているため、これらを基本として使用し、実際のコンテンツを入力することをお勧めします。 Appyフレームワークを見つけました。これは、注釈付きODTファイルでほぼそれを行います。
それでもなお、大きな問題は未解決のままです。tho:ODT(またはDOC、またはDOCX)をPDFに変換します。サーバー上。 Linuxを実行します。 GUIライブラリなし。したがって、OO.oまたはMS Officeがありません。
これは可能ですか、それともコードのスタイリングを維持した方が良いですか?
入力される実際のコンテンツは、実際には非常に制限されています。いくつかの段落(オプションの場合もあります)、見出しまたは2つ、常に同じ場所、および表の数行。 HTMLではこれは簡単です。
編集:基本的に、テンプレートとして機能するODFファイルからODTファイルを生成できるライブラリと、結果をPDF(おそらくcrux)に変換できるライブラリが必要です。
解決
自動ODTの実行方法がわからない-> PDF変換ですが、より簡単な方法は、 http:// wwwを使用して請求書をHTMLとして生成し、PDFに変換することです。 xhtml2pdf.com/ 。私は自分でライブラリを試したことはありませんが、間違いなく有望なようです。
他のヒント
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」と表示されていました。だから私はそれがodtだと思います。 QPrinterを使用してPDFファイルに印刷できます。