Мне нужно предварительно подготовить миллион или два файла PDF из простого шаблона (несколько страниц и таблиц) со встроенными шрифтами. Обычно я бы оставался на низком уровне в таком случае, как это, и составлял бы все с помощью библиотеки, такой как ReportLab, но я присоединился к проекту поздно.
В настоящее время у меня есть template.odt и я использую маркеры в файлах content.xml для заполнения данными из БД. Я могу плавно создавать файлы ODT, они всегда выглядят точно.
Для преобразования ODT в PDF я использую openoffice в режиме сервера (и PyODConverter с именованным каналом), но это не очень надежно: в пакете документов в конечном итоге есть точка после чего все обработанные файлы преобразуются в мусор (неправильные шрифты и буквы растянулись по всей странице).
Проблема не предсказуемо воспроизводима (не зависит от данных), случается
в OOo 2.3 и 3.2, в Ubuntu, XP, Server 2003 и Windows 7. Мой детектор Heisenbug работает.
Я пытался уменьшить размер пакетов и перезапускать OOo после каждого; Тем не менее, небольшой процент документов
перепутались.
Конечно, я напишу об этом в списках рассылки Ooo, но пока у меня есть доставка и я уже потерял слишком много времени.
Куда мне идти?
Полностью избегайте формата ODT и переходите на другую систему шаблонов.
- Предложения? Все, что занимает несколько секунд, работает слишком медленно. OOo занимает около секунды, и это составляет до 15 дней времени обработки. Мне пришлось написать программу для кластеризации заданий по нескольким клиентам.
Сохраните формат, но перейдите к другому инструменту / программе для преобразования.
- Какой? В условно-бесплатных или коммерческих репозиториях для Windows есть много приложений, но попробовать каждое из них - непростая задача.
Некоторые слишком медленные, некоторые не могут быть запущены в пакетном режиме без предварительной покупки, некоторые не могут работать из командной строки и т. Д.
- Инструменты с открытым исходным кодом, как правило, не изобретают велосипед и часто зависят от openoffice.
Преобразование в промежуточный формат .DOC может помочь избежать ошибки OOo, но это удвоит время обработки и усложнит задачу, которая уже слишком сложна.
Попробуйте дважды создать PDF-файлы и сравнить их, отбросив весь пакет, если что-то не так.
- Хотя документы выглядят одинаково, я не знаю, как сравнить двоичное содержимое.
Перезапустите OOo после обработки каждого документа.
- это заняло бы намного больше времени
- это снизит процент неправильных файлов и затруднит их идентификацию.
Перейти на ReportLab и заново создать страницы программным способом. Это подход, который я собираюсь попробовать через несколько минут.
Научитесь правильно форматировать маркированные списки
Большое спасибо.
Редактировать: кажется, что я вообще не могу использовать ReportLab, он не позволит мне встроить шрифт.
Мой шрифт поставляется в версиях TrueType и OpenType.
TrueType говорит: «TTFError: Шрифт не разрешает поднабор / встраивание (0100)».
Версия OpenType гласит: «[...] контуры TTFrror [...] postscript не поддерживаются»)
Очень, очень смешно.