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

У меня есть большой файл PDF, который представляет собой карту пола для здания. Он имеет слои для всей офисной мебели, включая текстовые окна с местом расположения сиденья.

Есть ли способ сделать это через PHP? (Или даже Ruby или Python, если это то, что необходимо)

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

Я боюсь сказать вам, что это может быть сложнее, чем вы предполагаете.

Причина, по которой последнее известное использование lib используется для анализа pdf, - это smalot, и, как известно, проблема связана с большим файлом.

Здесь также Lookig для реального php lib для синтаксического анализа 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 отчет с помощью 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!

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

Функции 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

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

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

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

Читайте также: