Формиране на pdf документ с помощта на php. Създайте PDF документ от PHP скрипт с помощта на библиотека FPDF. Създайте редове с данни

  • Превод

Повечето уеб услуги експортират данни в различни формати за по-късна употреба. Тази статия е за това как да експортирате данни в pdf формат.
Въпреки че много хора знаят как да направят това, ще опиша накратко за тези, които не знаят.

PHP ни позволява да генерираме pdf файлове в движение. FPDF е безплатен php код, който ви позволява да създавате и манипулирате pdf документи.

PDFlib
PHP API съдържа голям брой функции за работа с PDF, реализирани на базата на PDFlib. Въпреки това тази библиотека не е безплатна за комерсиална употреба. Безплатната версия се нарича PDFlib Lite и е безплатна за лична употреба, но е с ограничена функционалност. За да използвате пълната библиотека PDFlib, трябва да закупите лиценз.

Защо FPDF?
Алтернатива е да използвате FPDF, безплатен клас, съдържащ голям брой функции за създаване и манипулиране на PDF документи. Ключовата дума за този момент е безплатно. Можете да изтегляте, използвате и променяте този клас, както желаете. Освен че е безплатна, тази библиотека е много по-проста от PDFlib. За да използвате PDFlib, трябва да го инсталирате като разширение към PHP, докато FPDF може да бъде включен директно в програмата.

Създавайте PDF документи
За да започнете, трябва да изтеглите FPDF кода от уеб сайта на FPDF и да го включите във вашата програма. Например, така


По-долу е даден пример за използване на библиотеката за генериране на прост PDF.
Ще създадем нов FPDF обект:

FPDF конструкторът приема следните параметри
  • Ориентация на страницата (P или L) портретна или пейзажна
  • Размери (pt, mm, cm или in)
  • Размер на документа (A3, A4, A5, Letter и Legal)
След това ще зададем някои свойства на документа.
$ pdf-> SetAuthor ("Лана Ковачевич");
$ pdf-> SetTitle („Урок за FPDF“);

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

Функцията SetFont има 3 параметъра; име, стил и размер на шрифта. Използваме Helvetica, получер и 20 точки, ще използваме това за заглавието на документа.
Можете да използвате всеки друг шрифт, като използвате функцията AddFont.
Използвайки функцията SetTextColor, ние задаваме цвета на шрифта за целия документ. Цветът може да бъде представен в RGB или сива скала. В този пример използваме RGB стойности.
Сега, когато основното е направено, нека започнем да създаваме страниците.
$ pdf-> AddPage ("P");
$ pdf-> SetDisplayMode ("реално", "по подразбиране");

Можете да предадете параметрите "P" или "L" на функцията AddPage (), за да посочите ориентацията на страницата. Функцията SetDisplayMode определя как ще се показва страницата. Можете да дефинирате опции за увеличение и оформление. В примера използваме 100% увеличение и оформлението по подразбиране, дефинирано във визуализатора.

Сега, когато имаме страница, нека вмъкнем изображение в нея, за да направим страницата по-хубава, и ще добавим и връзка. Ще покажем логото на FPDF с помощта на функцията Image и ще му предадем следните параметри - име на файл, размер и адрес.

$ pdf-> Изображение ("/ logo.png", 10,20,33,0, "", "http://www.fpdf.org/");

