Створення pdf в php скрипт. Функції PDF. Обчислення масштабу і ширини стовпчика

функції 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 - закриває, заповнює і окреслює поточний шлях
Сайт візитка: особливості хорошого старту
Надувні матраци від Ламон
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.Приклади наводяться тільки для ілюстративних цілей і не призначені для життєвих застосувань.

Тепер можна додати назву звіту. Об'єкт FPDF використовує концепцію "поточна позиція", куди вставляється наступна частина тексту або інший елемент. Так як потрібно, щоб назва звіту розташовувалося в середині сторінки, необхідно пересунути поточну позицію вниз до цієї точки, яка розташовується на відстані 160мм від верху сторінки (значення зберігається в конфигурационной змінної $ reportNameYPos). Для цього використовується метод FPDF Ln (), який додає новий рядок на вказану відстань:

$ Pdf-> Ln ($ reportNameYPos);

Якщо не вказати висоту рядка, то буде використовуватися висота останньої виведеної осередки.

Тепер додамо назву звіту. Існує кілька різних способів додати текст за допомогою FPDF. У нашому випадку використовуємо метод Cell (), який, крім усього іншого, дозволяє легко центрувати текст.

Cell () приймає такі аргументи (все є опціональними):

  • Висота і ширина осередку.За замовчуванням ширина розтягується до правого поля, а висота встановлюється в 0.
  • Рядок тексту для виведення.За замовчуванням "" .
  • Вказівка ​​для відображення рамки навколо осередку.Це може бути або число (0 = немає рамки, 1 = малюємо рамку), або рядок з одним або декількома параметрами з наступного списку: "L" (зліва), "T" (зверху), "R" (праворуч), і "B" (внизу). Значення за замовчуванням: 0.
  • Куди поміщати поточну позицію після виведення осередки.Значення може бути 0 (праворуч від осередку), 1 (початок наступного рядка), або 2 (нижче). Значення за замовчуванням: 0.
  • вирівнювання тексту. Можливі значення: "L" (вирівнювання по лівому краю), "C" (вирівнювання по центру), або "R" (вирівнювання по правому краю). Значення за замовчуванням: "L".
  • Чи потрібно заливати фон вічка кольором. true = заливаємо кольором, false = залишаємо фон прозорим. Значення за замовчуванням: false.
  • URL посилання.Якщо заданий, то осередок з текстом стає робочої посиланням на інший ресурс.

Тепер за допомогою методу Cell () вставимо назву звіту і вирівняємо його по центру:

$ Pdf->

Створюємо колонтитул сторінки та вступний текст

Отже, титульна сторінка готова. Тепер треба створити сторінку, на якій є колонтитул, заголовок і деякий вступний текст, за яким слідує таблиця і графік.

Зробимо колонтитул сторінки. Додамо нову сторінку, потім виведемо текст колонтитула, який містить назву звіту, вирівняний по центру сторінки і використовує шрифт Arial розміром 17. Використовуємо змінну конфігурації $ headerColour для установки кольору тексту:

$ Pdf-> AddPage (); $ Pdf-> SetTextColor ($ headerColour, $ headerColour, $ headerColour); $ Pdf-> SetFont ( "Arial", "", 17); $ Pdf-> Cell (0, 15, $ reportName, 0, 0, "C");

Тепер перейдемо до тексту. Спочатку виведемо заголовок в звичайному кольорі і шрифтом Arial розміром 20. Так як нам не потрібно центрувати текст, можна використовувати простий метод Write (), передавши йому висоту рядка і текст для виведення (в якості опції можна також передати адресу URL для формування посилання):

$ Pdf-> SetTextColor ($ textColour, $ textColour, $ textColour); $ Pdf-> SetFont ( "Arial", "", 20); $ Pdf-> Write (19, "2009 Was A Good Year");

Тепер можна вивести текст введення шрифтом Arial розміром 12. Тут є пропуски 16 мм від першого абзацу і 12 мм між параграфами. Задаємо для кожного рядка висоту в 6 мм:

$ Pdf-> Ln (16); $ Pdf-> SetFont ( "Arial", "", 12); $ Pdf-> Write (6, "Despite the economic downturn, WidgetCo had a strong year. Sales of the HyperWidget in particular exceeded expectations. The fourth quarter was generally the best performing; this was most likely due to our increased ad spend in Q3 . "); $ Pdf-> Ln (12); $ Pdf-> Write (6, "2010 is expected to see increased sales growth as we expand into other countries.");

Метод Write () автоматично переводить текст на наступний рядок, коли він досягає правого боку сторінки.

додаємо дані

