В базе хранятся MSWord'овские документы. Встала задача преобразовывать их в PDF. Решили, что лучше всего подойдет для этих целей OpenOffice - кросплатформенный, из коробки умеет в PDF сохранять. Для доступа к ООо использовали JODConverter (чтоб не заморачиватся).
Можно использовать и форки ООо - пробовал и на стандартном OpenOffice.org и LibraOffice - работает.
ООо запускается, что бы слушать на порту 8100, примерно так:
Да, чуть не забыл, на 7-ке не хватает версии java что бы выполнятся. Впринципе есть исходники JODConverter и проект OpenSource...
Основные проблемы были с самим OOo, как то,
- не все документы WSWord правильно понимаются\отображаются в ООо,
- на Linux нет всех Windows шрифтов, поэтому ООо не всегда правильно отображает документы сделанные с "красивыми" шрифтами.
По первой проблеме, сделать что-то сложно, только вручную подправить в MSWord'е, и проверить в ООо, что бы хоть как-то корректно было. Но не всегда получается. Была проблема со "сканами" вставленными в Word'овский документ. FineReader так делает. Там абсалютное позиционирование рисунков, которые ООо наотрез отказался правильно понимать. Решил проблему следющим образом: если возникали подозрения, что документ "скан" (по размеру, типу, и т.д.), его сначало конвертил в txt далее смотрел, что если текста нет (только переводы строки), то зачит это скан, далее его конвертил в HTML и правил в нем абсолютное позиционирование, и уже полученный HTML конвертил в PDF.
Проблема со шрифтами в Linux, решается, например, подсовыванием Виндовых шрифтов, можно это сделать только для ООо, например так: ООо - Font-FAQ...
Можно использовать и форки ООо - пробовал и на стандартном OpenOffice.org и LibraOffice - работает.
ООо запускается, что бы слушать на порту 8100, примерно так:
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizardа далее на java уже пишем простейший код для преоброзования "всего во вся". Пример с сайта:
File inputFile = new File("document.doc"); File outputFile = new File("document.pdf"); // connect to an OpenOffice.org instance running on port 8100 OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100); connection.connect(); // convert DocumentConverter converter = new OpenOfficeDocumentConverter(connection); converter.convert(inputFile, outputFile); // close the connection connection.disconnect();работает не сказать что бы уж совсем шустро, особенно на больших документах, но, по моему, быстрее многих PDF-принтеров. Тем более, что для PDF-принтера все равно необходимо приложение "источник" (WSWord).
Да, чуть не забыл, на 7-ке не хватает версии java что бы выполнятся. Впринципе есть исходники JODConverter и проект OpenSource...
Основные проблемы были с самим OOo, как то,
- не все документы WSWord правильно понимаются\отображаются в ООо,
- на Linux нет всех Windows шрифтов, поэтому ООо не всегда правильно отображает документы сделанные с "красивыми" шрифтами.
По первой проблеме, сделать что-то сложно, только вручную подправить в MSWord'е, и проверить в ООо, что бы хоть как-то корректно было. Но не всегда получается. Была проблема со "сканами" вставленными в Word'овский документ. FineReader так делает. Там абсалютное позиционирование рисунков, которые ООо наотрез отказался правильно понимать. Решил проблему следющим образом: если возникали подозрения, что документ "скан" (по размеру, типу, и т.д.), его сначало конвертил в txt далее смотрел, что если текста нет (только переводы строки), то зачит это скан, далее его конвертил в HTML и правил в нем абсолютное позиционирование, и уже полученный HTML конвертил в PDF.
Проблема со шрифтами в Linux, решается, например, подсовыванием Виндовых шрифтов, можно это сделать только для ООо, например так: ООо - Font-FAQ...
Комментариев нет:
Отправить комментарий