زنگ.

کسانی هستند که این خبر را قبل از شما خوانده اند.
مشترک شدن برای دریافت مقالات تازه.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه

به منظور تولید یک فایل PDF از HTML، ما از کتابخانه DOMPDF برای PHP استفاده خواهیم کرد. و همراه با آن ما می توانیم فایل های PDF تولید شده با کیفیت بالا را با شخصیت های روسی دریافت کنیم.

بنابراین، ادامه دهید. ابتدا باید خود را در کتابخانه خود دانلود کنید:

یا آن را از طریق آهنگساز نصب کنید:

آهنگساز نیاز به DOMPDF / DOMPDF دارد

با این حال، شایان ذکر است که مونتاژ استاندارد از شخصیت های روسی صحبت نمی کند. بنابراین، شما باید برای مدت طولانی اینترنت را بکشید و سعی کنید، تلاش کنید، تلاش کنید. برای کاهش زمان خود، ما قبلا همه چیز را جمع آوری کرده ایم. در زیر، شما می توانید یک کتابخانه را با پشتیبانی از شخصیت های روسی زبان دانلود کنید.

اگر می خواهید از مونتاژ استاندارد استفاده کنید، به سادگی فایل ها را جایگزین کنید این بایگانی (916 کیلوبایت).

شما باید فایل ها را در پوشه جایگزین کنید:

../dompdf/lib/fonts.

با استفاده از این اسکریپت، شما می توانید فایل های PDF پیچیده با جداول را تشکیل دهید، تصاویری که از HTML به یک فایل PDF وارد می شوند.

ما از این کتابخانه استفاده می کنیم نسل PDF. با درخواست آژاکس در بایگانی دانلود شده، فایل index.php را که داده های دریافتی را پردازش می کنند را پیدا خواهید کرد، قالب را که در آن تصاویر قبلا ساخته شده است، متصل می کند. ما برای شما به طور کامل کار می کنیم و ما از گزینه (5 مگابایت) استفاده می کنیم.

مثال دانلود تولید شده فایل پی دی اف. (580 کیلوبایت)

اگر کتابخانه را دانلود کردید، آن را به پی اچ پی خود وصل کنید با استفاده از اتصال autoloader:

نیاز به "dompdf / autoload.inc.php"؛

یا از git استفاده کنید:

git clone https://github.com/dompdf/dompdf.git.
cD DOMPDF.
git clone https://github.com/phenx/php-font-lib.git lib / php-font-lib
cD LIB / PHP-FONT-LIB
gIT پرداخت 0.5.1.
سی دی ..
git clone https://github.com/phenx/php-svg-lib.git php-svg-lib
cd php-svg-lib
git Checkout v0.3.

دستگیره به نظر می رسد مثل این است:

// Connect The Invention_Once Autoload.inc.inc.php autoloader؛ // تابع برای تمیز کردن کد از تابع داده های مخرب Challsrt ($ array1 \u003d آرایه ("\\"، "*"، "٪"، "0x"، "&"، "\\ 0"، "\\" n "،" \\ r "،" \\ s "،" \\ t "،" \\\\ "،" `"، "^"، "$"، "("، ")،" ["،"] " ، "("، ")"، "WSS"، "لکه"، "localhost"، "-"، " Услуги Цены Создание сайта-визитки от 2 499 UAH, от 5 999 RUR (сайт-одностраничник) Создание простого сайта от 3 499 UAH, от 7 999 RUR
(наполнение до 10 страниц без оплаты) Создание интернет-магазина от 5 499 UAH, от 11 999 RUR
(наполнение до 50 товаров – без оплаты) Дополнительные услуги по согласованию с заказчиком Продление доменного имени и хостинга 599 RUR+цена хостинга+цена домена Написание уникальных статей
(не входящих в пакет услуг создания сайта) от 29 UAH, 69 RUR / 1000 символов без пробелов Поддержка сайта первые 14 дней без оплаты Поддержка сайта после 14 дней 749 UAH, 1599 RUR / 30 дней
(если производились действия) Минимальная стоимость хостинга 329 UAH, 719 RUR / 365 дней
[расположение: RU, DE, UA] Минимальная стоимость доменного имени 169 UAH, 399 RUR / 365 дней Подбор доменного имени даром "; //склеиваем все данные $html=$table_one_head.$table.$table_one_down; // если в таблице есть нечитаемые для PDF скрипта символы, то заменяем их на читаемые $html=str_replace("₽","рос. руб.", $html); //убираем пробелы HTML $html=str_replace(" "," ", $html); //генерируем имя файла с уникальным ключем $name=date("Y-m-d-H-i-s").uniqid().".pdf"; //обрабатываем данные с помощью библиотеки DOMPDF $d->loadHtml($html); //устанавливаем ориентацию листа portrait || landscape $d->setPaper("A4","portrait"); //отображаем готовый PDF $d->render(); //записываем PDF в файл file_put_contents(getenv("DOCUMENT_ROOT")."/pdf/{$name}", $d->output()); //можно отправить ответ после AJAX Запроса с ссылкой на файл. у на //echo "

