Создавайте PDF документы в WordPress с помощью FPDF

В этом уроке я покажу вам, как создать PDF-документ, используя контент из постов в WordPress. Я буду использовать FPDF - бесплатную библиотеку PDF с открытым исходным кодом, написанную на PHP, и интегрирую ее в пользовательский плагин для управления кодом.

FPDF - это легкая библиотека PDF, написанная на PHP. Он весит менее 100 Кб, что является частью размера других библиотек, таких как MPDF (40Mb ~). Количество функций и возможностей действительно хорошее, и руководство очень понятно для подражания. Это также мощная библиотека, которую можно легко расширять, предлагая только те функции, которые вам нужны.

Комбинируя его с WordPress, можно реализовать целый ряд возможностей, например, создать документ в формате PDF из галереи изображений и создать пользовательские отчеты. Фактически, каждый бит данных внутри WordPress может быть отправлен в FPDF при необходимости.

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

Сначала загрузите FDPF из http://www.fpdf.org/ , Последняя версия на момент написания статьи - 1.81. Я разархивировал это в папку плагинов под названием atomicsmash-pdf-tutorial и создал два пустых php-файла внутри них, которые называются atomicsmash-pdf-helper-functions.php и atomicsmash-pdf-tutorial.php .

Моя структура папок теперь выглядит так:

Добавьте следующий код в atomicsmash-pdf-tutorial.php:

<? php / * * Имя плагина: Учебник по атомарному программированию на основе FPDF * Описание: Плагин, созданный для демонстрации того, как создать документ PDF из постов WordPress. * Версия: 1.0 * Автор: Энтони Хартнелл * URI автора: https://www.atomicsmash.co.uk/blog/author/anthony/ * / if (!fined ('ABSPATH'))) {выход; } include ('atomicsmash-pdf-helper-functions.php'); $ pdf = new PDF_HTML (); if (isset ($ _ POST ['generate_posts_pdf'])) {output_pdf (); } add_action ('admin_menu', 'as_fpdf_create_admin_menu'); function as_fpdf_create_admin_menu () {$ hook = add_submenu_page ('tools.php', 'Atomic Smash PDF Generator', 'Atomic Smash PDF Generator', 'manage_options', 'as-fdpf-tutorial', 'as_fpdf_create_admin_page) } function output_pdf () {$ posts = get_posts ('posts_per_page = 5'); if (! empty ($ posts)) {global $ pdf; $ title_line_height = 10; $ content_line_height = 8; $ Pdf-> AddPage (); $ pdf-> SetFont ('Arial', '', 42); $ pdf-> Write (20, «Учебник по атомному взрыву FPDF»); foreach ($ posts как $ post) {$ pdf-> AddPage (); $ pdf-> SetFont ('Arial', '', 22); $ pdf-> Write ($ title_line_height, $ post-> post_title); // Добавить разрыв строки $ pdf-> Ln (15); // Изображение $ page_width = $ pdf-> GetPageWidth () - 20; $ max_image_width = $ page_width; $ image = get_the_post_thumbnail_url ($ post-> ID); if (! empty ($ image)) {$ pdf-> Image ($ image, null, null, 100); } // Опубликовать содержимое $ pdf-> Ln (10); $ pdf-> SetFont ('Arial', '', 12); $ Pdf-> WriteHTML ($ post-> POST_CONTENT); }} $ pdf-> Output ('D', 'atomic_smash_fpdf_tutorial.pdf'); выход; } function as_fpdf_create_admin_page () {?> <div class = "wrap"> <h1> Атомный удар - Wordpress PDF Generator </ h1> <p> Нажмите ниже, чтобы сгенерировать pdf из содержимого всех сообщений Wordpress. </ p> <p> Каждое сообщение будет находиться на отдельной странице в формате pdf, содержащей заголовок и содержание сообщения. </ p> <form method = "post" id = "as-fdpf-form"> <button class = " button button-primary "type =" submit "name =" generate_posts_pdf "value =" generate "> Создать PDF из сообщений Wordpress </ button> </ form> </ div> <? php}

После сохранения перейдите на страницу плагинов и вы увидите ее в списке:

После активации вы увидите ссылку на страницу администрирования плагина в меню Сервис:

