|
X. Функции ClibPDF
Библиотека ClibPDF даёт возможность создавать PDF-документы с помощью PHP.
Её можно загрузить с FastIO, но необходимо приобрести лицензию для коммерческого использования.
Функциональность и API ClibPDF аналогичны PDFlib.
Этот документ необходимо читать вместе с учебником ClibPDF, поскольку там
библиотека рассматривается более детально.
Многие функции в модулях ClibPDF и PHP, а также в
PDFlib, называются одинаково. Все функции, за исключением
cpdf_open()
, принимают в качестве первого параметра дескриптор документа.
В настоящее время этот дескриптор не используется внутренне, поскольку ClibPDF
не поддерживает одновременное создание нескольких PDF-документов.
И даже не пытайтесь сделать это - результат будет непредсказуем. Невозможно
предсказать, какие последствия этого могут быть во многопоточной среде. По
соглашению с автором ClibPDF мы изменим это в одном из последующих релизов (на момент написания имелась версия 1.10).
Если вам нужна эта функциональность, используйте модуль pdflib.
Прекрасной возможностью ClibPDF (и PDFlib) является способность создавать pdf-документ полностью в памяти без
использования временных файлов. Имеется также возможность передавать
координаты в предопределённых единицах измерения. (Эта возможность симулируется также функцией
pdf_translate()
при использовании PDFlib
-функций.)
Другим важным свойством ClibPDF является то, что любая страница может быть
модифицирована в любое время, даже если уже открыта новая страница. Функция
cpdf_set_current_page()
позволяет оставить текущую страницу и продолжить модификацию другой страницы.
Большинство функций использовать довольно легко. Возможно, самое сложное -
это создание самого простого PDF-документа. Следующий пример должен помочь вам
начать. Он создаёт документ из одной страницы. Эта страница содержит текст "Times-Roman",
выведенный шрифтом в 30pt. Текст подчёркнут.
Эти константы определены данным расширением и будут доступны только в том случае, если либо вкомпилированы в РНР, либо динамически загружены на этапе прогона.
-
CPDF_PM_NONE
(integer)
-
CPDF_PM_OUTLINES
(integer)
-
CPDF_PM_THUMBS
(integer)
-
CPDF_PM_FULLSCREEN
(integer)
-
CPDF_PL_SINGLE
(integer)
-
CPDF_PL_1COLUMN
(integer)
-
CPDF_PL_2LCOLUMN
(integer)
-
CPDF_PL_2RCOLUMN
(integer)
Пример 1. Простой пример с использованием ClibPDF
<?php
$cpdf = cpdf_open(0);
cpdf_page_init($cpdf, 1, 0, 595, 842, 1.0);
cpdf_add_outline($cpdf, 0, 0, 0, 1, "Page 1");
cpdf_begin_text($cpdf);
cpdf_set_font($cpdf, "Times-Roman", 30, "WinAnsiEncoding");
cpdf_set_text_rendering($cpdf, 1);
cpdf_text($cpdf, "Times Roman outlined", 50, 750);
cpdf_end_text($cpdf);
cpdf_moveto($cpdf, 50, 740);
cpdf_lineto($cpdf, 330, 740);
cpdf_stroke($cpdf);
cpdf_finalize($cpdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($cpdf);
cpdf_close($cpdf);
?>
|
|
Дистрибутив pdflib содержит более сложный пример, в котором
создаются серии страниц с аналоговыми часами. Здесь приведён пример,
конвертированный в PHP с использованием расширения ClibPDF:
Пример 2. pdfclock из дистрибутива pdflib 2.0
<?php
$radius = 200;
$margin = 20;
$pagecount = 40;
$pdf = cpdf_open(0);
cpdf_set_creator($pdf, "pdf_clock.php3");
cpdf_set_title($pdf, "Analog Clock");
while($pagecount-- > 0) {
cpdf_page_init($pdf, $pagecount+1, 0, 2 * ($radius + $margin), 2 * ($radius + $margin), 1.0);
cpdf_set_page_animation($pdf, 4, 0.5, 0, 0, 0); /* wipe */
cpdf_translate($pdf, $radius + $margin, $radius + $margin);
cpdf_save($pdf);
cpdf_setrgbcolor($pdf, 0.0, 0.0, 1.0);
/* отсчёт минут */
cpdf_setlinewidth($pdf, 2.0);
for ($alpha = 0; $alpha < 360; $alpha += 6)
{
cpdf_rotate($pdf, 6.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin/3, 0.0);
cpdf_stroke($pdf);
}
cpdf_restore($pdf);
cpdf_save($pdf);
/* отсчёт пятиминуток */
cpdf_setlinewidth($pdf, 3.0);
for ($alpha = 0; $alpha < 360; $alpha += 30)
{
cpdf_rotate($pdf, 30.0);
cpdf_moveto($pdf, $radius, 0.0);
cpdf_lineto($pdf, $radius-$margin, 0.0);
cpdf_stroke($pdf);
}
$ltime = getdate();
/* прорисовка часовой стрелки */
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['minutes']/60.0) + $ltime['hours'] - 3.0) * 30.0);
cpdf_moveto($pdf, -$radius/10, -$radius/20);
cpdf_lineto($pdf, $radius/2, 0.0);
cpdf_lineto($pdf, -$radius/10, $radius/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
/* прорисовка минутной стрелки */
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['seconds']/60.0) + $ltime['minutes'] - 15.0) * 6.0);
cpdf_moveto($pdf, -$radius/10, -$radius/20);
cpdf_lineto($pdf, $radius * 0.8, 0.0);
cpdf_lineto($pdf, -$radius/10, $radius/20);
cpdf_closepath($pdf);
cpdf_fill($pdf);
cpdf_restore($pdf);
/* прорисовка секундой стрелки */
cpdf_setrgbcolor($pdf, 1.0, 0.0, 0.0);
cpdf_setlinewidth($pdf, 2);
cpdf_save($pdf);
cpdf_rotate($pdf, -(($ltime['seconds'] - 15.0) * 6.0));
cpdf_moveto($pdf, -$radius/5, 0.0);
cpdf_lineto($pdf, $radius, 0.0);
cpdf_stroke($pdf);
cpdf_restore($pdf);
/* прорисовка небольшого кружка в центре */
cpdf_circle($pdf, 0, 0, $radius/30);
cpdf_fill($pdf);
cpdf_restore($pdf);
cpdf_finalize_page($pdf, $pagecount+1);
}
cpdf_finalize($pdf);
Header("Content-type: application/pdf");
cpdf_output_buffer($pdf);
cpdf_close($pdf);
?>
|
|
документацию расширения PDFlib.
-
Содержание
-
cpdf_add_annotation - добавляет аннотацию
-
cpdf_add_outline - добавляет закладку на текущей странице
-
cpdf_arc - прорисовывает дугу
-
cpdf_begin_text - начинает текстовый раздел
-
cpdf_circle - прорисовывает круг
-
cpdf_clip - обрезает текущий путь
-
cpdf_close - закрывает pdf-документ
-
cpdf_closepath_fill_stroke - закрывает, заполняет и выравнивает текущий путь/path
-
cpdf_closepath_stroke - закрывает путь и прорисовывает линию вдоль пути
-
cpdf_closepath - закрывает путь
-
cpdf_continue_text - выводит текст в следующей строчке
-
cpdf_curveto - прорисовывает кривую
-
cpdf_end_text - заканчивает текстовый раздел
-
cpdf_fill_stroke - заполняет и выравнивает текущий путь
-
cpdf_fill - заполняет текущий путь
-
cpdf_finalize_page - заканчивает страницу
-
cpdf_finalize - заканчивает документ
-
cpdf_global_set_document_limits - устанавливает границы для любого pdf-документа
-
cpdf_import_jpeg - открывает JPEG-изображение
-
cpdf_lineto - прорисовывает линию
-
cpdf_moveto - устанавливает текущую точку
-
cpdf_newpath - начинает новый путь
-
cpdf_open - открывает pdf-документ
-
cpdf_output_buffer - выводит pdf-документ в буфере памяти
-
cpdf_page_init - начинает новую страницу
-
cpdf_place_inline_image - помещает изображение на страницу
-
cpdf_rect - прорисовывает прямоугольник
-
cpdf_restore - восстанавливает ранее сохранённое окружение
-
cpdf_rlineto - прорисовывает линию
-
cpdf_rmoveto - устанавливает текущую точку
-
cpdf_rotate_text - устанавливает угол поворота текста
-
cpdf_rotate - устанавливает поворот
-
cpdf_save_to_file - записывает pdf-документ в файл
-
cpdf_save - сохраняет текущее окружение
-
cpdf_scale - устанавливает масштабирование
-
cpdf_set_action_url - устанавливает гиперссылку
-
cpdf_set_char_spacing - устанавливает расстояние между символами/character spacing
-
cpdf_set_creator - устанавливает поле автора/creator в pdf-документе
-
cpdf_set_current_page - устанавливает текущую страницу
-
cpdf_set_font_directories - устанавливает директории для поиска при использовании внешних шрифтов
-
cpdf_set_font_map_file - устанавливает fontname в filename карты отображения при использовании
внешних шрифтов
-
cpdf_set_font - выбирает текущий шрифт и его размер
-
cpdf_set_horiz_scaling - устанавливает масштабирование текста по горизонтали
-
cpdf_set_keywords - устанавливает поле keywords в pdf-документе
-
cpdf_set_leading - устанавливает расстояние между строчками текста
-
cpdf_set_page_animation - устанавливает интервал между страницами
-
cpdf_set_subject - устанавливает поле subject в pdf-документе
-
cpdf_set_text_matrix - устанавливает текстовую матрицу
-
cpdf_set_text_pos - устанавливает позицию текста
-
cpdf_set_text_rendering - определяет отображение текста
-
cpdf_set_text_rise - устанавливает возвышение текста
-
cpdf_set_title - устанавливает поле title в pdf-документе
-
cpdf_set_viewer_preferences - как показывать документ в просмотрщике/viewer
-
cpdf_set_word_spacing - устанавливает расстояние между словами
-
cpdf_setdash - устанавливает патэрн из тире
-
cpdf_setflat - устанавливает ровность
-
cpdf_setgray_fill - устанавливает цвет заполнения - значение gray
-
cpdf_setgray_stroke - устанавливает цвет прорисовки - значение gray
-
cpdf_setgray - устанавливает цвет прорисовки и заполнения - значение gray
-
cpdf_setlinecap - устанавливает параметр linecap
-
cpdf_setlinejoin - устанавливает параметр linejoin
-
cpdf_setlinewidth - устанавливает ширину линии
-
cpdf_setmiterlimit - устанавливает miter-границу
-
cpdf_setrgbcolor_fill - устанавливает цвет заполнения - значение rgb
-
cpdf_setrgbcolor_stroke - устанавливает цвет прорисовки - значение rgb
-
cpdf_setrgbcolor - устанавливает цвет прорисовки и заполнения - значение rgb
-
cpdf_show_xy - выводит текст в данной позиции
-
cpdf_show - выводит текст в текущей позиции
-
cpdf_stringwidth - Возвращает ширину текста при текущем шрифте
-
cpdf_stroke - прорисовывает линию вдоль пути
-
cpdf_text - выводит текст с параметрами
-
cpdf_translate - устанавливает исходную току системы координат
|
|