Скачать файл
";

Используемые библиотеки:

  • PDF Rendering
    • CPDF (included with dompdf)
    • PDFLib
  • Font handling if using fonts other than the core PDF fonts (courier, helvetica, times)
    • 0.5.x
  • Document parsing
    • html5lib (included with dompdf)
  • SVG rendering
    • 0.3.x for SVG support

Системные и иные требования:

  • PHP version 5.4.0 or higher
  • DOM extension
  • GD extension
  • MBString extension
  • php-font-lib
  • php-svg-lib

Поддержка:

  • CSS 2.1 и некоторые CSS3 свойства, такие как: @import, @media & @page правила
  • HTML 4.0
  • Внешних стилей http/ftp (с fopen-запросами)
  • tables, вместе с параметрами строк и ячеек, отступов и других стилей для тиблиц
  • изображений (gif, png (8, 24 and 32 bit with alpha channel), bmp & jpeg)
  • простых SVG

Функции PDF

Введение

Функции PDF в PHP могут создавать PDF-файлы с использованием библиотеки PDFlib, автор Thomas Merz .

Документация этого раздела является обзором функций библиотеки 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 доступна для скачивания на http://www.pdflib.com/products/pdflib/index.html , но требует платной лицензии на коммерческое использование. Библиотеки JPEG и TIFF требуются при компиляции данного расширения.

Для использования данных функций в PHP

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

В PHP 4.3.9, Вы должны установить это расширение через PEAR , используя следующую команду: pear install pdflib .

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

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

Старая функция Замена
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

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

Примеры

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

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

$pdf = pdf_new ();
pdf_open_file ($pdf , "test.pdf" );

pdf_set_info ($pdf , "Title" , "Test for PHP wrapper of PDFlib 2.0" );
pdf_set_info ($pdf , "Creator" , "See Author" );
pdf_set_info ($pdf , "Subject" , "Testing" );
pdf_begin_page ($pdf , 595 , 842 );
pdf_add_outline ($pdf , "Page 1" );
$font = pdf_findfont ($pdf , "Times New Roman" , "winansi" , 1 );
pdf_setfont ($pdf , $font , 10 );
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 "finished" ;
?>

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

$len = filesize ($filename );
header ();

header ();
readfile ($filename );
?>

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

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