Тепер потрібно додати таблицю з даними нижче тексту. спочатку встановимо колір рамки таблиці. Метод SetDrawColor () встановлює колір, який використовується для рамок і інших ліній, так що ми можемо використовувати його для установки кольору для рамок елементів таблиці. Потім поточну позицію опускаємо вниз на 15мм для створення пропуску між текстом і таблицею:

$ Pdf-> SetDrawColor ($ tableBorderColour, $ tableBorderColour, $ tableBorderColour); $ Pdf-> Ln (15);

Створюємо рядок заголовків таблиці

Таблиця має рядок, яка містить в осередках заголовки стовпців "PRODUCT", "Q1," Q2 "," Q3 ", і" Q4 ". Осередок" PRODUCT "використовує відмінний від інших заголовків колір тексту і фону.

Ми вже користувалися методом SetTextColor () для установки кольору тексту. Для установки кольору фону треба використовувати метод SetFillColor (), який має такі ж аргументи як SetTextColor ().

Щоб створити осередки таблиці використовується метод Cell (), якому задаються ширина і висота осередку, зміст і вирівнювання. Також передається 1 в якості 4-го аргументу для установки рамки, і true як 7-го аргументу для заповнення фону встановленим кольором.

Нижче наведено код для створення рядка заголовків. Спочатку встановлюється напівжирний шрифт. Потім створюється осередок "PRODUCT" з відповідним текстом і фоном. Потім встановлюється колір для решти 4 осередків заголовків, і виконується цикл по елементах масиву $ columnLabels для виведення осередків з вирівнюванням тексту в них по центру:

// Створюємо рядок заголовків таблиці $ pdf-> SetFont ( "Arial", "B", 15); // Осередок "PRODUCT" $ pdf-> SetTextColor ($ tableHeaderTopProductTextColour, $ tableHeaderTopProductTextColour, $ tableHeaderTopProductText Colour); $ Pdf-> SetFillColor ($ tableHeaderTopProductFillColour, $ tableHeaderTopProductFillColour, $ tableHeaderTopProductFill Colour); $ Pdf-> Cell (46, 12, "PRODUCT", 1, 0, "L", true); // Решта осередків заголовків $ pdf-> SetTextColor ($ tableHeaderTopTextColour, $ tableHeaderTopTextColour, $ tableHeaderTopTextColour); $ Pdf-> SetFillColor ($ tableHeaderTopFillColour, $ tableHeaderTopFillColour, $ tableHeaderTopFillColour); for ($ i = 0; $ i Cell (36, 12, $ columnLabels [$ i], 1, 0, "C", true); ) $ Pdf-> Ln (12);

Пропуск на початку вмісту осередку "PRODUCT" допомагає сформувати відступ в комірці таблиці від лівої межі. Такий же трюк буде використовуватися для найменувань продуктів в крайньому лівому стовпчику (на жаль, поки немає способу контролювати відступ в осередках з допомогою FPDF).

Створюємо рядки з даними

Інша таблиця складається з 4 рядків з даними продажів (по одному рядку на продукт) для 4-х кварталів. Спочатку визначимо пару змінних:

// Створюємо рядки з даними $ fill = false; $ Row = 0;

Змінні служать для:

    $ Fill: Заповнювати фон вічка кольором чи ні. Ми будемо перемикати дане значення після виведення кожного рядка для отримання ефекту зебри в таблиці.

    $ Row: Поточний номер рядка. Вона дозволяє виводити відповідний номер для кожного рядка при переміщенні по таблиці.

Тепер можна організувати цикл за елементами масиву $ data за допомогою foreach для виведення рядків Для кожного рядка створюємо лівий осередок, яка містить назву продукту, і чотири осередки з даними. Встановлюємо відповідні кольори для тескти і фону для кожного осередку.

Для виведення осередків даних використовується цикл for для проходу по чотирьох елементного масиву з даними, а для виведення даних в форматі з поділом тисяч викликаємо функцію PHP number_format ().

Після виведення рядка збільшуємо змінну $ row, перемикаємо змінну $ fill, і використовуємо Ln () для переходу до початку наступного рядка.

Ось код всього циклу:

