уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Этот пост можно считать небольшим продолжением статьи-обзора «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 нет, поэтому регистрируемся и получаем доступ к контрольной панели сервиса. Выглядит панель следующим образом:

Панель управления ConvertAPI

Панель управления ConvertAPI

Для работы с 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;

Здесь используются всего два обязательных параметра запроса:

В итоге, если все пройдет гладко — в запросе не будет содержаться никаких ошибок, что сервис вернет нам PDF-документ содержащий нашу страничку, включая все её содержимое — скрипты, фон страницы, картинки и т.д.

Для уменьшения размера выходного pdf-файла можно использовать параметр background=false, тогда в выходном файлике будет отсутстовать фон, а сам файл будет выглядеть так:

PDF-документ

Кроме этого, 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-документ:

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 запроса состоит из следующих частей:

  1. http://api.joliprint.com — сервер
  2. /rest/url/ — путь к API
  3. print — используемый метод API (также могут использоваться методы xmljsonjpgtext)
  4. s/foo?url= — опции преобразования. При этом foo — это строка, содержащая название приложения, использующего api.

В итоге сервис вернул мне PDF-документ со следующим содержимым:

PDF-документ от JoliPrint

Как видно на рисунке, сервис использует собственное оформление документа — убрано все лишнее типа кнопок соц.сетей, шапки сайта и т.д., а сам документ имеет двухколоночную структуру.

Может для сохранения web-страничек, содержащих программный код, такая структура документа не совсем удачна, но стоит отметить, что документ получается по внешнему виду очень неплохой.

Вот, собственно, Вам и пища к размышлению относительно вопроса «Как создать PDF из web-страницы?». Используйте один из этих сервисов и будет вам счастье :)

Кстати, буду благодарен, если в комментариях к этому посту Вы накидаете мне ещё ссылок на сервисы или компоненты, которую позволяют решать задачу преобразования страниц сайта в PDF, используя в работе Delphi. Эта информация мне пригодиться.

Книжная полка

Описание: Рассмотрены практические вопросы по разработке клиент-серверных приложений в среде Delphi 7 и Delphi 2005 с использованием СУБД MS SQL Server 2000, InterBase и Firebird. Приведена информация о теории построения реляционных баз данных и языке SQL. Освещены вопросы эксплуатации и администрирования СУБД.
купить книгу delphi на ЛитРес
Описание: Рассмотрены малоосвещенные вопросы программирования в Delphi. Описаны методы интеграции VCL и API. Показаны внутренние механизмы VCL и приведены примеры вмешательства в эти механизмы. Рассмотрено использование сокетов в Delphi: различные режимы их работы, особенности для протоколов TCP и UDP и др.
купить книгу delphi на ЛитРес
уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
1 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
trackback
С Днем Рождения DelphiFeeds.ru! | Delphi в Internet
25/11/2012 01:19

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