За да добавите връзка, използвайте следната команда
$ pdf-> Връзка (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-> Напиши (5, "Поздравления! Вие генерирахте PDF.");

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

Тук сме посочили името на файла и изходните параметри, в този случай "I". Параметърът "I" ще изведе резултата в браузъра.

И така пълният текст:

изисквам ("fpdf.php");
// създаване на FPDF обект
$ pdf = нов FPDF ();
// задава свойства на документа
$ pdf-> SetAuthor ("Лана Ковачевич");
$ pdf-> SetTitle („Урок за FPDF“);
// задаване на шрифт за целия документ
$ pdf-> SetFont ("Helvetica", "B", 20);
$ pdf-> SetTextColor (50,60,100);
// настройване на страница
$ pdf-> AddPage ("P");
$ pdf-> SetDisplayMode (реално, "по подразбиране");
// вмъкнете изображение и го направете като връзка
$ pdf-> Изображение ("/ logo.png", 10,20,33,0, "", "http://www.fpdf.org/");
// показване на заглавието с рамка около него
$ pdf-> SetXY (50,20);
$ pdf-> SetDrawColor (50,60,100);
$ pdf-> Cell (100,10, "FPDF Tutorial", 1,0, "C", 0);
// Задаване на позиция x и y за основния текст, намаляване на размера на шрифта и писане на съдържание
$ pdf-> SetXY (10.50);
$ pdf-> SetFontSize (10);
$ pdf-> Write (5, "Поздравления! Вие генерирахте PDF.");
// Извеждане на документа
$ pdf-> Изход ("example1.pdf", "I");

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

изисквам ("fpdf.php");
клас PDF разширява FPDF
{
Заглавие на функцията ()
{
$ това-> Изображение ("/ logo.png", 10,8,33);
$ това-> SetFont ("Helvetica", "B", 15);
$ това-> SetXY (50, 10);
$ this -> Cell (0.10, "Това е заглавка", 1.0, "C");
}
функция долен колонтитул ()
{
$ това-> SetXY (100, -15);
$ това-> SetFont ("Helvetica", "I", 10);
$ this-> Write (5, "Това е долен колонтитул");
}
}
$ pdf = нов PDF ();
$ pdf-> AddPage ();
$ pdf-> Изход ("example2.pdf", "D");

Както можете да видите, създадохме дъщерен клас, използвайки наследяване и създаването на функциите за горен и долен колонтитул. След това създадохме нов обект и добавихме страницата към документа. Функцията AddPage автоматично ще извика функциите за горен и долен колонтитул. В края извеждаме получената информация във файл, наречен example2.pdf, използвайки стойността "D". В този случай браузърът ще предложи да запази този файл.

И така, научихме основите на създаването на PDF документи, за да използвате повече подробности


Уебсайт с визитка: характеристики на добър старт
Надуваеми матраци от Lamon
WebNames.Ru - десетилетие на активност в Интернет
Апартамент за вашия сайт.
Технологии от BoldSoft
Как да успеем в безнадеждни проекти
Нов тип навигационна система за пейджинг
Генериране на PDF с PHP
PHP и PostgreSQL
Оптимизиране на MySQL

Генериране на PDF с PHP

Предговор
Една от причините да обичам PHP- това е, че в него постоянно се появява подкрепа за нови технологии. Езикът е лесно разширяем и разработчиците могат лесно да добавят нови модули към него, т.е PHPсе превърна в един от най-функционалните уеб езици с поддръжка на огромно разнообразие от различни технологии. Съществуващите днес разширения улесняват разработчиците да работят с 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 четецза четене на документи, създадени с библиотеката PDFLib... Можете да изтеглите Adobe Acrobat Reader безплатно от уебсайта на производителя: http://www.adobe.com/

След като всичко е настроено, е време да създадете прост PDFдокумент:

Запазете този файл и след това го отворете в браузъра си. PHPще обработи този скрипт и ще генерира нов PDFфайл, който ще се запише на мястото, посочено в горната част на скрипта. Ето какво ще видите, когато отворите този PDF документ:

Всички права за публикуване на тази статия принадлежат на

Урок по анатомия
Нека разгледаме по-подробно кода, използван в дадения пример.

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

Нека започнем с първата стъпка - създаване на указател към PDF

// създаване на манипулатор за нов PDF документ $ pdf = pdf_new ();

Това се постига с функцията pdf_new (), която връща указател към този документ. След това този указател се използва във всички следващи операции за създаване PDFдокумент.

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

// отваряне на файл pdf_open_file ($ pdf, "philosophy.pdf");

След като документът е създаден, началото на нова страница може да бъде вмъкнато в него с помощта на функцията pdf_begin_page (),

// стартиране на нова страница (A4) pdf_begin_page ($ pdf, 595, 842);

и края на страницата - познахте!! - чрез функцията pdf_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 () може да се използва за писане на текста на определено място на страницата.
// печат на текст pdf_show_xy ($ pdf, "Има повече неща на небето и земята, Хорацио,", 50, 750); pdf_show_xy ($ pdf, "за какво се мечтае във вашата философия", 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документ, тип линия: "строк", "запълване" или "и двете", цветова палитра (RGB или CMYK) и списък с цветови стойности, които съответстват на избраната палитра.

pdf_setcolor ($ pdf, "строк", "rgb", 0, 0, 0);

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

pdf_setcolor ($ pdf, "строк", "rgb", 1, 0, 0);

И жълтото пълнене ще изглежда така:

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

Всички права за публикуване на тази статия принадлежат на

Квадратно колче, кръгъл отвор
Линиите не са единственото нещо, което можете да рисувате – кръгове и правоъгълници също са в днешното меню. Разгледайте примера по-долу:

Ето изхода:

В този случай функцията pdf_rect () се използва за начертаване на правоъгълник, използвайки посочените долни леви координати, височина и ширина. След това правоъгълникът се попълва и очертава в два различни цвята с помощта на функцията pdf_fill_stroke ().

pdf_setcolor ($ pdf, "fill", "rgb", 1, 1, 0); pdf_setcolor ($ pdf, "строк", "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.php" в променливата $ data; след това тези данни се разделят на отделни компоненти с помощта на explode () и всяка стойност се присвоява на масива $ slices. След това, в цикъл, тези числа се преобразуват в градуси за кръга и се изчертава дъга за всяко парче. Всяко преминаване на цикъла също така изчислява координатата на крайната точка на дъгата и чертае сегмент от линия, за да отдели дъгата от останалата част от окръжността. След като парчето торта е нарисувано, функцията pdf_fill_stroke () се използва за запълването му с цвят; цветът е взет от масива $colors.

Няма да разглеждаме как скриптът изчислява дължината на всяка дъга и сегмент от линия - всичко е обяснено в коментарите на кода.

Ако въведете 5 равни части от данни, графиката ще изглежда така,

Ако въведете 2, тогава:

Ето го - играйте със скрипта и гледайте как различните части се преоформят, за да отразяват относителните размери на данните. Дотогава, до скоро!

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

Имам голям PDF файл, който представлява етажна карта за сграда. Има слоеве за всички офис мебели, включително текстови полета за сядане.

Има ли начин да се направи това чрез PHP? (Или дори Ruby или Python, ако това е, от което се нуждаете)

първоначалната ви заявка: "Имам голям PDF, който е етажна карта за сграда."

Страхувам се да ви кажа, че това може да е по-трудно, отколкото си мислите.

Причината, поради която последното известно използване на lib е за синтактичен анализ на pdf, е smalot и се знае, че проблемът е с голям файл.

Има и Lookig за истинска php библиотека за pdf синтактичен анализ, без скок в паметта, която се нуждае от php конфигурация, за да изключи ограничението на паметта, както правят много "разработчици" (което е наистина непрактично според мен).

вижте тази публикация за повече информация относно производителността на smalot: https://github.com/smalot/pdfparser/issues/163

Те ще ви позволят да отворите PDF файл и да добавите PHP съдържание към него. Предполагам, че можете също да използвате своята функционалност, за да търсите в съществуващо съдържание желаните от вас стойности.

Друга възможна библиотека е TCPDF: http://www.tecnick.com/public/code/cp_dpage.php?aiocp_dp=tcpdf

Актуализирайте, за да добавите по-модерна библиотека: PDF Parser

Хм... не точно php, но можете да извикате програма от php, за да конвертирате pdf във временен html файл и след това да анализирате получения файл с php. Направих нещо подобно за моя проект и това е програмата, която използвах:

Това, което е страхотно в програмата е, че тя ще изплюе текстови елементи в тагове

с абсолютни координати на позицията. Изглежда, че точно това се опитвате да направите.

PDF функции

Въведение

PDF функциите в PHP могат да създават PDF файлове с помощта на библиотеката PDFlib от Томас Мерц.

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

В библиотеката PDFlib и в PHP модула всички функции и параметри имат идентични имена. Трябва да разберете някои основни концепции за PDF и PostScript, за да използвате това разширение ефективно.
Всички размери и координати се измерват в PostScript точки. Обикновено има 72 PostScript ppi, но това зависи от изходната разделителна способност. Вижте документацията на PDFlib, включена в дистрибуцията на PDFlib за обяснение на използваната координатна система.

Моля, имайте предвид, че повечето PDF функции изискват pdf обекткато първи параметър. Вижте примерите по-долу.

Забележка:Има алтернативен PHP модул за генериране на PDF документи, базирани на ClibPDF на FastIO. Вижте секцията 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 инсталира pdflib.

Конфликти с по-стари версии на PDFlib

От PHP 4.0.5 разширението на PHP за PDFlib се поддържа официално от PDFlib GmbH. Това означава, че всички функции, описани в урока за PDFlib (V3.00 или по-нова версия), се поддържат в PHP 4 с абсолютно същите стойности и параметри. Само връщаните стойности може да се различават от урока за PDFlib, тъй като се използва конвенцията за връщане на PHP НЕВЕРНО... От съображения за съвместимост това обвързване на 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 ()подаване на "Автор" като втори параметър.
pdf_set_info_keywords () pdf_set_info ()подаване на "Ключови думи" като втори параметър.
pdf_set_leading () pdf_set_value ()преминаване на "водещ" като втори параметър.
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 ()подаване на "разстояние между думите" като втори параметър.
pdf_set_transition () pdf_set_parameter ()подаване на "преход" като втори параметър.
pdf_open () pdf_нов ()плюс последващо обаждане pdf_open_file ()
pdf_set_font () pdf_findfont ()плюс последващо обаждане pdf_setfont ()
pdf_set_duration () pdf_set_value ()подаване на "продължителност" като втори параметър.
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 очертан" с очертан шрифт 30pt. Текстът също е подчертан.

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

$ pdf = pdf_нов ();
pdf_open_file ($ pdf, "test.pdf");

pdf_set_info ($ pdf, "Заглавие", "Тест за PHP обвивка на PDFlib 2.0");
pdf_set_info ($ pdf, "Създател", "Виж автора");
pdf_set_info ($ pdf, "Тема", "Тестване");
pdf_begin_page ($ pdf, 595, 842);
pdf_add_outline ($ pdf, "Страница 1");
$ font = pdf_findfont ($ pdf, "Times New Roman", "winansi", 1);
pdf_setfont ($ pdf, $ шрифт, 10);
pdf_set_value ($ pdf, "предаване на текст", 1);
pdf_show_xy ($ pdf, "Times Roman очертани", 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);
ехо "приключи" ;
?>

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

$ len = размер на файла ($ име на файл);
заглавка ();

заглавка ();
readfile ($ filename);
?>

Разпределението на PDFlib съдържа по-сложен пример, при който се създава страница с аналогов часовник. Тук използваме функцията за създаване в паметта на PDFlib, за да избегнем използването на временни файлове. Този пример, преобразуван в PHP от примера PDFlib, е: (Същият пример е наличен в документацията на CLibPDF.)

Пример 2.pdfclock от дистрибуцията на PDFlib

$ радиус = 200;
$ марж = 20;
$ pagecount = 10; $ pdf = pdf_new (); pdf_open_file ($ pdf, "")) (
грешка в ехо;
изход;
); pdf_set_parameter ($ pdf, "warning", "true"); pdf_set_info ($ pdf, "Creator", "pdf_clock.php");
pdf_set_info ($ pdf, "Автор", "Уве Щайнман");
pdf_set_info ($ pdf, "Заглавие", "Аналогов часовник"); $ pagecount -> 0) (
pdf_begin_page ($ pdf, 2 * ($ радиус + $ марж), 2 * ($ радиус + $ марж)); pdf_set_parameter ($ pdf, "преход", "изтриване");
pdf_set_value ($ pdf, "продължителност", 0.5); pdf_translate ($ pdf, $ радиус + $ марж, $ радиус + $ марж);
pdf_save ($ pdf);
pdf_setrgbcolor ($ pdf, 0.0, 0.0, 1.0); / * минути удари * /
pdf_setlinewidth ($ pdf, 2.0);
за ($ алфа = 0; $ алфа< 360 ; $alpha += 6 ) {
pdf_rotate ($ pdf, 6.0);

pdf_lineto ($ pdf, $ радиус - $ марж / 3, 0.0);
pdf_stroke ($ pdf);
) pdf_restore ($ pdf);
pdf_save ($ pdf); / * 5 минути удари * /
pdf_setlinewidth ($ pdf, 3.0);
за ($ алфа = 0; $ алфа< 360 ; $alpha += 30 ) {
pdf_rotate ($ pdf, 30.0);
pdf_moveto ($ pdf, $ радиус, 0.0);
pdf_lineto ($ pdf, $ радиус - $ марж, 0.0);
pdf_stroke ($ pdf);
) $ ltime = getdate (); / * начертайте часовата стрелка * /
pdf_save ($ pdf);
pdf_rotate ($ pdf, - (($ ltime ["минути"] / 60.0) + $ ltime ["часове"] - 3.0) * 30.0);

pdf_lineto ($ pdf, $ радиус / 2, 0.0);

pdf_closepath ($ pdf);
pdf_fill ($ pdf);
pdf_restore ($ pdf); / * начертайте минутната стрелка * /
pdf_save ($ pdf);
pdf_rotate ($ pdf, - (($ ltime ["секунди"] / 60.0) + $ ltime ["минути"] - 15.0) * 6.0);
pdf_moveto ($ pdf, - $ радиус / 10, - $ радиус / 20);
pdf_lineto ($ pdf, $ радиус * 0.8, 0.0);
pdf_lineto ($ pdf, - $ радиус / 10, $ радиус / 20);
pdf_closepath ($ pdf);
pdf_fill ($ pdf);
pdf_restore ($ pdf); / * нарисувайте втора ръка * /
pdf_setrgbcolor ($ pdf, 1.0, 0.0, 0.0);
pdf_setlinewidth ($ pdf, 2);
pdf_save ($ pdf);
pdf_rotate ($ pdf, - (($ ltime ["секунди"] - 15.0) * 6.0));
pdf_moveto ($ pdf, - $ радиус / 5, 0.0);
pdf_lineto ($ pdf, $ радиус, 0.0);
pdf_stroke ($ pdf);
pdf_restore ($ pdf); / * нарисувайте малък кръг в центъра * /
pdf_circle ($ pdf, 0, 0, $ радиус / 30);
pdf_fill ($ pdf); pdf_restore ($ pdf); pdf_end_page ($ pdf); # за да видите някаква разлика
сън (1);
) pdf_close ($ pdf); $ buf = pdf_get_buffer ($ pdf);
$len = strlen ($ buf); заглавка ( "Тип съдържание: приложение / pdf");
header ("Content-Length: $ len");
заглавка ( "Разположение на съдържанието: вградено; име на файл = foo.pdf");
echo $ buf; pdf_delete ($ pdf);
?>
Съдържание

