Я должен предварительно произвести миллион или два файла PDF из простого шаблона (несколько страниц и таблиц) со встроенными шрифтами. Обычно, я остался бы низкий уровень в случае как это и составил бы все с библиотекой как ReportLab, но я присоединился поздно в проекте.
В настоящее время я имею template.odt и использую маркеры в файлах content.xml для заполнения данными из DB. Я могу гладко создать файлы ODT, они всегда выглядят правыми.
Для ODT к преобразованию PDF я использую openoffice в режиме сервера (и именованный канал PyODConverter w/), но это не очень надежно: в пакете документов существует в конечном счете точка, после которой все обработанные файлы преобразовываются в мусор (неправильные шрифты и буквы, растянутые на всем протяжении страницы).
Проблема не очевидно восстанавливаема (не зависит от данных), происходит в ООО 2.3 и 3.2, в Ubuntu, XP, Сервер 2003 и Windows 7. Мой детектор Heisenbug отсчитывает.
Я пытался уменьшить размер пакетов и ООО перезапуска после каждого; тем не менее, небольшой процент документов испорчены.
Конечно, я запишу об этом в списках рассылки Ooo, но в это время, я имею доставку и уже потерял слишком много времени.
Куда я иду?
Полностью избегайте формата ODT и пойдите для другой шаблонной системы.
Сохраните формат, но пойдите для другого инструмента/программы для преобразования.
Преобразование в промежуточное звено.DOC формат могло помочь избежать ошибки ООО, но это удвоит время обработки и усложнит задачу, которая является уже слишком волосатой.
Попытайтесь произвести PDFs дважды и сравнить их, отбросив целый пакет, если существует что-то не так.
ООО перезапуска после обработки каждого документа.
Пойдите для ReportLab и воссоздайте страницы программно. Это - подход, который я собираюсь попробовать через несколько минут.
Учитесь правильно форматировать маркированные списки
Большое спасибо.
Править: кажется, что я не могу использовать ReportLab вообще, это не позволит мне встроить шрифт. Мой шрифт существует версий OpenType и TrueType.
TrueType каждый говорит "TTFError: Шрифт не позволяет подмножество/встраивание (0100)".
Версия OpenType говорит "TTFError [...] основы постскриптума не поддерживаются".
Очень очень забавный.
Вероятно, в итоге я найду способ определить, когда пакетная обработка срывается, а затем переработать все, что было незадолго до сбоя. Как определить момент сбоя? Для этого нужно проанализировать несколько правильных PDF и несколько неудачных, чтобы найти сходство между ними:
Я подозреваю, что преобразование обратно в текст и поиск ожидаемых строк будет наиболее точным решением, но и медленным. Если это слишком медленно для каждого файла, запустите его для каждой 1/100 части или около того, и просто переконвертируйте каждый файл после последнего хорошего.
Для вашего сценария кажется, что Reportlab PLUS хорошо подходит, включая шаблоны и поддержку по телефону, чтобы вы быстро работать.
Очень интересная проблема. Поскольку вы уже написали его для кластеризации на нескольких машинах, почему бы не использовать подход двойного производства и не распространить его на узлы EC2. Это будет стоить немного дороже, но вы можете сравнить вещи, используя md5 или sha hashes, и если 2 версии одинаковы, вы можете двигаться дальше.
Мне кажется, что OpenOffice не подходит для создания такого большого количества файлов PDF. Вам следует использовать реальное решение для создания отчетов, оптимизированное для создания большого количества файлов PDF. Есть много разных инструментов. Я бы порекомендовал i-net Clear Reports (раньше назывался i-net Crystal-Clear).
Недостатком является то, что вам придется перезапускать разработку.
Для сравнения двух файлов PDF я бы порекомендовал i-net средство сравнения содержимого PDF . Он может очень хорошо сравнивать 2 каталога файлов PDF. Мы используем его в нашей системе регрессионного тестирования.