Foreach ($ data as $ dataRow) (// Створюємо лівий осередок з заголовком рядка $ pdf-> SetFont ( "Arial", "B", 15); $ pdf-> SetTextColor ($ tableHeaderLeftTextColour, $ tableHeaderLeftTextColour, $ tableHeaderLeftTextColour); $ pdf-> SetFillColor ($ tableHeaderLeftFillColour, $ tableHeaderLeftFillColour, $ tableHeaderLeftFillColour); $ pdf-> Cell (46, 12, "". $ rowLabels [$ row], 1, 0, "L", $ fill); // створюємо осередки з даними $ pdf-> SetTextColor ($ textColour, $ textColour, $ textColour); $ pdf-> SetFillColor ($ tableRowFillColour, $ tableRowFillColour, $ tableRowFillColour); $ pdf-> SetFont ( "Arial", "", 15 ); for ($ i = 0; $ i Cell (36, 12, ( "$". Number_format ($ dataRow [$ i])), 1, 0, "C", $ fill); ) $ Row ++; $ Fill =! $ Fill; $ Pdf-> Ln (12); )

створюємо графік

Останнім елементом в нашому звіті є Столбикова графік, що відображає зведену інформацію по чотирьом продуктам за весь рік.

Обчислення масштабу і ширини стовпчика

Спочатку треба обчислити масштаб для осей X і Y. Для масштабу по осі X обчислення полягають в простому поділі кількості продуктів на бажану ширину графіка (потрібно врахувати невеликі відступи зліва і справа для кращого вигляду):

/ *** Створюємо графік *** / // Обчислюємо масштаб по осі X $ xScale = count ($ rowLabels) / ($ chartWidth - 40);

Для обчислення масштабу по осі Y потрібно знайти загальне значення по кожному продукту і потім визначити серед них максимальне значення. Потім максимум можна буде розділити на бажану висоту графіка для отримання значення масштабу по осі Y:

// Обчислюємо масштаб по осі Y $ maxTotal = 0; foreach ($ data as $ dataRow) ($ totalSales = 0; foreach ($ dataRow as $ dataCell) $ totalSales + = $ dataCell; $ maxTotal = ($ totalSales> $ maxTotal)? $ totalSales: $ maxTotal;) $ yScale = $ maxTotal / $ chartHeight;

Тепер, знаючи масштаб по осі X, можна обчислити ширину (в мм) кожного стовпчика графіка. Це інверсірованного значення масштабу по осі X, зменшене в півтора рази для організації відстані між стовпцями:

// Обчислюємо ширину стовпців $ barWidth = (1 / $ xScale) / 1.5;

Додаємо лінії осей і мітки на них

Тепер можна додати лінії осей X і Y, мітки даних і мітки осей. Використовуємо шрифт Arial з розміром 10 для міток даних.

Для виведення лінії в FDPF використовується метод Line (), які приймає чотири аргументи: координати X і Y початку лінії, і координати X і Y кінця лінії.

Для осі X виводимо горизонтальну лінію уздовж низу графіка, залишаючи 30 мм для міток по осі Y зліва. Потім виводимо кожне ім'я продукту в масиві $ rowLabels як текстову осередок в відповідну точку:

// Додаємо осі: $ pdf-> SetFont ( "Arial", "", 10); // Ось X $ pdf-> Line ($ chartXPos + 30, $ chartYPos, $ chartXPos + $ chartWidth, $ chartYPos); for ($ i = 0; $ i< count($rowLabels); $i++) { $pdf->SetXY ($ chartXPos + 40 + $ i / $ xScale, $ chartYPos); $ Pdf-> Cell ($ barWidth, 10, $ rowLabels [$ i], 0, 0, "C"); )

Метод SetXY () дозволяє встановлювати поточну позицію в потрібне місце на сторінці.

Для осі Y виводимо вертикальну лінію зліва від графіка, залишаючи 30 мм для міток даних по осі Y. Лінію осі робимо на 8 мм більше бажаної висоти графіку для того, щоб було місце для виведення мітки осі. Потім організуємо цикл від нуля до максимального значення даних $ maxTotal, яке було визначено раніше. Розмір кроку встановлений в змінній $ chartYStep (20,000). На кожному кроці виводимо поточне значення вирівняної вправо і коротку мітку:

// Ось Y $ pdf-> Line ($ chartXPos + 30, $ chartYPos, $ chartXPos + 30, $ chartYPos - $ chartHeight - 8); for ($ i = 0; $ i<= $maxTotal; $i += $chartYStep) { $pdf->SetXY ($ chartXPos + 7, $ chartYPos - 5 - $ i / $ yScale); $ Pdf-> Cell (20, 10, "$". Number_format ($ i), 0, 0, "R"); $ Pdf-> Line ($ chartXPos + 28, $ chartYPos - $ i / $ yScale, $ chartXPos + 30, $ chartYPos - $ i / $ yScale); )

Тепер можна додати мітки осей. Використовуємо шрифт Arial напівжирний з розміром 12. Розміщуємо мітку осі X нижче міток даних, а мітку осі Y - нагорі осі Y:

// Додаємо мітки осей $ pdf-> SetFont ( "Arial", "B", 12); $ Pdf-> SetXY ($ chartWidth / 2 + 20, $ chartYPos + 8); $ Pdf-> Cell (30, 10, $ chartXLabel, 0, 0, "C"); $ Pdf-> SetXY ($ chartXPos + 7, $ chartYPos - $ chartHeight - 12); $ Pdf-> Cell (20, 10, $ chartYLabel, 0, 0, "R");

Виводимо стовпці графіка

Завершальною стадією є створення самого графіка. Для виведення стовпців використовується метод FPDF Rect (), який виводить прямокутник. Метод використовує такі аргументи:

  • Координати X і Y верхнього лівого кута прямокутника.
  • Ширина і висота прямокутника.
  • Стиль прямокутника.Може мати значення "D" або "" (виводимо обведення), "F" (заповнюємо поточним кольором фону), або "DF" / "FD" (обведення і заповнення).

Тепер виводимо стовпці. Встановимо змінну $ xPos, яка служить для відстеження поточної позиції по X. Задамо їй значення 40 мм з урахуванням відстані для міток по осі Y і відступу для першого стовпця. Тепер створимо змінну $ bar, яка буде містити номер поточного стовпця. Вона буде використовуватися для установки кольору для стовпця:

// Створюємо стовпець $ xPos = $ chartXPos + 40; $ Bar = 0;

Тепер проходимо циклом по масиву $ data, обчислюємо сумарне значення для кожного рядка і виводимо стовпець від осі X до цього значення, масштабованого за допомогою $ yScale. Колір для кожного стовпця змінюється за допомогою лічильника $ bar, який є індексом в масиві $ chartColours. Після виведення поточного стовпця перемещаем позицію X до початку наступного, збільшуємо лічильник $ bar і продовжуємо цикл:

Foreach ($ data as $ dataRow) (// Обчислюємо сумарне значення по рядку даних для продукту $ totalSales = 0; foreach ($ dataRow as $ dataCell) $ totalSales + = $ dataCell; // Створюємо стовпець $ colourIndex = $ bar% count ($ chartColours); $ pdf-> SetFillColor ($ chartColours [$ colourIndex], $ chartColours [$ colourIndex], $ chartColours [$ colourIndex]); $ pdf-> Rect ($ xPos, $ chartYPos - ($ totalSales / $ yScale), $ barWidth, $ totalSales / $ yScale, "DF"); $ xPos + = (1 / $ xScale); $ bar ++;)

У коді використовується оператор PHP розподіл по модулю (%) для повтору кольору стовпчика, якщо кількість стовпців перевищує кількість елементів в масиві $ chartColours.

Відправляємо документ PDF браузеру

Документ PDF готовий! Залишилося тільки відправити його браузеру, щоб користувач міг переглянути його або завантажити.

Для цього використовується метод FPDF Output (). Він приймає два аргументи: передбачуване ім'я для PDF файлу і прапор призначення. Даний прапор може набувати таких значень:

    I: Виводити PDF на екран, якщо це підтримується браузером, інакше загрожують.

    D: Завантажувати PDF.

    F: Зберігати файл в папці на сервері.

    S: Повертати дані PDF як рядок.

Для нашого прикладу використовується опція I для виведення PDF на екран, якщо можливо:

/ *** Виводимо PDF *** / $ pdf-> Output ( "report.pdf", "I"); ?>

Output () автоматично посилає заголовок HTTP "Content-type: application / pdf", який сигналізує браузеру про те, що слід очікувати документ PDF.

Тепер ви готові протестувати скрипт. Відкривайте браузер і переходите на URL, де розташований скрипт, наприклад, www.example.com/report.php. Ви повинні побачити PDF у вікні браузера. Або буде виведено діалогове вікно, в якому вам буде запропоновано зберегти документ PDF на вашому жорсткому диску. Ви можете потім відкрити PDF файл в програмі для перегляду PDF, наприклад, в Acrobat Reader або Preview.

Для створення PDF документа потрібен тільки PHP і FPDF.

висновок

В даному уроці ви дізналися як використовувати PHP з бібліотекою FPDF для генерації звіту в форматі PDF. Були продемонстровані методи бібліотеки FPDF для створення тексту, таблиць і графіків.

Однак бібліотека FPDF може багато чого ще, наприклад, створювати верхній і нижній колонтитули для сторінок, використовувати автоматичний перехід на нову сторінку і так далі. Перегляньте документацію по бібліотеці на сайті FPDF.

  • Переклад

Більшість 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-документів, для більш докладної інформації використовуйте

2021 wisemotors.ru. Як це працює. Залізо. Майнінг. Криптовалюта.