Учебник РНР
Назад Вперёд

LXXVI. Функции PDF

Введение

Функции PDF в PHP могут создавать PDF-файлы с использованием библиотеки PDFlib, автор Thomas Merz. PDFlib доступна для загрузки на http://www.pdflib.com/pdflib/index.html, но требует приобретения лицензии для коммерческого использования. Библиотеки JPEG и TIFF необходимы для компилирования этого приложения. См. в разделе Инсталяция PDFlib о компиляции поддержки PDF в PHP.

Документация этого раздела является обзором функций библиотеки PDFlib и не может считаться исчерпывающим справочником. Консультируйтесь в сопровождающей документации дистрибутива PDFlib. Там содержится полноценный обзор возможностей функций библиотеки PDFlib и самая свежая информация обо всех функциях.

В библиотеке PDFlib и в модуле PHP все функции и параметры имеют идентичные имена. Вам необходимо разобраться в некоторых основных понятиях PDF и PostScript, чтобы эффективно использовать это расширение.
Все размеры и координаты измеряются в пунктах PostScript. Обычно имеется 72 PostScript-пункта на дюйм, но это зависит от разрешающей способности на выводе. См. в PDFlib-документации, включённой в дистрибутив PDFlib, объяснение используемой системы координат.

Обратите внимание, что  большинство функций PDF требуют pdf object в качестве первого параметра. См. примеры далее.

Примечание: Имеется альтернативный модуль PHP для создания PDF-документов на базе FastIO's ClibPDF. См. раздел ClibPDF. Обратите внимание, что ClibPDF имеет несколько иной API по сравнению с PDFlib.

Конфликты со старыми версиями PDFlib

Начиная с PHP 4.0.5, PHP-расширение для PDFlib официально поддерживается компанией PDFlib GmbH. Это означает, что все функции, описанные в учебнике PDFlib (V3.00 или выше), поддерживаются в PHP 4  с точно теми же значениями и параметрами. Только return-значения могут отличаться от учебника PDFlib, так как используется соглашение PHP по возвращению FALSE. Из соображений совместимости эта привязка к PDFlib всё ещё поддерживает старые функции, но они должны быть заменены их новыми версиями. PDFlib GmbH не будет рассматривать проблемы, возникающие при использовании этих старых функций.

Таблица 1. Не рекомендуемые функции и их замены
Старая функцияЗамена
pdf_put_image() Больше не нужна.
pdf_execute_image()Больше не нужна.
pdf_get_annotation()pdf_get_bookmark() с использованием тех же параметров.
pdf_get_font() pdf_get_value() с передачей "font" в качестве второго параметра.
pdf_get_fontsize() pdf_get_value() с передачей "fontsize" в качестве второго параметра.
pdf_get_fontname() pdf_get_parameter() с передачей "fontname" в качестве второго параметра.
pdf_set_info_creator() pdf_set_info() с передачей "Creator" в качестве второго параметра.
pdf_set_info_title() pdf_set_info() с передачей "Title" в качестве второго параметра.
pdf_set_info_subject() pdf_set_info() с передачей "Subject" в качестве второго параметра.
pdf_set_info_author() pdf_set_info() с передачей "Author" в качестве второго параметра.
pdf_set_info_keywords() pdf_set_info() с передачей "Keywords" в качестве второго параметра.
pdf_set_leading() pdf_set_value() с передачей "leading" в качестве второго параметра.
pdf_set_text_rendering() pdf_set_value() с передачей "textrendering" в качестве второго параметра.
pdf_set_text_rise() pdf_set_value() с передачей "textrise" в качестве второго параметра.
pdf_set_horiz_scaling() pdf_set_value() с передачей "horizscaling" в качестве второго параметра.
pdf_set_text_matrix()Больше не доступна.
pdf_set_char_spacing() pdf_set_value() с передачей "charspacing" в качестве второго параметра.
pdf_set_word_spacing() pdf_set_value() с передачей "wordspacing" в качестве второго параметра.
pdf_set_transition()pdf_set_parameter() с передачей "transition" в качестве второго параметра.
pdf_open() pdf_new() плюс последующий вызов pdf_open_file()
pdf_set_font() pdf_findfont() плюс последующий вызов pdf_setfont()
pdf_set_duration() pdf_set_value() с передачей "duration" в качестве второго параметра.
pdf_open_gif() pdf_open_image_file() с передачей "gif" в качестве второго параметра.
pdf_open_jpeg() pdf_open_image_file() с передачей "jpeg" в качестве второго параметра.
pdf_open_tiff() pdf_open_image_file() с передачей "tiff" в качестве второго параметра.
pdf_open_png() pdf_open_image_file() с передачей "png" в качестве второго параметра.
pdf_get_image_width() pdf_get_value() с передачей "imagewidth" в качестве второго параметра и изображения в качестве третьего параметра.
pdf_get_image_height() pdf_get_value() с передачей "imageheight" в качестве второго параметра и изображения в качестве третьего параметра.

