PHP-Nuke по-русски    Главная
Начальная
страница
 Клуб
Русский
клуб
 Разделы
Тематические
разделы
 Ссылки
Каталог
сайтов
 Файлы
Каталог
программ
 Школа
Практические
занятия
 Форум
Форумы
поддержки
Учебник РНР
Назад Вперёд

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 - устанавливает исходную току системы координат

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

© RigaNet - Internet studio
For Web site issues, contact the Web master.

Rambler's Top100 Рейтинг@Mail.ru RigaNet