Pregunta

Tengo una aplicación WSGI que genera facturas y las almacena como PDF.

Hasta ahora he resuelto problemas similares con FPDF (o equivalentes), generando el PDF desde cero como una GUI. Lamentablemente, esto significa que toda la lógica de formato (encabezados de posicionamiento, pies de página y contenido, estilo) está en la aplicación, donde realmente no debería estar.

Como las plantillas ya existen en formatos de Office (ODT, DOC, DOCX), preferiría usarlas simplemente como base y completar el contenido real. He encontrado el marco Appy, que hace más o menos eso con los archivos ODT anotados.

Eso todavía deja abierto el problema más grande, aunque: convertir ODT (o DOC, o DOCX) a PDF. En un servidor Ejecutando Linux. Sin bibliotecas GUI. Y así, sin OO.o o MS Office.

¿Es esto posible o es mejor mantener el estilo en mi código?

El contenido real que se rellenaría en realidad es bastante restringido: algunos párrafos, algunos de los cuales pueden ser opcionales, uno o dos títulos, siempre en el mismo lugar y algunas filas de una tabla. En HTML esto sería trivial.

EDITAR: Básicamente, quiero una biblioteca que pueda generar archivos ODT a partir de archivos ODF que actúen como plantillas y una biblioteca que pueda convertir el resultado en PDF (que probablemente sea el quid).

¿Fue útil?

Solución

No sé cómo hacer ODT automático - > Conversión de PDF, pero una ruta más simple podría ser generar sus facturas como HTML y convertirlas a PDF usando http: // www. xhtml2pdf.com/ . No he probado la biblioteca yo mismo, pero definitivamente parece prometedor.

Otros consejos

Puede usar QTextDocument, QTextCursor y QTextDocumentWriter en PyQt4. Un ejemplo simple para mostrar cómo escribir en un archivo impar:

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

Si no está seguro de la diferencia entre odt y odf en este caso. Verifiqué el tipo de archivo y decía 'application / vnd.oasis.opendocument.text'. Entonces supongo que es extraño. Puede imprimir en un archivo pdf utilizando QPrinter.

Más información en: http://qt-project.org/doc/qt-4.8/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top