Подсказки по установке PDFlib 3.x

При использовании версии 3.x библиотеки PDFlib вы должны сконфигурировать PDFlib с опцией
--enable-shared-pdflib
.

Вопросы по старым версиям PDFlib

Любые версии PHP 4 после 9 марта 2000 не поддерживают версии PDFlib, ранее 3.0.

PDFlib 3.0 или выше поддерживается в PHP 3.0.19 и позднее.

Примеры

Большинство функций довольно легко использовать. Самое трудное это, пожалуй, создание очень простого PDF-документа. Следующий пример должен помочь начать. Он создаёт test.pdf из одной страницы. Эта страница содержит текст "Times Roman outlined" шрифтом outlined 30pt. Текст также подчёркнут.

Пример 1. Создание PDF-документа с помощью PDFlib

<?php
$pdf = pdf_new();
pdf_open_file($pdf, "test.pdf");
pdf_set_info($pdf, "Author", "Uwe Steinmann");
pdf_set_info($pdf, "Title", "Test for PHP wrapper of PDFlib 2.0");
pdf_set_info($pdf, "Creator", "См. Author");
pdf_set_info($pdf, "Subject", "Testing");
pdf_begin_page($pdf, 595, 842);
pdf_add_outline($pdf, "Page 1");
pdf_set_font($pdf, "Times-Roman", 30, "host");
pdf_set_value($pdf, "textrendering", 1);
pdf_show_xy($pdf, "Times Roman outlined", 50, 750);
pdf_moveto($pdf, 50, 740);
pdf_lineto($pdf, 330, 740);
pdf_stroke($pdf);
pdf_end_page($pdf);
pdf_close($pdf);
pdf_delete($pdf);
echo "<A HREF=getpdf.php>finished</A>";
?>

Скрипт getpdf.php возвращает pdf-документ.

<?php
$len = filesize($filename);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
readfile($filename);
?>

Дистрибутив PDFlib содержит более сложный пример, где создаётся страница с аналоговыми часами. Здесь мы используем возможность PDFlib создания в памяти, чтобы не использовать временные файлы. Этот пример, конвертированный в PHP из примера PDFlib, таков: (Такой же пример имеется в документации CLibPDF.)

Пример 2. pdfclock из дистрибутива PDFlib

<?php
$radius = 200;
$margin = 20;
$pagecount = 10;

$pdf = pdf_new();

if (!pdf_open_file($pdf, "")) {
    print error;
    exit;
};

pdf_set_parameter($pdf, "warning", "true");

pdf_set_info($pdf, "Creator", "pdf_clock.php");
pdf_set_info($pdf, "Author", "Uwe Steinmann");
pdf_set_info($pdf, "Title", "Analog Clock");