$radius = 200 ;
$margin = 20 ;
$pagecount = 10 ;$pdf = pdf_new ();pdf_open_file ($pdf , "" )) {
echo 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" );$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 );/* minute strokes */
pdf_setlinewidth ($pdf , 2.0 );
for ($alpha = 0 ; $alpha < 360 ; $alpha += 6 ) {
pdf_rotate ($pdf , 6.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 ();/* draw hour hand */
pdf_save ($pdf );
pdf_rotate ($pdf ,-(($ltime [ "minutes" ]/ 60.0 )+ $ltime [ "hours" ]- 3.0 )* 30.0 );

pdf_lineto ($pdf , $radius / 2 , 0.0 );

pdf_closepath ($pdf );
pdf_fill ($pdf );
pdf_restore ($pdf );/* draw minute hand */
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 );/* draw second hand */
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 );/* draw little circle at center */
pdf_circle ($pdf , 0 , 0 , $radius / 30 );
pdf_fill ($pdf );pdf_restore ($pdf );pdf_end_page ($pdf );# to see some difference
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" );
echo $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 отчет с помощью php!
Вчера намучавшись с этим делом и наконец-то разобравшись, режил выложить все мысли по этому поводу, дабы чтобы хранилось и потом не забылось, да и может кому полезно будет!

И так!
Генерация подобного возможна с помощью двух пакетов:
1. File_PHP - пакет PEAR
2. FPDF - нечто подобное, но чуть с большим функционалом, имхо!

В итоге был выбран второй вариант!
Кстати, при использовании 1 пакета, второй вам все равно понадобится, об этом далее.
Сама привязка пакетов к скрипту не имеет никакой сложности и проще простого! Довольно широких диапазон функций, который позволяют творить с вашим pdf что угодно!

Проблема же встает, когда возникает нужда писать русскими буковками!
Для начала, нужно превратить из шрифта TrueType в метрический шрифт, который и юзает Adobe.
Это делается с помощью программки ttf2pt1 . Скачать ее можно легко в инете! Программа работает из командной строки! Чтобы сгенерировать метрический шрифт с расширением amf в командной стоке набираем ttf2pt1 -A шрифт.ttf имяшрифтагенерируемого . Появляется файлик с раширением afm. В моем случае я работал со шрифтом arial. Посему команда была такая ttf2pt1 -A arial.ttf arial

PHP:
MakeFont (string fontfile , string afmfile [, string enc [, array patch [, string type ]]])
font>

Где:
fontfile - шрифт TrueType
afmfile - сгенерированный вами afm шрифт
enc - кодировка (в данном случае указываем кириллицу cp1251)
patch - опциональное изменение кодировки (не указываем)
type - тип шрифта (по умлочанию TrueType, по-этому можно не указывать)

Так вот, создаем скриптик, в который инклудим файл makefont/makefont.php в директории, скажем font, следующего вида:

PHP:
MakeFont ("arial.ttf" , "arial.afm" , "cp1251" ) ;
font>

И запускаем его! После чего происходит генерация двух файлов, описывающих скрипт!
Это arial.php и arial.z
В данном случае ключевым файлом для нашей работы является arial.php, в котором есть много чего интересного!

Все это дело оставляем на сервере, где у нас будут работать скрипты!
С помощью команд FPDF (с коими можно ознакомиться в документации) создаем pdf файл, но чтобы подключить к нему созданные нами шрифты, нужно вызвать функцию FPDF addfont().

А именно так:

PHP:
$pdf = new FPDF ();
$pdf -> addfont ("arial" , "" , "font/arial.php" );
font>

Как вы уже поняли, первый аргумент функции - имя шрифта, третий - это путь до сгенерированного нами пхп файла! Второй аргумент - это стиль шрифта(жирный, курсив и т.д.). Однако для его использования нужно повторить операции по созданию шрифта соотвественно для жирного, курсива и т.д.!

Пишем какой-нибудь русский текст, выводим его в пдф! И опля! Шрифт русский у нас отображается, но некрасиво! Расстояние между буквами разное, все очень криво и неровно! А все из-за того, что как то некоректно сгенерировался файл arial.php с описанием скрипта!
Посмотрим, что в нем есть:
А в нем есть массив $cw, который имеет вид ключ=>значение = символ=>размерсимвола! И если внимательно приглядеться, что для латиницы для каждой буквы стоит разный размер, а вот для кириллицы одинаковы 750! Можно вручную изменять эти размеры, добиваясь красоты вида!

Но я пожалуй размещу уже исправленную карту размеров для arial regular!

Всем спасибо за внимание!
Сорри за корявость изложения!
Но надеюсь на полезность содержания!


Сайт визитка: особенности хорошего старта
Надувные матрасы от Ламон
WebNames.Ru – десятилетие деятельности в Интернете
Квартира для вашего сайта.
Технологии от BoldSoft
Как добиться успеха в безнадежных проектах
Новый тип навигационной системы при постраничном выводе
Генерация PDF с помощью PHP
PHP и PostgreSQL
Оптимизируем MySQL

Генерация PDF с помощью PHP

Предисловие
Одна из причин, почему я люблю PHP - это то, что в нем постоянно появляется поддержка новых технологий. Язык легко расширяем, и разработчики легко добавляют к нему новые модули, поэтому PHP стал одним из самых функциональных Web языков с поддержкой огромного разнообразия разных технологий. Расширения, существующие сегодня, позволяют разработчикам легко работать с сервером IMAP и POP3; динамически создавать изображения и рисунки в формате Flash; выполнять операции проверки кредитных карт; шифровать секретные данные; и работать с базами XML.

И это еще не все! Одно из самый интересных расширений, добавленных на сегодня в PHP - это расширение PDFLib , которое позволяет разработчикам динамически генерировать документы в формате PDF (Adobe Portable Document Format) . На протяжении следующих нескольких страниц я кратко расскажу об этом модуле, и дам обзор используемых функций, расскажу как использовать это расширение в PHP разработках. Так что поехали!

Поехали!
Чтобы задействовать расширение PDFLib , сначала нужно установить соответсвующую библиотеку в Вашу систему. Если вы работаете на Linux , можно скачать копию с сайта http://www.pdflib.com/pdflib/index.html и скомпилировать ее для вашего сервера. Если вы работаете на Windows, все намного проще - вместе с дистрибутивом PHP уже поставляется скомпилированный модуль PDF , и все что Вам нужно сделать - это его активировать, раскомментировав соответствующую строку в конфигурационном файле.

Вдобавок, Вам потребуется копия программы Adobe Acrobat PDF reader , чтобы читать документы, созданные с помощью библиотеки PDFLib . Скачать бесплатно Adobe Acrobat Reader можно с сайта производителя: http://www.adobe.com/

Как только все установлено, время создать простой PDF документ:

Сохраните этот файл, а затем откройте его в браузере. PHP обработает данный скрипт и сгенерирует новый PDF файл, который сохранит в месте, указанном вверху скрипта. Вот что Вы увидите открыв этот PDF документ:

Все права на публикацию этой статьи принадлежат

Урок анатомии
Поглядим внимательнее на код, используемый в приведенном примере.

Создание PDF файла в PHP включает в себя 4 основных шага: создание указателя на документ, регистрация шрифтов и цветов для документа, запись или рисование в указатель с использований предопределенных функций, и сохранение документа.

Начнем с первого шага - создание указателя на PDF

// create handle for new PDF document $pdf = pdf_new();

Это достигается с помощью функции pdf_new(), которая возвращает указатель на этот документ. Затем этот указатель используется во всех последующих операциях по созданию PDF документа.

Следующим шагом следует дать PDF файлу имя - это достигается функцией pdf_open_file(), которая принимает два аргумента - указатель, возвращенный предыдущей функцией и собственно имя файла, определяемое пользователем.

// open a file pdf_open_file($pdf, "philosophy.pdf");

Как только документ был создан, в него можно вставить начало новой страницы функцией pdf_begin_page(),

// start a new page (A4) pdf_begin_page($pdf, 595, 842);

и конец страницы - да вы угадали!! - функцией pdf_end_page().

// end page pdf_end_page($pdf);

Заметьте, что функция pdf_begin_page() требует два дополнительных параметра, которые представляют собой ширину и высоту создаваемого документа в точках (точка равна 1/72 дюйма). Если у вас плохо с математикой, учебник по PHP включает в себя стандартные размеры для всех распространенных размеров страниц, в том числе и A4, который используется выше.

Между вызовами pdf_begin_page() и pdf_end_page() находится код, который пишет в файл, будт это текст, картинки или геометрические фигуры. В данном примере я всего лишь пишу в документ строку текста - поэтому, все что мне нужно сделать - выбрать шрифт и использовать его при записи текста в документ.

Выбор и регистрация шрифта выполняется функциями pdf_findfont() и pdf_setfont(). Функция pdf_findfont() выбирает шрифт для использования в документе, и требует ввести имя шрифта, метод кодирования и Булевый параметр, указывающий на то, следует ли внедрить шрифт в PDF документ; а возвращает она объект-шрифт, который можно потом использовать при вызове функции pdf_setfont().

$arial = pdf_findfont($pdf, "Arial", "host", 1); pdf_setfont($pdf, $arial, 10); Как только шрифт выбран, можно использовать функцию pdf_show_xy() для записи текста в определенное место на странице.
// print text pdf_show_xy($pdf, "There are more things in heaven and earth, Horatio,", 50, 750); pdf_show_xy($pdf, "than are dreamt of in your philosophy", 50, 730);

Как вы заметили, эта функция требует указатель на PDF документ, ссылку на используемый объект-шрифт, текст для записи и координаты X Y места, откуда начинать запись текста. Эти координаты указываются относительно точки (0,0), которая находится в левом нижнем углу документа.

Как только текст был записан, страница закрывается вызовом функции pdf_end_page(). Затем можно добавить еще страницы или, как я здесь сделал, просто закрыть документ с помощью pdf_close(). Эта функция сохранит документ с именем, указанным при вызове pdf_open_file(), и уничтожит указатель на документ.

Все права на публикацию этой статьи принадлежат

А вот PDF вывод:

Все волшебство здесь заключается в функциях pdf_open_image_file() и pdf_place_image(). Превая из них принимает тип изображения - GIF, JPEG, TIFF или PNG - и название файла в качестве аргументов, и возвращает указатель на рисунок, который затем можно повторно использовать в документе.

Указатель на рисунок, возвращенный выше затем можно передать функции pdf_place_image(), которая расположит рисунок в определенном месте на странице. Координаты, переданные данной функции (второй и третий аргумент) относятся к левому нижнему углу рисунка, а четвертый аргумент задает параметр масштабирования рисунка при отображении (1 - покажет рисунок в 100% масштабе, 0.5 уменьшит его в два раза.)

Все права на публикацию этой статьи принадлежат

Кратчайшее расстояние между двумя точками
Не юудем останавливаться! Модуль PDF включает в себя огромное количество функций, который помогут Вам рисовать линии, круги и другие фигуры. Вот пример, где мы нарисуем линию.

Вот что вы увидите:

В данном случае процесс рисования линии включает в себя использование функций pdf_moveto(), pdf_lineto() и pdf_stroke().

В приведенном выше примере я рисую линию из точки (20,780) до точки (575, 780). Чтобы сделать это сначала мне нужно поместить курсор в начальную точку (20,780), с помощью вызова функции to pdf_moveto().

Затем необходимо задать конечную точку с помощью pdf_lineto():

Наконец, рисуем линию с помощью pdf_stroke().

Цвет линии задается функцией pdf_setcolor(), которая принимает несколько параметров: указатель на PDF документ, тип линии: "stroke", "fill" или "both", цветовая палитра (RGB или CMYK), и список цветовых значений, подходящих к выбранной палитре.

pdf_setcolor($pdf, "stroke", "rgb", 0, 0, 0);

Важно заметить, что список цветовых значений, передаваемый pdf_setcolor() должен быть задан в процентной величине интенсивности - то есть, интенсивности данного цвета, выраженной в процентах от максимально возможной. Например, если я хочу задать (RGB: 255,0,0) в качестве цвета для заливки, мой вызов функции pdf_setcolor() будет выглядеть вот так,

pdf_setcolor($pdf, "stroke", "rgb", 1, 0, 0);

А заливка желтым цветом будет выглядеть так:

pdf_setcolor($pdf, "fill", "rgb", 1, 1, 0);

Все права на публикацию этой статьи принадлежат

Квадраный колышек, круглая дыра
Линии - это не единственное, что Вы можете рисовать - круги и прямоугольники также присутсвуют в сегодняшнем меню. Посмотрите на пример ниже:

Вот вывод:

В данном случае функция the pdf_rect() используется для рисования прямоугольника с помощью заданных координат левого нижнего угла, высоты и ширины. Затем прямоугольник закрашивается и обводится двумя разными цветами с помощью функции pdf_fill_stroke().

pdf_setcolor($pdf, "fill", "rgb", 1, 1, 0); pdf_setcolor($pdf, "stroke", "rgb", 0, 0, 0); pdf_rect($pdf, 50, 500, 200, 300); pdf_fill_stroke($pdf);

Круги рисуются функцией pdf_circle(), которая принимает три аргумента: координаты X и Y центра круга и длину радиуса.

pdf_circle($pdf, 400, 600, 100);

Эта возможность рисования геометрических изображений "на лету" может пригодиться в различных ситуациях. К примеру, вот одна из них - в ней пара циклов "for" соединяются с функцией pdf_lineto() для генерации сетки из линий.

Вот вывод:

Все права на публикацию этой статьи принадлежат

А теперь, при просмотре документа в Adobe Reader , вы сможете увидеть эту информацию в Свойствах Документа.

Все права на публикацию этой статьи принадлежат

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

Форма внизу запрашивает несколько кусков данных, в виде чисел, разделенных запятыми. После ввода нескольких чисел скрипт "pie.php" конвертирует их из абсолютных чисел в куски данных относительных размеров и использует эти куски для генерации PDF документа, содержащего график-"пирог", выделяя различные куски и заливая из разными цветами.

Pie Chart Generator

Enter numeric values (pie segments), separated by commas
А вот скрипт:

Данные, введенные в форму, передаются скрипту "pie.php" переменной $data; эти данные затем разделяются на отдельные компоненты функцией explode(), и каждое значение присваивается массиву $slices. Затем в цикле эти числа конвертируются в градусы для круга и для каждого куска рисуется дуга. В каждом проходе цикла также вычисляется координата конечной точки дуги и рисуется сегмент линии для того, чтобы отделить дугу от остальной окружности. Как только "кусок пирога" нарисован, используется функция the pdf_fill_stroke() для заливки его цветом; цвет берется из массива $colours.

Мы не будем рассматривать как скрипт вычисляет длинц каждой дуги и сегмента линии - в комментариях кода все объясняется.

Если вы введете 5 равных кусков данных, график будет выглядеть так,

Если введете 2, то:

Вот так - поиграйте со скриптом, и посмотрите как различные куски меняют форму, отражая относительные размеры данных Ну а пока - до скорого!

Замечание: Все примеры в данной статье проверены на платформе Linux/i586 с Apache 1.3.12 и PHP 4.2.0. Примеры приводятся только для иллюстративных целей и не предназначены для жизненных применений.

  • Перевод

Большинство web-сервисов экспортируют данные в разных форматах для дальнейшего использования. Данная статья о том, как экспортировать данные в pdf-формате.
Хотя многие знают как это делать, я опишу кратко для тех кто не знает.

PHP позволяет нам генерировать файлы в формате pdf налету. FPDF - это бесплатный код на языке php, позволяющий создавать документы в формате pdf и производить с ними различные манипуляции.

PDFlib
PHP API содержит большое количество функций для работы с PDF, реализованных на базе PDFlib . Несмотря на это, данная библиотека не является бесплатной для коммерческого использования. Бесплатная версия называется PDFlib Lite и бесплатная для персонального использования, однако она ограничена в функциональности. Для того чтобы использовать полную библиотеку PDFlib необходимо купить лицензию.

Почему FPDF?
Альтернатива - это использование FPDF, бесплатный класс содержащий большое количество функций для создания и манипулирования PDF-документами. Ключевое слово для данного момента - это ее бесплатность. Вы можете скачать, использовать и модифицировать данный класс как вам заблагорассудится. В дополнение к бесплатности, эта библиотека намного проще, чем PDFlib. Для использования PDFlib необходимо установить ее как расширение к PHP, в то время как FPDF может быть подключена в программу напрямую.

Создание документов PDF
Для того чтобы начать, необходимо скачать код FPDF с сайта FPDF Web site и включить в программу. Например, вот так


Ниже пример использования библиотеки для генерации простого PDF.
Мы создадим новый объект FPDF:

Конструктор FPDF принимает следующие параметры
  • Ориентация страницы (P or L) книжная или альбомная
  • Размерность (pt,mm,cm или in)
  • Размер документа (A3, A4, A5, Letter and Legal)
Далее мы установим некоторые свойства документа
$pdf->SetAuthor("Lana Kovacevic");
$pdf->SetTitle("FPDF tutorial");

Так как в данном примере мы используем одинаковый шрифт для всего документа, мы устанавливаем его до создания страницы
$pdf->SetFont("Helvetica","B",20);
$pdf->SetTextColor(50,60,100);

У функции SetFont 3 параметра; название шрифта, стиль и размер. Мы используем Helvetica, жирный и 20 пунктов, мы будем использовать его для заголовка документа.
Вы можете использовать любой другой шрифт, используя функцию AddFont.
Используя функцию SetTextColor, мы устанавливаем цвет шрифта для всего документа. Цвет может быть представлен в RGB или grey scale. В данном примере мы используем RGB-значения.
Теперь когда главное сделано, приступим к созданию страниц.
$pdf->AddPage("P");
$pdf->SetDisplayMode("real","default");

В функцию AddPage () можно передать параметры «P» или «L» для указания ориентации страницы. Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.

Сейчас, когда у нас есть страница, давайте вставим в нее изображение для того чтобы сделать страницу приятней, также мы добавим ссылку. Мы отобразим логотип FPDF используя функцию Image и передадим в нее следующие параметры - название файла, размерность и адрес.

$pdf->Image("/logo.png",10,20,33,0," ","http://www.fpdf.org/");

Для того чтобы добавить ссылку воспользуемся следующей командой
$pdf->Link(10, 20, 33,33, "http://www.fpdf.org/");

Сейчас созададим заголовок с рамкой
$pdf->SetXY(50,20);
$pdf->SetDrawColor(50,60,100);
$pdf->Cell(100,10,"FPDF Tutorial",1,0,"C",0);

Функция SetXY устанавливает x и y координаты точки, в которой мы хотим вывести заголовок. SetDrawColor устанавливает цвет границы, используя значения RGB. После этого мы вызываем функцию Cell для вывода прямоугольника с текстом нашего заголовка. Мы передаем в функцию следующие параметры: ширина, высота, текст, граница, ln, выравнивание и заполнение. Значение границы 0 - отсутствие границы или 1 для наличия границы. Для ln мы используем значение по умолчанию 0, «C» - выравнивание текста по цуентру и 0 для параметра заполнение. Если мы бы установили последний паараметр в 1 наш прямоугольник был бы закрашен, значение 0 оставит его прозрачным.
Теперь мы хотим написать маленький текст в наш документ
$pdf->SetXY(10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,"Congratulations! You have generated a PDF. ");

Итак снова мы устанавливаем координаты вывода текста x и y, но теперь мы уменьшим размер шрифта, используя SetFontSize. Функция Write напечатает текст в наш документ. Параметр 5 устанавливает высоту, он имеет смысл только тогда когда у нас есть много строк в нашем тексте.
В конце мы выведен наш результат, используя функцию Output.
$pdf->Output("example1.pdf","I");

Здесь мы указали имя файла и параметры вывода, в данном случае «I». «I»-параметр выведет результат в браузер.

Итак полный текст:

require("fpdf.php");
//create a FPDF object
$pdf=new FPDF();
//set document properties
$pdf->SetAuthor("Lana Kovacevic");
$pdf->SetTitle("FPDF tutorial");
//set font for the entire document
$pdf->SetFont("Helvetica","B",20);
$pdf->SetTextColor(50,60,100);
//set up a page
$pdf->AddPage("P");
$pdf->SetDisplayMode(real,"default");
//insert an image and make it a link
$pdf->Image("/logo.png",10,20,33,0," ","http://www.fpdf.org/");
//display the title with a border around it
$pdf->SetXY(50,20);
$pdf->SetDrawColor(50,60,100);
$pdf->Cell(100,10,"FPDF Tutorial",1,0,"C",0);
//Set x and y position for the main text, reduce font size and write content
$pdf->SetXY (10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,"Congratulations! You have generated a PDF.");
//Output the document
$pdf->Output("example1.pdf","I");

Сейчас когда мы научились создавать документы, посмотрим что еще можно сделать, используя FPDF. Пример ниже показывает нам как создать верх и низ (хедер и футер:-)) нашего документа.

require("fpdf.php");
class PDF extends FPDF
{
function Header()
{
$this->Image("/logo.png",10,8,33);
$this->SetFont("Helvetica","B",15);
$this->SetXY(50, 10);
$this->Cell(0,10,"This is a header",1,0,"C");
}
function Footer()
{
$this->SetXY(100,-15);
$this->SetFont("Helvetica","I",10);
$this->Write (5, "This is a footer");
}
}
$pdf=new PDF();
$pdf->AddPage();
$pdf->Output("example2.pdf","D");

Как вы видите мы создали дочерний класс, используя наследование и создания функций Header и Footer. Затем мы создали новый объект и добавили страницу в документ. Функция AddPage автоматически вызовет функции Header и Footer. В конце мы вывели полученную информацию в файл с названием example2.pdf, используя значение «D». В этом случае браузер предложит сохранить данный файл.

Итак, мы изучили основы создания PDF-документов, для более подробной информации используйте

زنگ.

کسانی هستند که این خبر را قبل از شما خوانده اند.
مشترک شدن برای دریافت مقالات تازه.
پست الکترونیک
نام
نام خانوادگی
چگونه می خواهید زنگ را بخوانید
بدون هرزنامه