В строке 14 я включаю php-файл, который будет содержать некоторые вспомогательные функции FPDF. По умолчанию FPDF не интерпретирует HTML-теги или внешние ссылки, поэтому мы должны расширить библиотеку дополнительным кодом. Этот код содержит класс PDF_HTML, который расширяет стандартный класс FPDF - вы можете увидеть, что он создается в строке 15 и хранится в переменной $ pdf. Вспомогательные функции будут добавлены в конце.

В строке 17 я проверяю, есть ли у запроса $ _POST, содержащего ключ generate_posts_pdf , значение, которое установлено, а не пусто. Это отправляется с помощью кнопки «Отправить» в html-странице администратора в строке 82. Значение отправляется только в том случае, если кнопка нажата, по сути, это простой способ добавления взаимодействия к плагину для запуска функции.

Функция output_pdf использует get_posts и просматривает каждый из них, чтобы добавить содержимое в PDF с помощью некоторых просто названных функций, называемых AddPage и Write . Документация написана очень хорошо и в основном говорит сама за себя, но вывод post_content не будет работать без добавления вспомогательных функций.

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

В строке 66 я использую функцию WriteHTML, и она включена в код, который должен находиться в файле atomicsmash-pdf-helper-functions.php . Код, который я модифицировал, можно найти здесь: http://www.fpdf.org/en/script/script42.php ,

Введите следующий код в atomicsmash-pdf-helper-functions.php :

