Генерация ODT / DOC (X) и преобразование в PDF, без OO.o / MS - PullRequest
6 голосов
/ 30 ноября 2009

У меня есть приложение WSGI, которое генерирует счета и сохраняет их в формате PDF.

До сих пор я решал подобные проблемы с FPDF (или эквивалентами), генерируя PDF с нуля, как графический интерфейс. К сожалению, это означает, что вся логика форматирования (позиционирование верхних и нижних колонтитулов и содержимого, стилизация) находится в приложении, где этого не должно быть.

Поскольку шаблоны уже существуют в форматах Office (ODT, DOC, DOCX), я бы предпочел просто использовать их в качестве основы и заполнять фактический контент. Я нашел платформу Appy, которая в значительной степени справляется с аннотированными файлами ODT.

Это все еще оставляет большую проблему открытой: конвертирование ODT (или DOC, или DOCX) в PDF. На сервере. Под управлением Linux. Без библиотек GUI. И, таким образом, без OO.o или MS Office.

Это вообще возможно, или мне лучше оставить стилизацию в моем коде?

Фактический контент, который должен быть заполнен, на самом деле весьма ограничен: несколько абзацев, некоторые из которых могут быть необязательными, заголовок или два, всегда в одном и том же месте, и несколько строк таблицы. В HTML это было бы тривиально.

РЕДАКТИРОВАТЬ: В основном я хочу библиотеку, которая может генерировать файлы ODT из файлов ODF, выступающих в качестве шаблонов, и библиотеку, которая может конвертировать результат в PDF (что, вероятно, является ключевым моментом).

Ответы [ 2 ]

2 голосов
/ 30 ноября 2009

Я не знаю, что делать с автоматическим преобразованием ODT -> PDF, но более простой путь может заключаться в том, чтобы сгенерировать ваши счета в формате HTML и преобразовать их в PDF с помощью http://www.xhtml2pdf.com/. Я не пробовал библиотеку сам, но это определенно кажется многообещающим.

1 голос
/ 04 октября 2012

Вы можете использовать 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. Вы можете распечатать в PDF-файл с помощью QPrinter.

Больше информации на: http://qt -project.org / док / кварта-4,8 /

...