В проекте, над которым я работаю, у меня есть требование создать PDF. Этот PDF-файл будет содержать только текст, и содержание текста будет весьма изменчивым. Большая часть текста должна быть напечатана отдельными абзацами, напечатанными друг под другом. Если абзац не помещается на странице, его следует просто добавить на следующую. Он должен быть бесплатным (как в пиве, желательно как в опенсорсе тоже) и стабильным (чтобы не какой-то игрушечный проект).
Кстати, сам проект будет использоваться в коммерческих целях. Пользователи смогут отправить вызов API, и для них будет сгенерирован определенный PDF-файл (его содержимое — это то, на чем мы специализируемся).
Согласно Что такое лучшая библиотека PDF с открытым исходным кодом для Java? [закрыто] в StackOverflow лучшим вариантом может быть iText :
iText — это библиотека PDF, которая позволяет вам СОЗДАВАТЬ, АДАПТИРОВАТЬ, ПРОВЕРЯТЬ и ОБСЛУЖИВАТЬ документы в формате Portable Document Format (PDF): — Генерировать документы и отчеты на основе данных из XML-файла или базы данных — Создавать карты и книги, используя множество интерактивных функции, доступные в формате PDF - добавление закладок, номеров страниц, водяных знаков и других функций в существующие документы PDF - разделение или объединение страниц из существующих файлов PDF - заполнение интерактивных форм - предоставление динамически созданных или измененных документов PDF в веб-браузере
iText используется разработчиками Java, .NET, Android и GAE для улучшения своих приложений с помощью функций PDF.
Несколько инженеров iText активно поддерживают проект на StackOverflow: https://stackoverflow.com/questions/tagged/itext .
Эта библиотека, кажется, бесплатна для личного использования.
Apache FOP в сочетании с Freemarker — отличное решение для настройки простой системы шаблонов для создания PDF-файлов, содержащих не более чем текст и несколько основных изображений.
Freemarker используется для создания динамических шаблонов, результатом которых является XML в стиле:
<letter>
<paragraph>Some static content always in here</paragraph>
<paragraph>Bla bla bla</paragraph>
<paragraph>Foo foo foo</paragraph>
</letter>
Где bla bla bla и foo foo foo на самом деле происходят из списка в POJO. FOP также можно использовать для создания этого XML (или иметь полностью динамический шаблон), но это кажется более хрупким.
Затем Apache FOP используется для создания XML из PDF. Вы в основном говорите FOP, что для «абзаца» он должен создать текстовый блок в PDF с определенными спецификациями.
Таким образом, вы можете использовать его так же, как вы используете CSS на обычной веб-странице, и полностью разделить создание и структуру контента (Freemarker) и окончательную презентацию (Apache FOP).
Кристоф
Холрой
Кристоф
Кристоф
Анджело Фукс