while($pagecount-- > 0) {
    pdf_begin_page($pdf, 2 * ($radius + $margin), 2 * ($radius + $margin));

    pdf_set_parameter($pdf, "transition", "wipe");
    pdf_set_value($pdf, "duration", 0.5);
  
    pdf_translate($pdf, $radius + $margin, $radius + $margin);
    pdf_save($pdf);
    pdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);

    /* отсчёт минут */
    pdf_setlinewidth($pdf, 2.0);
    for ($alpha = 0; $alpha < 360; $alpha += 6) {
        pdf_rotate($pdf, 6.0);
        pdf_moveto($pdf, $radius, 0.0);
        pdf_lineto($pdf, $radius-$margin/3, 0.0);
        pdf_stroke($pdf);
    }

    pdf_restore($pdf);
    pdf_save($pdf);

    /* 5 minute strokes */
    pdf_setlinewidth($pdf, 3.0);
    for ($alpha = 0; $alpha < 360; $alpha += 30) { 
        pdf_rotate($pdf, 30.0);
        pdf_moveto($pdf, $radius, 0.0);
        pdf_lineto($pdf, $radius-$margin, 0.0);
        pdf_stroke($pdf);
    }

    $ltime = getdate();

    /* рисовать часовую стрелку */
    pdf_save($pdf);
    pdf_rotate($pdf,-(($ltime['minutes']/60.0)+$ltime['hours']-3.0)*30.0);
    pdf_moveto($pdf, -$radius/10, -$radius/20);
    pdf_lineto($pdf, $radius/2, 0.0);
    pdf_lineto($pdf, -$radius/10, $radius/20);
    pdf_closepath($pdf);
    pdf_fill($pdf);
    pdf_restore($pdf);

    /* рисовать минутную стрелку  */
    pdf_save($pdf);
    pdf_rotate($pdf,-(($ltime['seconds']/60.0)+$ltime['minutes']-15.0)*6.0);
    pdf_moveto($pdf, -$radius/10, -$radius/20);
    pdf_lineto($pdf, $radius * 0.8, 0.0);
    pdf_lineto($pdf, -$radius/10, $radius/20);
    pdf_closepath($pdf);
    pdf_fill($pdf);
    pdf_restore($pdf);

    /* рисовать секундную стрелку  */
    pdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
    pdf_setlinewidth($pdf, 2);
    pdf_save($pdf);
    pdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
    pdf_moveto($pdf, -$radius/5, 0.0);
    pdf_lineto($pdf, $radius, 0.0);
    pdf_stroke($pdf);
    pdf_restore($pdf);

    /* рисовать небольшой кружок в центре */
    pdf_circle($pdf, 0, 0, $radius/30);
    pdf_fill($pdf);

    pdf_restore($pdf);

    pdf_end_page($pdf);

    # чтобы увидеть некоторую разницу
    sleep(1);
}

pdf_close($pdf);

$buf = pdf_get_buffer($pdf);
$len = strlen($buf);

header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=foo.pdf");
print $buf;

