Бесплатная или почти бесплатная библиотека PDF для Java

Название 1 говорит (почти) все. Чтобы быть более конкретным, я требую

  • Генерация PDF
  • с базовым форматированием (таблицы и изображения)
  • удобство использования в коммерческом проекте с закрытым исходным кодом
  • быть бесплатным (как в пиве) или почти бесплатным

и предпочитаю

  • простота использования
  • ориентирован на будущее (нет мертвых проектов)
  • в идеале с открытым исходным кодом

Предыстория: Завтра я сгенерирую простой PDF, и я был бы счастлив, если бы это не заняло слишком много времени и если бы потраченное время не было потрачено впустую.


1 Взято из одноименного, но давно закрытого вопроса о SO , и я надеюсь, что это лучшее место для него. Проблема с закрытым вопросом заключается в том, что ответы могут быть давно устаревшими. Даже если нет, то нет четкой рекомендации.

Перемещение моего удаленного ответа в комментарий, поскольку я не вижу ничего, что можно было бы улучшить дальше: не буквально библиотеки Java, но в зависимости от контекста вы можете раскошелиться на стандартные библиотеки, такие как tiff2pdf Libtiff или ImageMagick . Кроме того, не забудьте подумать, действительно ли PDF является тем форматом, который вам нужен. Может быть, DjVu будет лучше?
@Nemo Ты сам удалил свой ответ? Я считаю ваш ответ действительным, поскольку PDF - это большая проблема, а раскошелиться довольно тривиально. К сожалению, PDF является обязательным требованием. К вашему сведению, я использую org.apache.pdfbox. Я провел с ним больше времени, чем хотел, но он сделал свою работу.
Нет, @Undo удалил это
Еще один закрытый вопрос SO: stackoverflow.com/questions/6625849/…
Вот список активных альтернатив с открытым исходным кодом со сравнениями и оценками популярности: java.libhunt.com/categories/438-pdf

Ответы (7)

iText

Я являюсь генеральным директором iText Group , первоначальным автором iText , а также автором двух книг iText in Action и бесплатной электронной книги The Best iText Questions на StackOverflow .

В списке, на который вы ссылаетесь, упоминается iText, и этим ответом я хочу подтвердить, что iText все еще существует. Он доступен под лицензией с открытым исходным кодом ( AGPL ), а также под коммерческой лицензией (которая приносит доход, который используется для дальнейшего развития).

Помимо того, что я являюсь генеральным директором компаний iText (с офисами в Европе, США, а вскоре и в Сингапуре), я также являюсь членом комитетов ISO, которые создают стандарты PDF. Менее чем через неделю я лечу в Сан-Хосе (Калифорния) для участия в собраниях, на которых будут обсуждаться ISO-32000-2 (ожидаемая спецификация PDF 2.0), ISO-19005 (PDF/A), ISO-14289 (PDF/ UA),... Я также отвечаю за специальный комитет ISO по цифровым подписям (переписывая часть о цифровых подписях в ISO-32000-2).

В iText мы инвестируем в дальнейшее развитие, что не всегда относится к библиотекам с открытым исходным кодом, которые предлагаются с бесплатной лицензией. Например: и iText, и PDFBox являются членами Ассоциации PDF , но на Днях PDF в Кельне в 2014 году PDFBox заявил, что у них нет ресурсов для инвестиций в поддержку PDF 2.0. Проект стоит или падает с существованием участников, которые жертвуют код. Бизнес-модель, используемая iText, приносит деньги, которые позволяют нам платить разработчикам.

Flying Saucer — это проект, созданный на базе iText, но никак не связанный с iText Group. Я не думаю, что это все еще поддерживается, но я не уверен.

Я не знал о PDFClown, пока разработчик инструмента не дразнил меня одной функцией, которая была доступна в PDFClown, но не в iText. Я ответил, реализовав эту функцию самостоятельно. Основываясь на разговоре, я предполагаю, что PDFClown — это проект одного человека.

У меня мало информации о других проектах. Один проект, который, похоже, отсутствует в исходном списке (но присутствует в комментариях и в другом ответе), — это Apache FOP . Основываясь на опросе, организованном Black Duck Software от нашего имени, Apache FOP, по-видимому, работает на многих системах (это был номер 2 после iText), но не так много разработчиков были им довольны из-за (1) архитектуры. это зависит от XSL-FO и (2) проблем с производительностью.