<? php include ('fpdf181 / fpdf.php'); / ** * Изменено с http://www.fpdf.org/en/script/script42.php * / // function hex2dec // возвращает ассоциативный массив (ключи: R, G, B) из // шестнадцатеричного html функция кода (например, # 3FE5AA) hex2dec ($ color = "# 000000") {$ R = substr ($ color, 1, 2); $ rouge = hexdec ($ R); $ V = substr ($ color, 3, 2); $ vert = hexdec ($ V); $ B = substr ($ color, 5, 2); $ bleu = hexdec ($ B); $ tbl_color = array (); $ Tbl_color [ 'R'] = $ красный; $ Tbl_color [ 'G'] = $ зеленый; $ Tbl_color [ 'B'] = $ синим; вернуть $ tbl_color; } // преобразование пикселей -> миллиметр при 72 dpi, функция px2mm ($ px) {return $ px * 25.4 / 72; } function txtentities ($ html) {$ trans = get_html_translation_table (HTML_ENTITIES); $ trans = array_flip ($ trans); return strtr ($ html, $ trans); } //////////////////////////////////// класс PDF_HTML расширяет FPDF {// переменные защищенного парсера html $ B; защищенный $ I; защищенный $ U; защищенный $ HREF; защищенный $ fontList; защищенный $ issetfont; защищенный $ issetcolor; function __construct ($ direction = 'P', $ unit = 'mm', $ format = 'A4') {// Вызов родительского конструктора parent :: __ construct ($ direction, $ unit, $ format); // Инициализация $ this-> B = 0; $ This-> I = 0; $ This-> U = 0; $ This-> HREF = ''; $ this-> fontlist = array ('arial', 'times', 'courier', 'helvetica', 'symbol'); $ This-> issetfont = ложь; $ This-> issetcolor = ложь; } function WriteHTML ($ html) {// HTML-анализатор $ html = strip_tags ($ html, "<b> <u> <i> <a> <img> <p> <br> <strong> <em> <font > <TR> <BLOCKQUOTE> "); $ html = str_replace ("\ n", '', $ html); $ А = preg_split ( '/<(.*)>/ U', $ HTML, -1, PREG_SPLIT_DELIM_CAPTURE); foreach ($ a as $ i => $ e) {if ($ i% 2 == 0) {// Текст if ($ this-> HREF) $ this-> PutLink ($ this-> HREF, $ e) ; иначе $ this-> Write (5, полоски (txtentities ($ e))); } else {// Пометить if ($ e [0] == '/') $ this-> CloseTag (strtoupper (substr ($ e, 1))); else {// Извлечение атрибутов $ a2 = explode ('', $ e); $ Тег = strtoupper (array_shift ($ a2)); $ Атр = массив (); foreach ($ a2 as $ v) {if (preg_match ('/ ([^ =] *) = ["\']? ([^" \ '] *) /', $ v, $ a3)) $ attr [strtoupper ($ а3 [1])] = $ а3 [2]; } $ this-> OpenTag ($ tag, $ attr); }}}} function OpenTag ($ tag, $ attr) {// Открытие переключателя тега ($ tag) {case 'STRONG': $ this-> SetStyle ('B', true); перерыв; case 'EM': $ this-> SetStyle ('I', true); перерыв; case 'B': case 'I': case 'U': $ this-> SetStyle ($ tag, true); перерыв; case 'A': $ this-> HREF = $ attr ['HREF']; перерыв; case 'IMG': if (isset ($ attr ['SRC']) && (isset ($ attr ['WIDTH']) || isset ($ attr ['HEIGHT']))) {if (! isset ($ attr ['WIDTH'])) $ attr ['WIDTH'] = 0; if (! isset ($ attr ['HEIGHT'])) $ attr ['HEIGHT'] = 0; $ this-> Image ($ attr ['SRC'], $ this-> GetX (), $ this-> GetY (), px2mm ($ attr ['WIDTH']), px2mm ($ attr ['HEIGHT'] )); } перерыв; case 'TR': case 'BLOCKQUOTE': case 'BR': $ this-> Ln (5); перерыв; case 'P': $ this-> Ln (10); перерыв; case 'FONT': if (isset ($ attr ['COLOR']) && $ attr ['COLOR']! = '') {$ color = hex2dec ($ attr ['COLOR']); $ Этом-> SetTextColor ($ цвет [ 'R'], $ цвет [ 'G'], $ цвет [ 'B']); $ This-> issetcolor = истина; } if (isset ($ attr ['FACE']) && in_array (strtolower ($ attr ['FACE']), $ this-> fontlist)) {$ this-> SetFont (strtolower ($ attr ['FACE']) )); $ This-> issetfont = истина; } перерыв; }} function CloseTag ($ tag) {// Закрытие тега if ($ tag == 'STRONG') $ tag = 'B'; if ($ tag == 'EM') $ tag = 'I'; if ($ tag == 'B' || $ tag == 'I' || $ tag == 'U') $ this-> SetStyle ($ tag, false); if ($ tag == 'A') $ this-> HREF = ''; if ($ tag == 'FONT') {if ($ this-> issetcolor == true) {$ this-> SetTextColor (0); } if ($ this-> issetfont) {$ this-> SetFont ('arial'); $ This-> issetfont = ложь; }}} function SetStyle ($ tag, $ enable) {// Изменить стиль и выбрать соответствующий шрифт $ this -> $ tag + = ($ enable? 1: -1); $ Стиль = ''; foreach (массив ('B', 'I', 'U') как $ s) {if ($ this -> $ s> 0) $ style. = $ s; } $ this-> SetFont ('', $ style); } function PutLink ($ URL, $ txt) {// Поместить гиперссылку $ this-> SetTextColor (0,0,255); $ This-> SetStyle ( 'U', правда); $ This-> Write (5, $ .txt, $ URL); $ This-> SetStyle ( 'U', ложь); $ This-> SetTextColor (0); }} // конец класса

После нажатия Tools> Atomic Smash PDF Generator вы должны увидеть страницу администратора следующим образом:

Нажмите на кнопку, чтобы загрузить файл PDF, который должен выглядеть примерно так, как показано ниже:

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

Похожие