pdf_add_annotation - оттеглено: добавя анотация pdf_add_bookmark - добавя отметка към текущата страница pdf_add_launchlink - добавя анотация за стартиране на текущата страница pdf_add_locallink - добавя връзка за анотация на текущата страница pdf_add_note - не добавя анотация на текущата страница pdf - добавя текущата страница на анотация pdf анотация към текущата страница pdf_add_outline - добавя бележка анотация към текущата страница pdf_add_outline pdf_add_pdflink - добавя връзка за анотация към файл на текущата страница pdf_add_thumbnail - добавя миниатюра / миниатюра към текущата страница pdf_add_weblink - добавя връзка към уеб страницата pdf_arc - рисува дъга (обратно на часовниковата стрелка) pdf_arcn - рисува дъга (по часовниковата стрелка) pdf_arcn - рисува дъга (по часовниковата стрелка) pdf_attachile добавя прикачен файл към текущата страница pdf_begin_page - започва нова страница pdf_begin_pattern - стартира нов шаблон pdf_begin шаблон pdf_circle - рисува кръг pdf_clip - клипове към текущия път / път pdf_close_image - затваря pdf_close_pdi_page - затваря манипулатора на страницата pdf_close_pdi - затваря PDF входа pdf_close - затваря pdf обекта pdf_closepath_fill_stroke - затваря, запълва и очертава текущия път

