Этот пост можно считать небольшим продолжением статьи-обзора «5 способов создания PDF«, но только здесь уже будет не обзор, а работа — работа по созданию PDF-документа из любого URL. В Сети есть достаточно много интересных и не очень решений по созданию PDF из URL. В основном это какие-то плагины для сайтов (типа как в блоге), небольшие программки для iPhone/iPad и т.д. Наверное, одним из популярных сервисов в этой области можно назвать web2pdf.ru — небольшой удобный сервис, позволяющий вставить на свой сайт кнопку для сохранения web-странички в PDF-документ. И таких сервисов полно — от маленьких до больших, навороченных, с возможностью задания большого количества настроек pdf-документа. В поисках подходящего API для работы я наткнулся на пару довольно интересных сервисов предоставляющих API для разработчиков. Вот о работе с ними сегодня и пойдет речь в этой небольшой заметке. Ну, а для работы нам с Вами понадобиться Synapse.
ConvertAPI
Сервис ConvertAPI предоставляет разработчикам сразу ряд различных API для работы. Кроме рассматриваемого сегодня web2pdf API, в ConvertAPI есть также:
- Pdf2Image— преобразование страниц pdf-документа в png- и jpg-изображения
- Web2Image — преобразование страниц сайта в png- и jpeg-изображение (получение скриншотов)
- Excel2Pdf — преобразование Excel-файлов в pdf
- и т.д.
Для доступа к API можно использовать либо платный аккаунт, либо бесплатный. Бесплатный аккаунт ограничен 500 успешными запросами к сервису и вполне подойдет для ознакомительных целей или написания программки «для себя». Регистрация довольно простая, никаких подтверждений email нет, поэтому регистрируемся и получаем доступ к контрольной панели сервиса. Выглядит панель следующим образом:
Для работы с API нам понадобиться ключ доступа, который можно получить все в той же панели управления. Документация по web2pdf API находится здесь. Открываем документацию начинаем писать свой модуль Delphi для сохранения любой страницы сайта в pdf-документ.
Первое, что подкупает при работе с web2pdf — это большое количество настроек для pdf-документа: настройки колонтитулов, возможность печати в низком качестве, настройка шрифтов и т.д. Правда на поверку оказывается, что далеко не все эти опции корректно работают даже в официальном web-сервисе, использующем этот API, но это уже вопрос к разработчикам. Наше дело — посмотреть как работает этот APIи что мы можем получить на выходе.
Самый простой пример создания PDF из URL, используя ConverterAPI выглядит следующим образом:
const cURL = 'http://do.convertapi.com/Web2Pdf'; begin with THTTPSend.Create do if HTTPMethod('GET', cURL+?ApiKey=1234567890&CUrl=http%3A%2F%2Fwww.webdelphi.ru%2F2011%2F05%2F5-sposobov-sozdaniya-pdf%2F&) then Document.SaveToFile('MyPDF.pdf'); end;
Здесь используются всего два обязательных параметра запроса:
- ApiKey — ключ доступа к API
- CUrl — URL странички для сохранения в pdf. В нашем случае это был URL http://webdelphi.ru/2011/05/5-sposobov-sozdaniya-pdf/
В итоге, если все пройдет гладко — в запросе не будет содержаться никаких ошибок, что сервис вернет нам PDF-документ содержащий нашу страничку, включая все её содержимое — скрипты, фон страницы, картинки и т.д.
Для уменьшения размера выходного pdf-файла можно использовать параметр background=false, тогда в выходном файлике будет отсутстовать фон, а сам файл будет выглядеть так:
Кроме этого, ConverterAPI позволяет добавлять в документы свои колонтитулы для чего могут использоваться сразу шесть параметров в запросе:
- Для шапки документа
- HeaderTextLeft
- HeaderTextCenter
- HeaderTextRight
- Для подвала
- FooterTextLeft
- FooterTextCenter
- FooterTextRight
При этом в тексте колонтитулов можно использовать смарт-теги. Например, можно создать PDF с таким верхним колонтитулом:
const cURL = 'http://do.convertapi.com/Web2Pdf'; begin with THTTPSend.Create do if HTTPMethod('GET', cURL+?ApiKey=1234567890&CUrl=http%3A%2F%2Fwww.webdelphi.ru%2F2011%2F05%2F5-sposobov-sozdaniya-pdf%2F&HeaderTextLeft=The+PDF+was+saved+from+[webpage]+at+[date]+[time]) then Document.SaveToFile('MyPDF.pdf'); end;
Здесь мы использовали параметр HeaderTextLeft, содержащий текст «The PDF was saved from [webpage] at [date] [time]» в итоге был получен следующий PDF-документ:
В общем и целом ConverterAPI оказался довольно мощным сервисом по созданию PDF из web-страничек. Немного огорчает, конечно, ценник на платные аккаунты, но тут уж ничего не сделаешь — каждый зарабатывает как может.
В итоге, поработав немного с API этого сервиса я решил продолжить поиски других API для создания PDF и, в итоге, обнаружил ещё один — joliprint.com.
JoliPrint
В отличие от ConverterAPI, JoliPrint не взимает никакой платы за пользование своим API, но, т.к. бесплатный сыр бывает только в мышеловке, то в выходном PDF-документе будут содержаться ссылки на сервис. Если Вас не огорчает факт наличия посторонних ссылок в документе, то читайте далее про работу с JoliPrint.
Документация по API JoliPrint находится здесь. При работе с API мы можем получать PDF-документ напрямую или, используя различные методы API получать вначале результат преобразования в виде XML или JSON-документа в котором будет содержаться ссылка на загрузку готового PDF-документа. Пример получения PDF-документа напрямую:
with THTTPSend.Create do begin if HTTPMethod('GET', 'http://api.joliprint.com/api/rest/url/print/s/foo?url=http%3A%2F%2Fwww.webdelphi.ru%2F2011%2F05%2F5-sposobov-sozdaniya-pdf%2F') then Document.SaveToFile('Jolipdf.pdf'); end;
Здесь URL запроса состоит из следующих частей:
- http://api.joliprint.com — сервер
- /rest/url/ — путь к API
- print — используемый метод API (также могут использоваться методы xml, json, jpg, text)
- s/foo?url= — опции преобразования. При этом foo — это строка, содержащая название приложения, использующего api.
В итоге сервис вернул мне PDF-документ со следующим содержимым:
Как видно на рисунке, сервис использует собственное оформление документа — убрано все лишнее типа кнопок соц.сетей, шапки сайта и т.д., а сам документ имеет двухколоночную структуру.
Может для сохранения web-страничек, содержащих программный код, такая структура документа не совсем удачна, но стоит отметить, что документ получается по внешнему виду очень неплохой.
Вот, собственно, Вам и пища к размышлению относительно вопроса «Как создать PDF из web-страницы?». Используйте один из этих сервисов и будет вам счастье :)
Кстати, буду благодарен, если в комментариях к этому посту Вы накидаете мне ещё ссылок на сервисы или компоненты, которую позволяют решать задачу преобразования страниц сайта в PDF, используя в работе Delphi. Эта информация мне пригодиться.
Книжная полка
![]() |
Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
|
![]() |
![]() |
Название: О чем не пишут в книгах по Delphi
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
|
![]() |








[…] работа с JoliPrint API, о котором я рассказывал буквально на днях. Основной путь к PDF-копиям публикаций указывается в […]