Россия похитила данные АНБ с помощью Антивируса Касперского
... ские хакеры обнаружили на серверах российского производителя инструментов антивирусной программы «Лаборатории Касперского», похищенных из Агентства национальной безопасности США. АНБ определило, что его собственность досталась российскому правительству.
Создавайте PDF с помощью PHP
... в 2003 году и остается одной из наших самых популярных публикаций. Если вы хотите больше узнать о PDF-файлах и документах, вы можете найти это недавняя статья о создании редактора документов HTML5 большой интерес. Впереди игра Одна из причин, по которой я так люблю PHP - это его постоянная поддержка новых технологий. Этот язык обеспечивает расширяемость, облегчая
Как создать PDF в Django с WeasyPrint
Иногда нам нужно создать PDF-файлы, которые содержат информацию. Эта задача в Django проста благодаря библиотеке WeasyPrint . Итак, давайте поговорим об этой библиотеке и о том, как она используется. Что такое WeasyPrint? WeasyPrint - это механизм визуализации для HTML и CSS, который можно экспортировать в PDF . Он направлен на поддержку веб-стандартов
Как создать почтовый сервер с помощью инструмента Plesk ™
Это руководство содержит информацию о том, как настроить и использовать инструмент Plesk в качестве почтового сервера на виртуальном сервере Windows, работающем в Virtualization Station. Что такое Plesk ™? Plesk ™ - это коммерческая платформа для онлайн-хостинга, которая предлагает панель управления, которая позволяет администраторам серверов управлять веб-сайтами, серверами электронной почты, базами данных, DNS-серверами и другими функциями с помощью веб-интерфейса пользователя.
Личный кабинет
... помощью онлайн-банкинга или мобильного приложения: Посмотри это видео на YouTube вернуться в меню ↑ Сберегательный счет 3% Обычно учреждение, управляемое Кшиштофом Бачтой, платит 0,89 процента. (WIBID 1M - 0,55). Лица, которые откроют ROR в тарифе Как личный счет может - в рамках одного из двух
ISO-образы Windows 7, 8.1 и 10 - самый простой способ легальной загрузки
... системы, но некоторые версии довольно сложно найти на сайте производителя. Тем не менее, существует простой способ полностью легально загрузить ISO-образы любой версии Windows от 7 и выше. Обновление
Как превратить ваш Nintendo DS в игровой автомат в стиле ретро
... вас Nintendo DS, вам не нужно ограничиваться только выпуском современных игр"> Если у вас Nintendo DS, вам не нужно ограничиваться только выпуском современных игр. Читайте дальше, как мы покажем вам, как превратить ваш NDS в чудо ретро-игр, в которое играют старые NES, Gameboy и даже аркадные игры. Nintendo DS, возможно, не самая мощная портативная игровая система на рынке, но она достаточно мощна, чтобы эмулировать многие аркадные игры и консольные системы прошлого года.
Сколько можно безопасно похудеть за месяц? • Блог Диеты OXY365
Большинство людей, решая сесть на диету, имеют очень конкретные цели - например, сбросить 10 кг, и для этого им важно время и они думают: как похудеть как можно быстрее? Сколько можно похудеть за месяц? За месяц вы можете потерять довольно много, есть только одно «но» ... сброс 10, 15 или даже 20 кг за четыре недели - это радикальное и опасное изменение для организма, которое может испортить не только здоровье, но и привести к эффекту йо-йо вернуть ненужные килограммы с интересом.
Как удалить фотографии с iPhone из библиотеки фотографий и камеры ролл
К сожалению, используя загрузочное программное обеспечение, вы не можете удалить все фотографии с камеры iPhone. Снимки, сделанные на iPhone, можно удалить, но когда дело доходит до импортированных, загруженных или синхронизированных фотографий, к сожалению, нажатие значка «Корзина» не решит наши проблемы.
Обзор хостинга блога: что такое лучший хостинг блога на 2019 год?
Последнее обновление 1 января 2019 года - Итак, вы хотите начать блог на лучшем хостинге блогов? Сначала посмотрите это небольшое видео, а затем перейдите к полному обзору хостинга блога ниже. Я тебя прикрыл! Некоторые быстрые факты хостинга блога Вот некоторые факты о хостинге блогов и содержании этого обзора: Более 2 000 000 человек используют Bluehost разместить свои
30 потрясающих бесплатных веб-шрифтов Google для вашего веб-дизайна в 2018 году
... сайты, такие как Fontdeck, Typekit, Webtype и т. Д., Предлагают шрифты высшего качества. опытный веб-дизайнеры обычно выбирают Google Fonts, потому что вы можете получить доступ к множеству вариантов с различными категориями и стилями бесплатно. Google Font Browser делает его полностью управляемым для наивных веб-дизайнеров. Они могут легко выбрать идеальный веб-шрифт. Наряду с этим, они могут просмотреть свои работы, чтобы убедиться, что
Enable?
Что такое WeasyPrint?
Что такое Plesk ™?
Сколько можно безопасно похудеть за месяц?
Сколько можно похудеть за месяц?
Обзор хостинга блога: что такое лучший хостинг блога на 2019 год?
Последнее обновление 1 января 2019 года - Итак, вы хотите начать блог на лучшем хостинге блогов?