Как насчет отчетов о яшме? Это лучше, чем iText?
@Vinayak Jasper Reports использует старую версию iText. Сравнение Jasper Reports с iText похоже на сравнение автомобиля с его двигателем.
@BrunoLowagie, могу ли я бесплатно получить версию iText с лицензией на открытый исходный код (AGPL)? Если да, могу ли я использовать iText в своем приложении для Android и запустить его в Google Play?
@RageshDAntony Да, вы можете получить версию iText AGPL бесплатно. И да, вы можете использовать его в приложении для Android бесплатно, но только при условии, что вы предлагаете это приложение как приложение с открытым исходным кодом бесплатно на тех же условиях ; то есть: ваше приложение также должно быть на 100% AGPL.
@BrunoLowagie Спасибо за ответ. У меня другой вопрос. Что, если я продаю свое приложение по цене, но в то же время поддерживаю его с открытым исходным кодом (например, Redhat Enterprise Linux)?
Я не понимаю, как это сработает @RageshDAntony, потому что ваши клиенты будут платить вам за лицензию на использование вашего программного обеспечения, которое не является лицензией AGPL. Сравнение с RH Enterprise Linux некорректно, поскольку RH не продает никаких лицензий на использование Linux. RH не продает Linux «за плату».

LibreOffice

Один непрямой и бесплатный способ — создавать или изменять документы в LibreOffice с помощью библиотеки Java API . Затем скажите LibreOffice создать PDF-файл из этого документа.

Не просто, но выполнимо. Моя команда делала это в прошлом для прототипа (не в производстве). LibreOffice API был запутанным, со странным дизайном, плохо документированным, с несколькими плохими примерами — по крайней мере, таков был наш опыт.

Тем не менее, я настоятельно рекомендую рассмотреть возможность использования iText , если его стоимость может быть включена в ваш бюджет. См . Ответ Бруно Лоуаги.

Еще один коммерческий продукт, который я заметил: PDF Java Toolkit .

Библиотека Apache PDFBox® — это инструмент Java с открытым исходным кодом для работы с документами PDF. Этот проект позволяет создавать новые документы PDF, манипулировать существующими документами и извлекать содержимое из документов.

Apache PDFBox публикуется под лицензией Apache License v2.0.

Функции:

  • Извлечение текста Unicode из файлов PDF.
  • Разделите один файл PDF на несколько файлов или объедините несколько файлов PDF.
  • Извлеките данные из форм PDF или заполните форму PDF.
  • Проверяйте PDF-файлы на соответствие стандарту PDF/A-1b.
  • Распечатайте файл PDF, используя стандартный API печати Java.
  • Сохраняйте PDF-файлы как файлы изображений, например PNG или JPEG.
  • Создайте PDF-файл с нуля со встроенными шрифтами и изображениями.
  • Цифровая подпись PDF-файлов.
Этот комментарий предназначен в основном для того, чтобы помочь людям, которые столкнутся с этим ответом в будущем, но на момент написания библиотека PDFBox не выполняет никакого макета. Например, без текстовых колонок, без обтекания или выравнивания текста, без таблиц. Если вам нужен какой-либо макет, вам нужно будет использовать отдельную библиотеку макетов. Несколько примеров на github: github.com/ralfstuckert/pdfbox-layout и github.com/gingerdroids/BlockFrame.

jPDFWriter

Наше программное обеспечение jPDFWriter — это библиотека Java, которая может создавать PDF-документы. jPDFWriter можно использовать бесплатно в коммерческих целях, без лицензионных отчислений.

jPDFWriter может создавать файлы PDF двумя способами:

  • Файлы PDF можно создавать напрямую с помощью очень простого API jPDFWriter. Просто создайте объект PDFDocument, создайте столько объектов PDFPage, сколько необходимо, нарисуйте строки, графику или любые другие элементы, поддерживаемые Java Graphics2D, на страницах, а затем сохраните документ.

  • jPDFWriter также расширяет стандартную Java PrinterJob, так что вы можете создавать PDF-файлы так же, как вы печатаете на физическом принтере. Это позволяет повторно использовать существующий код печати, а приложению во время выполнения решать, следует ли отправлять вывод на принтер или в файл PDF.

Пожалуйста, прочитайте Как не быть спамером - вы должны заявить о своей принадлежности к этому продукту в своем сообщении.

JODОтчеты

JODReports имеет открытый исходный код и использует OpenOffice или LibreOffice в качестве механизма преобразования. Это означает, что вы можете создавать шаблоны в текстовом процессоре или программе для работы с электронными таблицами, манипулировать ими, а затем преобразовывать в различные форматы, включая PDF.

Последний раз проект JODReports обновлялся в августе 2013 года, поэтому трудно понять, «мертвый» ли он.


iText , подробно описанный ответом Бруно, может быть идеальным - это отличная библиотека.

OpenPDF

OpenPDF — это библиотека Java PDF, созданная на основе iText.

По состоянию на 2017 год он, кажется, активно поддерживается.

Я автор Open Lowcode PDF, дополнительного слоя поверх бесплатного Apache PDBBox. Фреймворк с открытым исходным кодом, и первая версия была выпущена только сегодня на github . Не стесняйтесь смотреть и оставлять отзывы.

Фреймворк предназначен для создания документов и форм, которые обычно производятся компаниями со стандартным элегантным макетом.