Надежный и быстрый способ преобразовать огромное количество файлов ODT в PDF?

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

В настоящее время я имею template.odt и использую маркеры в файлах content.xml для заполнения данными из DB. Я могу гладко создать файлы ODT, они всегда выглядят правыми.

Для ODT к преобразованию PDF я использую openoffice в режиме сервера (и именованный канал PyODConverter w/), но это не очень надежно: в пакете документов существует в конечном счете точка, после которой все обработанные файлы преобразовываются в мусор (неправильные шрифты и буквы, растянутые на всем протяжении страницы).

Проблема не очевидно восстанавливаема (не зависит от данных), происходит в ООО 2.3 и 3.2, в Ubuntu, XP, Сервер 2003 и Windows 7. Мой детектор Heisenbug отсчитывает.

Я пытался уменьшить размер пакетов и ООО перезапуска после каждого; тем не менее, небольшой процент документов испорчены.

Конечно, я запишу об этом в списках рассылки Ooo, но в это время, я имею доставку и уже потерял слишком много времени.

Куда я иду?

  1. Полностью избегайте формата ODT и пойдите для другой шаблонной системы.

    • Предложения? Что-либо, что занимает несколько секунд для выполнения, слишком медленно. ООО занимает приблизительно секунду, и оно суммирует к 15 дням времени обработки. Я должен был записать программу для кластеризации заданий по нескольким клиентам.
  2. Сохраните формат, но пойдите для другого инструмента/программы для преобразования.

    • Какой? Существует много приложений в условно-бесплатном программном обеспечении или коммерческих репозиториях для окон, но пробующий каждого грандиозная задача. Некоторые являются слишком медленными, некоторые не могут быть выполнены в пакете, не покупая его сначала, некоторые не могут работать из командной строки и т.д.
    • Инструменты с открытым исходным кодом имеют тенденцию не изобретать велосипед и часто зависеть от openoffice.
  3. Преобразование в промежуточное звено.DOC формат могло помочь избежать ошибки ООО, но это удвоит время обработки и усложнит задачу, которая является уже слишком волосатой.

  4. Попытайтесь произвести PDFs дважды и сравнить их, отбросив целый пакет, если существует что-то не так.

    • Хотя документы выглядят равными, я не знаю ни о каком способе сравнить двоичное содержание.
  5. ООО перезапуска после обработки каждого документа.

    • потребовалось бы намного больше времени для создания их
    • это понизило бы процент неправильных файлов и сделало бы его очень трудно для идентификации их.
  6. Пойдите для ReportLab и воссоздайте страницы программно. Это - подход, который я собираюсь попробовать через несколько минут.

  7. Учитесь правильно форматировать маркированные списки

Большое спасибо.

Править: кажется, что я не могу использовать ReportLab вообще, это не позволит мне встроить шрифт. Мой шрифт существует версий OpenType и TrueType.

TrueType каждый говорит "TTFError: Шрифт не позволяет подмножество/встраивание (0100)".

Версия OpenType говорит "TTFError [...] основы постскриптума не поддерживаются".

Очень очень забавный.

6
задан Marco Mariani 25 May 2010 в 13:13
поделиться

5 ответов

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

  • сгенерированные файлы имеют неправильный размер по сравнению с исходным
  • файлы не содержат некоторую строку (например, название шрифта)
  • какой-то бит данных находится не в том месте, где ожидалось
  • при преобразовании обратно в текст они не содержат ожидаемых данных из шаблона
  • при преобразовании в растровое изображение текст находится не в том месте

Я подозреваю, что преобразование обратно в текст и поиск ожидаемых строк будет наиболее точным решением, но и медленным. Если это слишком медленно для каждого файла, запустите его для каждой 1/100 части или около того, и просто переконвертируйте каждый файл после последнего хорошего.

2
ответ дан 17 December 2019 в 04:43
поделиться

Для вашего сценария кажется, что Reportlab PLUS хорошо подходит, включая шаблоны и поддержку по телефону, чтобы вы быстро работать.

0
ответ дан 17 December 2019 в 04:43
поделиться

Очень интересная проблема. Поскольку вы уже написали его для кластеризации на нескольких машинах, почему бы не использовать подход двойного производства и не распространить его на узлы EC2. Это будет стоить немного дороже, но вы можете сравнить вещи, используя md5 или sha hashes, и если 2 версии одинаковы, вы можете двигаться дальше.

0
ответ дан 17 December 2019 в 04:43
поделиться

Мне кажется, что OpenOffice не подходит для создания такого большого количества файлов PDF. Вам следует использовать реальное решение для создания отчетов, оптимизированное для создания большого количества файлов PDF. Есть много разных инструментов. Я бы порекомендовал i-net Clear Reports (раньше назывался i-net Crystal-Clear).

  • Я ожидал, что один файл PDF будет создан быстрее, чем в OpenOfice.
  • Создание 2 файлов PDF и их сравнение потребуют больших затрат скорости.
  • Он может встроить шрифты True Type.
  • С API вы можете работать в цикле.
  • С пробной лицензией вы можете работать со своим пакетом в течение 90 дней.

Недостатком является то, что вам придется перезапускать разработку.

3
ответ дан 17 December 2019 в 04:43
поделиться

Для сравнения двух файлов PDF я бы порекомендовал i-net средство сравнения содержимого PDF . Он может очень хорошо сравнивать 2 каталога файлов PDF. Мы используем его в нашей системе регрессионного тестирования.

0
ответ дан 17 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: