У вас есть количество вариантов в зависимости от:
- платформа (ы), на которой будет работать ваше приложение
- будет ли ваше приложение серверным (например, веб-служба, которую вы настроили один раз, а затем запускает) или широко доступное настольное приложение (например, то, что должно быть легко загружаемым и устанавливаемым многими людьми)
- готовы ли вы приложить немного или больше усилий к программированию, чтобы заставить решение работать
- гибки ли вы в отношении языка программирования, который вы будете использовать
Вот несколько вариантов:
- PDFCreator + COM
- только для Windows
- подходит для настольных и серверных приложений
- среднее программирование
- любой язык, который позволяет говорить на COM
- OpenOffice (+ JODConverter - опционально)
- Кроссплатформенность (Windows, Linux и т. Д.)
- подходит для серверных приложений, так как OpenOffice - это 100 МБ + загрузка
- низкое программирование
- Java (если используется JODConverter) или любой язык, который может взаимодействовать с UNO OpenOffice
- IText + Apache POI
- Кроссплатформенность (Windows, Linux и т. Д.)
- подходит для настольных и серверных приложений
- большое программирование
- Java
EDIT
Вот более старая запись , которая имеет некоторое сходство с вашим вопросом.
РЕДАКТИРОВАТЬ 2
Я вижу из ваших комментариев, что вы работаете в Linux и открыты для C ++ или Java. Определенно используйте опцию 2.
JODConverter
(Java): библиотека заботится о том, чтобы порождать OpenOffice
в режиме без головы и разговаривать с ней Uno
от вашего имени. Вы предоставляете JODConverter
имя файла ввода и вывода, а также типы ввода и вывода (например, rtf и pdf), а когда он возвращается к вам, файл вывода готов.
- C ++: вы можете выполнить форк + exec один (или более, для балансировки нагрузки) экземпляров OpenOffice в режиме без головы (soffice будет прослушивать запросы UNO на сокете, например, через порт 8100). Из вашего приложения используйте Uno / CPP чтобы дать OpenOffice команду выполнить преобразование так же, как
JODConverter
(см. Исходный код JODConverter
, как это сделать.)
/opt/openoffice.org3/program/soffice.bin \
-accept=socket,host=127.0.0.1,port=8100;urp; \
-headless -nocrashreport -nodefault \
-nolockcheck -nologo -norestore
Я успешно использую JODConverter
из приложения Java для преобразования разных типов документов (некоторые документы динамически генерируются из шаблонов) в pdf
.