pdf_delete($pdf);
?>
Содержание
pdf_add_annotation - не рекомендуется: добавляет аннотацию
pdf_add_bookmark - добавляет закладку на текущей странице
pdf_add_launchlink - добавляет запускающую аннотацию на текущей странице
pdf_add_locallink - добавляет аннотацию-ссылку на текущей странице
pdf_add_note - добавляет аннотацию-заметку на текущей странице
pdf_add_outline - не рекомендуется: добавляет закладку на текущей странице
pdf_add_pdflink - добавляет ссылку-аннотацию на файл на текущей странице
pdf_add_thumbnail - добавляет уменьшенную версию/thumbnail на текущей странице
pdf_add_weblink - добавляет web-ссылку на текущей странице
pdf_arc - рисует дугу (против часовой стрелки)
pdf_arcn - рисует дугу (по часовой стрелке)
pdf_attach_file - добавляет присоединение файла на текущей странице
pdf_begin_page - начинает новую страницу
pdf_begin_pattern - начинает новый патэрн
pdf_begin_template - начинает новый шаблон
pdf_circle - рисует круг
pdf_clip - обрезает до текущего пути/path
pdf_close_image - закрывает изображение
pdf_close_pdi_page - закрывает дескриптор страницы
pdf_close_pdi - закрывает ввод PDF-документа
pdf_close - закрывает pdf-объект
pdf_closepath_fill_stroke - закрывает, заполняет и очерчивает текущий путь
pdf_closepath_stroke - закрывает путь и рисует линию вокруг пути
pdf_closepath - закрывает путь
pdf_concat - конкатенация матрицы с CTM
pdf_continue_text - выводит текст в следующей строчке
pdf_curveto - рисует кривую
pdf_delete - удаляет PDF-объект
pdf_end_page - заканчивает страницу
pdf_end_pattern - заканчивает патэрн
pdf_end_template - заканчивает шаблон
pdf_endpath - не рекомендуется: заканчивает текущий путь
pdf_fill_stroke - заполняет и очерчивает текущий путь
pdf_fill - заполняет текущий путь
pdf_findfont - готовит шрифт для последующего использования с pdf_setfont()
pdf_get_buffer - извлекает буфер, содержащий сгенерированные PDF-данные
pdf_get_font - не рекомендуется: работа со шрифтом
pdf_get_fontname - не рекомендуется: работа со шрифтом
pdf_get_fontsize - не рекомендуется: работа со шрифтом
pdf_get_image_height - возвращает высота изображения
pdf_get_image_width - возвращает ширина изображения
pdf_get_majorversion - возвращает наибольший номер версии PDFlib
pdf_get_minorversion - возвращает наименьший номер версии PDFlib
pdf_get_parameter - получает определённые параметры
pdf_get_pdi_parameter - получает некоторые строковые параметры PDI
pdf_get_pdi_value - получает некоторые числовые параметры PDI
pdf_get_value - получает некоторое числовое значение
pdf_initgraphics - переустанавливает графический статус
pdf_lineto - рисует линию
pdf_makespotcolor - делает spotcolor
pdf_moveto - устанавливает текущую точку
pdf_new - создаёт новый pdf-объект
pdf_open_CCITT - открывает новый файл изображения с необработанными CCITT-данными
pdf_open_file - открывает новый pdf-объект
pdf_open_gif - не рекомендуется: открывает GIF-изображение
pdf_open_image_file - читает изображение из файла
pdf_open_image - Versatile-функция для изображений
pdf_open_jpeg - не рекомендуется: открывает JPEG-изображение
pdf_open_memory_image - открывает изображение, создаваемое РНР-функциями изображений
pdf_open_pdi_page - готовит страницу
pdf_open_pdi - открывает PDF-файл
pdf_open_png - не рекомендуется: открывает PNG-изображение
pdf_open_tiff - не рекомендуется: открывает TIFF-изображение
pdf_open - не рекомендуется: открывает новый pdf-объект
pdf_place_image - помещает изображение на страницу
pdf_place_pdi_page - помещает изображение на страницу
pdf_rect - рисует прямоугольник
pdf_restore - восстанавливает ранее сохранённое окружение
pdf_rotate - устанавливает поворот
pdf_save - сохраняет текущее окружение
pdf_scale - устанавливает масштабирование
pdf_set_border_color - устанавливает цвет рамки вокруг ссылок и аннотаций
pdf_set_border_dash - устанавливает стиль пунктирной рамки вокруг ссылок и аннотаций
pdf_set_border_style - устанавливает стиль рамки вокруг ссылок и аннотаций
pdf_set_char_spacing - не рекомендуется: устанавливает расстояние между символами
pdf_set_duration - не рекомендуется: устанавливает расстояние между страницами
pdf_set_font - не рекомендуется: выбирает шрифт и размер
pdf_set_horiz_scaling - устанавливает масштабирование текста по горизонтали
pdf_set_info_author - заполняет поле author документа
pdf_set_info_creator - заполняет поле creator документа
pdf_set_info_keywords - заполняет поле keywords документа
pdf_set_info_subject - заполняет поле subject документа
pdf_set_info_title - заполняет поле title документа
pdf_set_info - заполняет поле информации документа
pdf_set_leading - не рекомендуется: устанавливает расстояние между строками текста
pdf_set_parameter - устанавливает некоторые параметры
pdf_set_text_matrix - не рекомендуется: устанавливает матрицу текста
pdf_set_text_pos - устанавливает позицию текста
pdf_set_text_rendering - не рекомендуется: определяет отображение текста
pdf_set_text_rise - не рекомендуется: устанавливает возвышение текста
pdf_set_value - устанавливает некоторое числовое значение
pdf_set_word_spacing - не рекомендуется: устанавливает расстояние/spacing между словами
pdf_setcolor - устанавливает цвет заполнения и подчёркивания
pdf_setdash - устанавливает патэрн пунктира
pdf_setflat - устанавливает плоскость/flatness
pdf_setfont - устанавливает текущий шрифт
pdf_setgray_fill - устанавливает цвет заполнения - значение gray
pdf_setgray_stroke - устанавливает цвет рисования - значение gray
pdf_setgray - устанавливает цвета рисования и заполнения - значение gray
pdf_setlinecap - устанавливает параметр linecap
pdf_setlinejoin - устанавливает параметр linejoin
pdf_setlinewidth - устанавливает ширину линии
pdf_setmatrix - устанавливает текущую матрицу трансформации
pdf_setmiterlimit - устанавливает miter limit/границу наклона
pdf_setpolydash - устанавливает сложный пунктирный патэрн
pdf_setrgbcolor_fill - устанавливает цвет заполнения - rgb-значение
pdf_setrgbcolor_stroke - устанавливает цвет рисования - rgb-значение
pdf_setrgbcolor - устанавливает цвета рисования и заполнения - rgb-значение
pdf_show_boxed - выводит текст в боксе
pdf_show_xy - выводит текст в данной позиции
pdf_show - выводит текст в текущей позиции
pdf_skew - наклоняет систему координат
pdf_stringwidth - возвращает ширину текста с использованием текущего шрифта
pdf_stroke - рисует линию вдоль пути
pdf_translate - устанавливает точку отсчёта системы координат

НазадОглавление Вперёд
overloadВверх pdf_add_annotation