Domanda

Ho un'applicazione WSGI che genera fatture e le memorizza come PDF.

Finora ho risolto problemi simili con FPDF (o equivalenti), generando il PDF da zero come una GUI. Purtroppo questo significa che l'intera logica di formattazione (posizionamento di intestazioni, piè di pagina e contenuto, stile) è nell'applicazione, dove in realtà non dovrebbe essere.

Dato che i modelli esistono già nei formati di Office (ODT, DOC, DOCX), preferirei semplicemente utilizzarli come base e compilare il contenuto effettivo. Ho trovato il framework Appy, che fa praticamente quello con i file ODT annotati.

Ciò lascia ancora aperto il problema più grande, anche se: convertire ODT (o DOC o DOCX) in PDF. Su un server Esecuzione di Linux. Senza librerie GUI. E quindi, senza OO.o o MS Office.

È possibile o sto meglio mantenendo lo stile nel mio codice?

Il contenuto effettivo che verrebbe compilato è in realtà abbastanza limitato: alcuni paragrafi, alcuni dei quali possono essere opzionali, un titolo o due, sempre nello stesso posto e alcune righe di una tabella. In HTML questo sarebbe banale.

EDIT: Fondamentalmente, voglio una libreria in grado di generare file ODT da file ODF che fungono da modelli e una libreria in grado di convertire il risultato in PDF (che è probabilmente il punto cruciale).

È stato utile?

Soluzione

Non so come fare per ODT automatico - > Conversione PDF, ma un percorso più semplice potrebbe essere quello di generare le fatture come HTML e convertirle in PDF utilizzando http: // www. xhtml2pdf.com/ . Non ho provato la biblioteca da solo, ma sembra decisamente promettente.

Altri suggerimenti

È possibile utilizzare QTextDocument, QTextCursor e QTextDocumentWriter in PyQt4. Un semplice esempio per mostrare come scrivere in un file dispari:

>>>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

In caso di dubbi, in questo caso la differenza tra odt e odf. Ho controllato il tipo di file e ha detto 'application / vnd.oasis.opendocument.text'. Quindi presumo sia strano. Puoi stampare su un file pdf usando QPrinter.

Ulteriori informazioni su: http://qt-project.org/doc/qt-4.8/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top