Неделю назад состоялся релиз свободной библиотеки для генерации pdf-файлов версии OpenPDF 1.1.0, самый значительной апгрейд этой библиотеки за последнее время.

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


Дополнительную информацию вы можете получить, связавшись с менеджером GlobalSign по телефону: +7 (499) 678 2210, или заполните форму на сайте, указав промо-код CS002HBFR.

Комментарии (6)


  1. DrAlan
    16.07.2018 16:26

    Стоило упомянуть TET и PdfBox.

    Но я так скажу — каждая из них это «небольшой кошмар в отдельно взятой области памяти».

    В PdfBox большая проблема контролировать память если вы обрабатываете по 3000 файлов в час с размерами от 100 до 2000 мегабайт.
    А достать координаты изображений вы можете только в качестве логов в консоль.

    А в тете просто ужасно сырые данные. Вы познакомитесь со всей внутренней кухней пдф, структурами хранения и трансформациями над изображениями и он заставит вас все это делать ручками ибо изображение он достанет из ресурсов и отдельно матрицу трансформации. А если вдруг вы встретили тифф изображение, то он вам и его разберет на куски.

    Посмотрим как будет развиваться опенПдф.


  1. ystr
    16.07.2018 19:37

    Почти 4 года назад написал библиотеку на JS для разбора, создания любых pdf, а также для создания и проверки подписей. Однако пока код закрыт заказчиком. Написан большой сервис типа DocuSign. Кому-нибудь такая библиотека пригодилась бы?


    1. YourChief
      18.07.2018 20:57

      Да, пригодилась бы очень


      1. ystr
        19.07.2018 10:47

        А в тете просто ужасно сырые данные. Вы познакомитесь со всей внутренней кухней пдф, структурами хранения и трансформациями над изображениями и он заставит вас все это делать ручками ибо изображение он достанет из ресурсов и отдельно матрицу трансформации. А если вдруг вы встретили тифф изображение, то он вам и его разберет на куски.

        Вот у меня примерно такая же библиотека — максимально низкоуровневые данные. Можно сделать «helpers» для всяких там добавлений текста и прочая, но эта библиотека создавалась для задачи минимального апдейта существующего документа, создания подписей (вплоть до PAdES LTV), шифрования/расшифрования документов. Красивости и «плюшки» не предусматривались. Вам нужна такая библиотека? И, кстати говоря, под какие именно задачи?


  1. Showvars
    17.07.2018 02:29

    Как то пришлось столкнутся с автоматической генерацией PDF документов в веб приложении на Java. Энтузиазм заставил реализовать велосипед новую библиотеку для верстки документов со стилями и экспортом в PDF на базе Apache PDFBox. Более менее рабочий прототип конечно получился, но как оказалось все это было зря. В итоге мы остановились на технологиях XSL-FO и процессоре Apache FOP.


  1. al_sh
    17.07.2018 16:44

    К Qt pdfium прикрутили вроде. Пользуюсь pdfium-ом — и разбирает и собирает