За да генерираме PDF от HTML, ще използваме библиотеката DomPDF PHP. И заедно с него ще можем да получим висококачествени генерирани PDF файлове с руски символи.

Така че нека започваме. Първо трябва да изтеглите самата библиотека на адрес:

Или го инсталирайте чрез composer:

Композиторът изисква dompdf / dompdf

Трябва обаче да се отбележи, че стандартният монтаж НЕ поддържа руски знаци. Следователно, трябва да ровите в интернет дълго време и да опитвате, опитвайте, опитвайте. За да намалим времето ви, вече сме събрали всичко. По-долу можете да изтеглите библиотека с поддръжка на рускоезични символи.

Ако искате да използвате стандартния монтаж, просто заменете файловете от от този архив (916 KB).

Ще трябва да замените файловете в папката:

../dompdf/lib/fonts

С този скрипт можете да генерирате сложни PDF файлове с таблици, изображения, които ще бъдат вградени от HTML в PDF файл.

Ние използваме тази библиотека за генериране на PDF по ajax заявка. В изтегления архив ще намерите файла index.php, който обработва входящите данни, свързва шаблона, в който вече са вградени изображенията. Разтоварихме напълно работещ и версията, която използваме (5 MB).

Изтеглете пример за генерирания PDF файл (580 KB)

Ако сте изтеглили библиотеката, свържете я с вашия PHP файл с помощта на връзката за автоматично зареждане:

Require_once "dompdf / autoload.inc.php";

Или използвайте GIT:

Git клонинг https://github.com/dompdf/dompdf.git
CD dompdf
git клонинг https://github.com/PhenX/php-font-lib.git lib / php-font-lib
cd lib / php-font-lib
git checkout 0.5.1
cd ..
git клонинг https://github.com/PhenX/php-svg-lib.git php-svg-lib
CD php-svg-lib
git checkout v0.3

Самият манипулатор изглежда така:

// включва автозареждане include_once "autoload.inc.php"; // функция за почистване на кода от злонамерени данни функция challsrt ($ data) ($ array1 = масив ("\" "," * ","% "," 0x "," & "," \ 0 "," \ n " , "\ r", "\ s", "\ t", "\\", "` "," ^ "," $ "," (",") "," [","] " ," (",") "," wss "," blob "," 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