Неделю назад состоялся релиз свободной библиотеки для генерации pdf-файлов версии OpenPDF 1.1.0, самый значительной апгрейд этой библиотеки за последнее время.
OpenPDF — это Java-библиотека для создания и редактирования файлов PDF, которая распространяется под двойной лицензией LGPL/MPL. Библиотека основана на форке iText. В реальности у неё такая история:
Все форки ведут историю от одной версии iText 4.2.0, которая вышла восемь лет назад и стала последней версией под свободной лицензией. Сами разработчики iText перешли на AGPL и сконцентрировались над созданием пятой версии, чтобы более успешно продавать коммерческий софт. К настоящему времени они доросли до версии iText 7. Но свободный проект тоже не погиб, а продолжил развитие силами всего сообщества.
За прошедшее время библиотека в некоторых отношениях улучшена, исправлено несколько багов. Хотя изменения не слишком значительные, но разработка продолжается, и внести свой вклад может каждый. Если при генерации PDF-файлов вам требуется какая-то конкретная функциональность, то предложите патч и реализуйте эту функцию для всех.
С момента старой «оригинальной» версии 4.2.0 сделаны следующие изменения.
OpenPDF — удобный способ внедрить в свой проект генерацию документов PDF, в том числе с криптографической цифровой подписью. Это готовый и бесплатный модуль, пригодный для использования в электронном документообороте. И такую систему можно использовать, например, с сертификатами для подписи PDF, чтобы сертифицировать и утверждать PDF-документы. Или интегрировать с сервисом облачных подписей Digital Signing Service от GlobalSign. Хотя последний уже работает, например, с решением для подписи документов Adobe Sign в облаке Adobe Document Cloud.
Поддержка криптобиблиотек Bouncy Castle весьма полезна. В основе архитектуры Bouncy Castle лежит набор низкоуровневых API, которые реализуют все криптографические алгоритмы. Есть поддержка стандартных высокоуровневых криптографических API платформ Java и C#.
Программные интерфейсы Java API от Bouncy Castle в версии 1.53 включали в себя около 400 тыс. строк кода и поддерживали большое количество алгоритмов, в том числе базовую генерацию сертификатов X.509, работу провайдера JCE/JCA, PKCS#10, PKCS#12, S/MIME, OpenPGP, DTLS, TLS, OCSP, TSP, CMP, CRMF, DVCS, DANE, EST, сертификаты Attribute Certificate (AC), которые используются для связывания дополнительной информации с сертификатом открытого ключа.
Нужно заметить, что кроме OpenPDF существуют и другие свободные библиотеки для генерации PDF. Например, есть ещё veraPDF или замечательная библиотека Apache PDFBox. Последняя активно поддерживается и обладает богатым набором функций:
Так что в наше время вовсе необязательно использовать проприетарные инструменты для создания или редактирования PDF. Для этого есть много свободных альтернатив.
АКЦИЯ GMO GlobalSign Russia для подписчиков Habr
![](https://habrastorage.org/webt/u3/my/b4/u3myb4ifqihiox-vpuqxbx4kij0.jpeg)
Дополнительную информацию вы можете получить, связавшись с менеджером GlobalSign по телефону: +7 (499) 678 2210, или заполните форму на сайте, указав промо-код CS002HBFR.
OpenPDF — это Java-библиотека для создания и редактирования файлов PDF, которая распространяется под двойной лицензией LGPL/MPL. Библиотека основана на форке iText. В реальности у неё такая история:
LibrePDF/OpenPDF
forked from rtfarte/OpenPDF
forked from kulatamicuda/iText-4.2.0
forked from daviddurand/iText-4.2.0
forked from ymasory/iText-4.2.0
Все форки ведут историю от одной версии iText 4.2.0, которая вышла восемь лет назад и стала последней версией под свободной лицензией. Сами разработчики iText перешли на AGPL и сконцентрировались над созданием пятой версии, чтобы более успешно продавать коммерческий софт. К настоящему времени они доросли до версии iText 7. Но свободный проект тоже не погиб, а продолжил развитие силами всего сообщества.
За прошедшее время библиотека в некоторых отношениях улучшена, исправлено несколько багов. Хотя изменения не слишком значительные, но разработка продолжается, и внести свой вклад может каждый. Если при генерации PDF-файлов вам требуется какая-то конкретная функциональность, то предложите патч и реализуйте эту функцию для всех.
С момента старой «оригинальной» версии 4.2.0 сделаны следующие изменения.
- компиляция с поддержкой Java 8
- в случае неожиданного окончания файла PDF выбрасывается исключение IOException, а не PDFNull
- принят патч для исправления NPE в XFA Form (метод escapeSom)
- принята функциональность UnembedFontPdfSmartCopy от Vicente Alencar
- принята функциональность RTF Footer от ubermichael
- исправление совместимости для поддержки более свежих криптографических библиотек Bouncy Castle (1.54)
- некоторые исправления NPE и «подкрученная» поддержка фреймворка Maven
OpenPDF — удобный способ внедрить в свой проект генерацию документов PDF, в том числе с криптографической цифровой подписью. Это готовый и бесплатный модуль, пригодный для использования в электронном документообороте. И такую систему можно использовать, например, с сертификатами для подписи PDF, чтобы сертифицировать и утверждать PDF-документы. Или интегрировать с сервисом облачных подписей Digital Signing Service от GlobalSign. Хотя последний уже работает, например, с решением для подписи документов Adobe Sign в облаке Adobe Document Cloud.
Поддержка криптобиблиотек Bouncy Castle весьма полезна. В основе архитектуры Bouncy Castle лежит набор низкоуровневых API, которые реализуют все криптографические алгоритмы. Есть поддержка стандартных высокоуровневых криптографических API платформ Java и C#.
Программные интерфейсы Java API от Bouncy Castle в версии 1.53 включали в себя около 400 тыс. строк кода и поддерживали большое количество алгоритмов, в том числе базовую генерацию сертификатов X.509, работу провайдера JCE/JCA, PKCS#10, PKCS#12, S/MIME, OpenPGP, DTLS, TLS, OCSP, TSP, CMP, CRMF, DVCS, DANE, EST, сертификаты Attribute Certificate (AC), которые используются для связывания дополнительной информации с сертификатом открытого ключа.
Нужно заметить, что кроме OpenPDF существуют и другие свободные библиотеки для генерации PDF. Например, есть ещё veraPDF или замечательная библиотека Apache PDFBox. Последняя активно поддерживается и обладает богатым набором функций:
- Извлечение текста Unicode из файлов PDF.
- Слияние нескольких файлов или разбиение одного PDF на части.
- Извлечение данных из форм PDF или заполнение их.
- Валидация PDF на соответствие стандарту PDF/A-1b.
- Печать PDF через стандартные Java API.
- Сохранение в виде изображений, таких как PNG или JPEG.
- Создание PDF с нуля, с внедряемыми шрифтами и иллюстрациями.
- Цифровая подпись PDF.
Так что в наше время вовсе необязательно использовать проприетарные инструменты для создания или редактирования PDF. Для этого есть много свободных альтернатив.
АКЦИЯ GMO GlobalSign Russia для подписчиков Habr
![](https://habrastorage.org/webt/u3/my/b4/u3myb4ifqihiox-vpuqxbx4kij0.jpeg)
Дополнительную информацию вы можете получить, связавшись с менеджером GlobalSign по телефону: +7 (499) 678 2210, или заполните форму на сайте, указав промо-код CS002HBFR.
Комментарии (6)
ystr
16.07.2018 19:37Почти 4 года назад написал библиотеку на JS для разбора, создания любых pdf, а также для создания и проверки подписей. Однако пока код закрыт заказчиком. Написан большой сервис типа DocuSign. Кому-нибудь такая библиотека пригодилась бы?
YourChief
18.07.2018 20:57Да, пригодилась бы очень
ystr
19.07.2018 10:47А в тете просто ужасно сырые данные. Вы познакомитесь со всей внутренней кухней пдф, структурами хранения и трансформациями над изображениями и он заставит вас все это делать ручками ибо изображение он достанет из ресурсов и отдельно матрицу трансформации. А если вдруг вы встретили тифф изображение, то он вам и его разберет на куски.
Вот у меня примерно такая же библиотека — максимально низкоуровневые данные. Можно сделать «helpers» для всяких там добавлений текста и прочая, но эта библиотека создавалась для задачи минимального апдейта существующего документа, создания подписей (вплоть до PAdES LTV), шифрования/расшифрования документов. Красивости и «плюшки» не предусматривались. Вам нужна такая библиотека? И, кстати говоря, под какие именно задачи?
Showvars
17.07.2018 02:29Как то пришлось столкнутся с автоматической генерацией PDF документов в веб приложении на Java. Энтузиазм заставил реализовать
велосипедновую библиотеку для верстки документов со стилями и экспортом в PDF на базе Apache PDFBox. Более менее рабочий прототип конечно получился, но как оказалось все это было зря. В итоге мы остановились на технологиях XSL-FO и процессоре Apache FOP.
DrAlan
Стоило упомянуть TET и PdfBox.
Но я так скажу — каждая из них это «небольшой кошмар в отдельно взятой области памяти».
В PdfBox большая проблема контролировать память если вы обрабатываете по 3000 файлов в час с размерами от 100 до 2000 мегабайт.
А достать координаты изображений вы можете только в качестве логов в консоль.
А в тете просто ужасно сырые данные. Вы познакомитесь со всей внутренней кухней пдф, структурами хранения и трансформациями над изображениями и он заставит вас все это делать ручками ибо изображение он достанет из ресурсов и отдельно матрицу трансформации. А если вдруг вы встретили тифф изображение, то он вам и его разберет на куски.
Посмотрим как будет развиваться опенПдф.