Как добавить поддержку PDF в свою программу?
Формат PDF используется повсеместно, и сегодня у каждого разработчика заказчики или пользователи могут попросить добавить поддержку работы с PDF практически в любое приложение. Вот давайте и посмотрим, с помощью каких сторонних разработок можно добавить поддержу PDF в приложения, созданные с использованием разных языков программирования и технологий.
Кому вообще нужна эта поддержка PDF?
Конечно, если вы разрабатываете какую-то игру или, например, проигрыватель, то вам поддержка PDF вряд ли понадобится. Но если вы разрабатываете какое-то приложение, связанное, скажем, с документооборотом, или систему управления кадрами, где нужно формировать различные отчёты, то вам реализовывать работу с этим популярным форматом придётся с весьма высокой степенью вероятности.
Что вообще означает фраза "внедрение поддержки PDF"? Вообще говоря, поддержка PDF может быть трёх видов: поддержка экспорта данных в формат PDF, поддержка импорта документов этого формата и поддержка просмотра PDF-документов в приложении. Большая часть пакетов для реализации поддержки PDF предназначена для добавления импорта и экспорта. Впрочем, говорить лучше подробнее о каждой подобной библиотеке - чем мы с вами, собственно говоря, и займёмся.
Несколько слов о самом формате
Прежде чем продолжать разговор о библиотеках, обеспечивающих поддержку PDF в различных приложениях, нужно пару слов сказать и о самом формате. Конечно, он достаточно популярен, и вы сами наверняка активно пользуетесь PDF-документами, однако кратко напомнить об особенностях формата PDF, я думаю, не помешает.
PDF - это аббревиатура от "Portable Document Format", или, если по-русски, переносимый формат документов. Создан он давно тому назад компанией Adobe и удобен, в первую очередь, тем, что документы в нём одинаково выглядят на любых платформах и даже при распечатке. PDF-документы могут содержать текст, графику (как растровую, так и векторную), включать в себя шрифты, а с некоторых пор ещё и трёхмерные объекты. С 2008 года PDF является открытым форматом, официально стандартизованным ISO.
Если посмотреть "внутрь" формата, то можно увидеть, что он, в общем-то, не сильно простой, особенно если вам требуется реализовать не экспорт документов, а их импорт или просмотр. Собственно говоря, именно поэтому мы здесь даже и не будем пытаться разбираться с написанием поддержки PDF собственными силами, а сразу будем смотреть в сторону готовых решений.
Что предлагает сама Adobe?
Было бы логично предположить, что сама компания Adobe может предложить что-нибудь программистам, которые желают включить поддержку PDF в своё приложение. Давайте посмотрим, насколько справедливым окажется такое предположение.
Внедрить просмотр PDF для Windows-приложений, в принципе, не так уж сложно - можно взять ActiveX-компонент, которым пользуется сама Adobe в своих продуктах. Что касается экспорта документов в формат PDF, то можно использовать связку GhostScript + Adobe Acrobat Distiller, хорошо зарекомендовавшую себя в разных бесплатных продуктах по созданию PDF. Есть возможность также работать с установленным у пользователя Adobe Acrobat с помощью Acrobat SDK, но для этого пользователю придётся купить сам Adobe Acrobat, что вряд ли прибавит очков вашему программному продукту. Так что это всё, скажем так, не очень удобно, да и не Windows единой жив формат PDF. Поэтому стоит посмотреть, наверное, всё-таки в сторону различных сторонних решений.
Предложения от Foxit Software
Второй по счёту после Adobe по известности и по значимости компанией в области продуктов для работы с PDF является Foxit Software. Возможно, вы даже пользуетесь их замечательным вьювером Foxit Reader, который, в отличие от Adobe Reader'а, очень быстро запускается и занимает мало места на жёстком диске. Так вот, у Foxit Software есть такой интересный, с точки зрения разработчика, программный продукт, как Foxit PDF SDK. Именно он пригодится тем, кто желает внедрить поддержку SDK в своё приложение.
Foxit PDF SDK для Windows предлагается как в виде ActiveX-компонента, так и в виде обычной DLL-ки с набором заголовочных файлов для её подключения к проекту. С помощью Foxit PDF SDK вы можете реализовать в своём приложении просмотр PDF-документов, а также осуществлять отдельно работу с текстовой частью содержимого документа. Есть также возможность создавать PDF-документы; добавлять страницы в существующие документы или, напротив, удалять их; извлекать отдельные объекты (текст, линии, рисунки, формы) из PDF-документа и работать с ними, изменять их, добавлять новые объекты. В целом, как видите, возможности весьма неплохие.
При этом, кстати, Foxit PDF SDK доступен не только тем, кто пишет приложения под Windows. На сайте компании Foxit Software написано, что есть версии для Linux и Mac OS X, но для того, чтобы посмотреть на них воочию, нужно написать письмо разработчикам. Единственное, что не очень приятно в случае с Foxit PDF SDK, - это политика лицензирования, где цена библиотеки зависит от количества копий вашей программы, которые будут распространены. Так что если вы пишете приложение для использования внутри какой-то конкретной, пусть и большой, компании, то это, в общем-то, не так и печально. Но если вы разрабатываете "коробочный" продукт, имеет смысл посмотреть на другие библиотеки. Например, на бесплатные.
Haru Free PDF
Если погуглить, легко найти обсуждения PDF-библиотек разработчиками, которые дружно сходятся во мнении, что лучшая бесплатная библиотека для работы с PDF-документами - это Haru Free PDF. Она, в отличие от решения, предлагаемого Foxit Software, работает только в одну сторону: то есть, вам предлагается генерация PDF-файлов. Но, поскольку во множестве приложений вполне достаточно и поддержки экспорта в PDF, думаю, Haru Free PDF вполне заслуживает места в данном обзоре.
Haru Free PDF - это кросс-платформенная open-source библиотека, использовать которую можно в приложениях, которые пишутся практически на любых языках. Демонстрационные примеры, по крайней мере, есть и на C, и на Delphi, и даже на Ruby. Сама же библиотека написана на C, что обеспечивает очень хорошую её переносимость между разными ОС. Поддерживает эта библиотека генерацию PDF'ов с включением в них текста, изображений и линий, аннотаций к тексту и к ссылкам в тексте, Type1 и TrueType-шрифтов. Можно создавать зашифрованные PDF-файлы, использовать различные кодировки для текста (ISO8859-1~16, MSCP1250~8, KOI8-R), компрессировать данные в документе с помощью алгоритма deflate.
iText
Глядя на название этой библиотеки, можно подумать, что она сделана для iPhone-программистов, но это не так. Это ещё одна бесплатная кросс-платформенная библиотека, но написанная уже на Java. Ведь Java-программистам тоже нужно как-то внедрять поддержку PDF в разрабатываемые ими приложения, не так ли?
Библиотека эта рассчитана на генерацию PDF-документов "на лету" в web-приложениях. Возможности у неё, надо сказать, шире, чем у Haru Free PDF, и генерировать она умеет не только PDF'ы, но ещё и RTF'ы. Что, в общем-то, само по себе очень даже радует. В целом, это достаточно известная и распространённая библиотека, по которой есть масса разной документации и которую достаточно удобно использовать в своих приложениях.
FPDF
Для PHP-разработчиков тоже есть своя библиотека, которая позволит им "на лету" генерировать PDF-документы. Учитывая, что в последнее время всё большее количество web-приложений обзаводятся поддержкой сохранения пользовательских данных в формат PDF, эта библиотека тоже явно не будет лишней в нашем обзоре.
FPDF написана на чистом PHP, то есть, без использования PDFlib. Поддерживается внедрение в документы изображений, Type1 и TrueType-шрифтов, автоматическое разбиение документа на страницы, и, что немаловажно для web-приложений, сжатие получающихся в итоге документов (но для этого нужна zlib). Поддерживаются PHP4 и PHP5, документация по библиотеке на её официальном сайте, в целом, довольно подробная, есть (на нём же) неплохо так посещаемый форум, так что если что какое, то сообщество пользователей этой библиотеки вам с радостью придёт на помощь.
PDFSharp
Если есть PDF-библиотека для Java, должна быть и для .NET. На самом деле, и для того, и для другого разных библиотек просто море, но действительно стоящих среди них немного. PDFSharp как раз относится к тем немногочисленным, но действительно качественным библиотекам.
Библиотека написана на чистом C#, что весьма приятно, и поддерживает, в общем-то, практически такой же "джентльменский набор"возможностей. Правда, в отличие от предыдущих библиотек, эта позволяет модифицировать и уже имеющиеся PDF-документы. При этом сама библиотека бесплатная, но её авторы с удовольствием продадут вам гарантированную техническую поддержку. Документацией и вниманием сообщества .NET-разработчиков эта библиотека тоже не обижена.
Продукты llionSoft
Для Delphi-программистов тоже есть отличные PDF-библиотеки. Например, llPDFLib производства компании llionSoft. Поддерживает она немало разных вещей - и формы, и "водяные знаки" (watermarks), и JavaScript, и компрессию, и аннотации, и включение в итоговый документ шрифтов... В общем, возможности довольно широкие. Но сама библиотека при этом не бесплатная, что в некотором роде является минусом.
Кстати говоря, у компании llionSoft есть продукты не только для Delphi-программистов - есть, например, ActiveX-компонент для создания PDF'ов под названием llPDFLibX. Думаю, этот продукт тоже заинтересует разработчиков, желающих добавить поддержку PDF в Windows-приложения.
Резюме
Поддержку PDF сегодня несложно добавить практически в любой программный продукт, особенно если у вас достаточно денег, чтобы купить качественную библиотеку для работы с PDF-документами. Если же с деньгами, что называется, напряжёнка, то можно присмотреться к бесплатным решениям, которых тоже хватает. Как говорится, было бы желание.
Вадим СТАНКЕВИЧ,
[email protected]
Горячие темы