Что такое код pdf_setfont


Содержание

Как установить разные шрифты в TCPDF

Я ищу решение для установки более чем одного шрифта для моего PDF-документа, который создается с помощью tcpdf.

Я хочу сделать что-то вроде этого:

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

Я хочу установить font-weight с регулярными стилями CSS.

Надеюсь, у вас есть решение.

Вы можете использовать свои пользовательские шрифты внутри html следующим образом:

Преобразование Verdana для использования TCPDF:

  • Убедитесь, что папка шрифтов записана
  • Установили ли вы путь K_PATH_FONTS постоянным шрифтам в вашем config/tcpdf_config.php?
  • Читайте прогиб Шрифты TCPDF.

Строки, приведенные ниже, будут генерировать 3 файла в вашей папке шрифтов

rotisserifi56.php, rotisserifi56.ctg, rotisserifi56.rar

используйте это, чтобы сгенерировать файл

Теперь, используйте такие шрифты:

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

Что вы МОЖЕТЕ делать, но НЕ ДОЛЖНО делать:

В основном вы здесь определяете 2 шрифта. Один с именем verdana и один с именем verdana_bold. Пока вы указываете B для жирного шрифта, он не может найти этот ttf. Поскольку TCPDF в основном проверяет файл в каталоге шрифтов, называемый verdana_boldb.ttf. Это не существует, поэтому требуется verdana_bold.ttf(что на первый взгляд кажется правильным поведением).

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

Что вы ДОЛЖНЫ делать:

Добавьте новый тип шрифта:

Если вы хотите использовать шрифт:

Если вы хотите, чтобы элементы, выделенные жирным шрифтом в ячейке HTML, использовали тег html b:

FPDF — Урок 7: Добавление новых шрифтов и поддержка разных кодировок

Категории блога

Сегодня я заканчиваю вольный перевод уроков с официального сайта библиотеки FPDF. Предыдущие мои переводы:

В этом Уроке мы рассмотрим, как использовать Type1 или TrueType шрифты так, что бы можно было использовать не только стандартные шрифты. Другой особенностью является то что, вы сможете выбрать шрифт, кодировку, которая позволит Вам использовать не только западные но и другие Языки (стандартные шрифты имеют слишком мало доступных символов).

Существует два способа использования нового шрифта: вложенные шрифты в PDF или подключаемые. Если указанный Вами шрифт не встроен, то он будет искаться в системе. Преимущество подключаемых шрифтов заключается в том, что файл PDF гораздо легче весит, а с другой стороны, если он не доступен, то используется подстановка стандартного шрифта. Поэтому желательно, чтобы шрифт был установлен на клиентских системах. Если файл будет просматриваться не только на вашем локальном компьютере, то обязательно нужно его вставить в PDF.

Что бы добавить новые TrueTypes шрифты, нужно сделать три шага:

  • Сгенерировать файл метрики (.afm)
  • Сгенерировать файл определения шрифта(.php)
  • Объявить шрифт в сценарии

Для Type1, теоретически генерировать файл AFM не является необходимым, так как обычно файл поставляется вместе со шрифтом. В случае, если у вас есть только метрический файл в формате PFM, ты Вы сможете воспользоваться конвертером который предоставлен на сайте FPDF — http://www.fpdf.org/fr/dl.php? >

Генерация файла метрики

Первым шагом для TrueType является создание AFM-файла. Для этого нужно воспользоваться утилитой ttf2pt1. Бинарный файл для Windows доступен по следующему адресу — http://www.fpdf.org/fr/dl.php? > Чтобы воспользоваться утилитой ttf2pt1 в командной строке следует ввести следующее :
ttf2pt1 -a font.ttf font

Возьмем например шрифт Comic Sans MS Обычный:
ttf2pt1 -a c:\windows\fonts\comic.ttf comic

С помощью этой утилиты создаются два файла один из которых является файл с расширением .afm который собственно нам и нужен.

Генерация файла для определения шрифта

Вторым шагом является создание PHP файла, который содержит всю необходимую информацию для FPDF. Для того чтобы чтобы это сделать, в каталоге font/makefont Вы сможете найти дополнительный скрипт в фале makefont.php, который содержит следующие функции:
MakeFont( string fontfile, string afmfile [, string enc [, array patch [, string type]]])

Значения которые принимает метод, в качестве параметров:

  • fontfile — Путь к файлу с расширением .ttf или .pfb.
  • afmfile — Путь к файлу с расширением .afm.
  • enc — Название используемой кодировки. По умолчанию cp1252.
  • patch — Дополнительные изменения касающиеся кодировки. По умолчанию пуст.
  • type — Тип шрифта ( TrueType или Type1 ). По умолчанию TrueType.

Первым параметром должно быть имя и путь к шрифту. Расширение должно быть .ttf или .pfb. Если у вас есть шрифт Type1 в ASCII формате с расширением .pfa, Вы можете преобразовать его в двоичном формате с помощью утилиты t1utils.

Ранее сгенерированный файл AFM

Кодировка определяет связь между кодом (от 0 до 255) и характер. Первые 128 являются фиксированными и соответствуют ASCII, а следующие являются переменными. Кодировки хранятся в .map файлах. Кодировки бывают следующие:

  • cp1250 (Central Europe)
  • cp1251 (Cyrillic)
  • cp1252 (Western Europe)
  • cp1253 (Greek)
  • cp1254 (Turkish)
  • cp1255 (Hebrew)
  • cp1257 (Baltic)
  • cp1258 (Vietnamese)
  • cp874 (Thai)
  • ISO-8859-1 (Western Europe)
  • ISO-8859-2 (Central Europe)
  • ISO-8859-4 (Baltic)
  • ISO-8859-5 (Cyrillic)
  • ISO-8859-7 (Greek)
  • ISO-8859-9 (Turkish)
  • ISO-8859-11 (Thai)
  • ISO-8859-15 (Western Europe)
  • ISO-8859-16 (Central Europe)
  • KOI8-R (Russian)
  • KOI8-U (Ukrainian)

Шрифт который Вы выберете должен содержать символы, соответствующие выбранной кодировке.
В особенных случаях когда символы шрифта не содержат литеры, такие, как Symbol или ZapfDingbats, нужно передать пустую строку.
Кодировки, которые начинаются с СР, используются в ОС Windows. Linux системы обычно используют ISO.
Примечание: стандартные шрифты используют кодировку cp1252.

Четвертый параметр дает возможность изменять кодировку. Иногда Вы можете добавить несколько символов. Так, например, ISO-8859-1 не содержит символ евро. Чтобы добавить его на позицию 164, нужно передать — array(164=>’Euro’).

Последний параметр используется для передачи типа шрифта, в случае, если он не встроены (то есть если первый параметр пуст).

После того как Вы заполнили все параметры функции, Вы можете создать новый файл подключив при этом makefont.php, или просто добавить вызов функции непосредственно внутрь основного файла. После исполнения функции будет создано несколько файлов:.php и .afm. При желании Вы можете переименовать файл. Помимо этого скрипт создает файл с расширением .z, который является сжатым (за исключением случаев, когда функция сжатия недоступна, она требует Zlib). Вы можете переименовать и его тоже, но в этом случае Вы должны изменить переменную $file в .php файле, с соответствующим именем.

Выше приведенный пример создаст два файла: comic.php и comic.z.

Когда Вы получите эти файлы, их нужно скопировать в каталог с шрифтами. Если файл шрифта не получился сжатым то скопируйте файлы с расширением .ttf или .pfb, вместо .z.

Примечание: для шрифтов TTF, Вы можете не делать этого в ручную а скачать эти файлы с помощью утилиты по этому адресу: http://fpdf.fruit-lab.de/. Я думаю что использование данного скрипта не составит у Вас больших трудностей, но все таки: Нужно выбрать файл TTF с компьютера, и потом при нажатии на единственную кнопку получите нужные файлы для FPDF.

Объявление шрифта в сценарии

Последний шаг является наиболее простым. Вам просто нужно вызвать AddFont () метод. Например:

или можно еще проще:

Теперь шрифт можно использовать. Если бы Вы выбрали другой шрифт, например Comic Sans MS Bold (comicbd.ttf), то нужно объявить его так:

Пример

Давайте посмотрим, маленький полностью рабочий пример. Будет использоваться шрифт Calligrapher, который Вы можете скачать на сайте — http://www.abstractfonts.com/ (сайт, предлагает большое количество бесплатных TrueType шрифтов). Ссылка для загрузки шрифта — http://www.abstractfonts.com/download/52. Первым шагом является генерация AFM-файла:
ttf2pt1 -a calligra.ttf calligra

которая дает calligra.afm (и calligra.t1a, который можно удалить). Затем мы создаем файл определения:

Вызов функции даст следующие сообщения:
Warning: character Euro is missing
Warning: character eth is missing
Font file compressed (calligra.z)
Font definition file generated (calligra.php)

Символ Euro отсутствует, так как слишком старый. Другие символы также отсутствуют, однако они нам не понадобятся.
Теперь можно скопировать два файла в директорию и написать сценарий:

Илон Маск рекомендует:  Opengl лекция №1 введение события сообщения контекст

require(‘fpdf.php’); $pdf=new FPDF(); $pdf->AddFont(‘Calligrapher’,»,’calligra.php’); $pdf->AddPage(); $pdf->SetFont(‘Calligrapher’,»,35); $pdf->Cell(0,10,’Enjoy new fonts with FPDF!’); $pdf->Output();

Вот что должно получиться в итоге:

О символе евро

В разных кодировках символ евро расположен на разных позициях да и вообще бывает он не во всех кодировках:

PDF_setfont

(PHP 4 >= 4.0.5, PECL pdflib >= 1.0.0)

PDF_setfont — Configure la police courante

Description

Définit la police de caractère courant en taille fontsize , en utilisant le gestionnaire font retourné par la fonction PDF_load_font() . Cette fonction retourne TRUE en cas de succès ou FALSE si une erreur survient.

User Contributed Notes 6 notes

Here is a simple function to ease changing fonts in your PDF.

function pdf_font($pdf,$size,$face=’arial’)
<
//Set the path
$path=$_SERVER[‘DOCUMENT_ROOT’];
$ <$face>= $face.»=$path/fonts/».$face.».ttf»;

For those who are looking
the PDF core fonts Are

Courier,Courier-Bold,Courier-Oblique,Courier-BoldOblique,
Helvetica,Helvetica-Bold,Helvetica-Oblique,Helvetica-BoldOblique,
Times-Roman,Times-Bold,Times-Italic,Times-BoldItalic,
Symbol,ZapfDingbats

To anyone who is trying to add extra FONTS to work with PHP and pdflib.

Кодировка в счете PDF Virtuemart v.2 (v.3) (invoice pdf по-русски)

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

Остановлюсь на вопросах и буду давать краткие ответы.

Для начала ОБЯЗАТЕЛЬНО.

1) скачиваем кирилические шрифты тут (TCPDF) в разделе Download или можно тут tcpdf_6_0_099

2) Разархивируем и из папки fonts копируем содержимое к себе на сервер в папку

Вопрос 1

на сайте при просмотре товара есть кнопка PDF — при ее нажатии генерируется pdf файл а вместо текста вопросы

Ответ 1

Открываем файл в дримвивере, блокноте или каким редактором кода вы пользуетесь

ваш_сайт/libraries/joomla/document/pdf/pdf.php, находим строку

$pdf->SetFont(‘helvetica’, », 8, », ‘false’); и заменяем на $pdf->SetFont(‘freesans’, », 6, », ‘false’);

В этом же файле находим var $_header_font» и «var $_footer_font» заменяем на

var $_header_font = ‘freesans’;

var $_footer_font = ‘freesans’;

Вопрос 2

Счет PDF в Virtuemart 2 или 3 вместо текста вопросы.

Ответ 2

Идем в VirtueMart — Магазин — вкладка «Счета» и в блоке «Внешний вид» в списке «Шрифт по умолчанию» выбрать Free Mono (UTF-8 Unicide).

Вопрос 3

В Virtuemart 2 или 3 в меню Магазин-Счета нет доступных шрифтов.

Ответ 3

Идем в VirtueMart — Магазин — вкладка «Счета» и в блоке «Внешний вид» в списке «Шрифт по умолчанию» видм что ничего нет.

открывем файл components/com_virtuemart/helpers/vmpdf.php

Эту строку комментируем // $this->SetFont($vmFont, », $this->vendor->vendor_letter_font_size, », ‘false’);
Эту вставляем $this->SetFont(‘freesans’, », ‘8’, », ‘false’);

тем самым мы напрямую говорим virtuemart, что шрифт у нас по умолчанию для генерации PDF freesans.

Вопрос 4

Счет PDF в Virtuemart 2 или 3 вместо текста знаки вопроса.

Ответ 4

Открываем файл: /components/com_virtuemart/controllers/invoice.php

Ищем следующее значение: $pdf->setHeaderFont(Array(‘helvetica’, », 8));

Изменяем на: $pdf->setHeaderFont(Array(‘freesans’, », 8));

Ищем значение: $pdf->setFooterFont(Array(‘helvetica’, », 10));

Изменяем на: $pdf->setFooterFont(Array(‘freesans’, », 10));

Ищем значение: $pdf->SetFont(‘helvetica’, », 8, », true);

Изменяем на: $pdf->SetFont(‘freesans’, », 8, », true);

Ищем значение: $this->SetFont(‘helvetica’, ‘I’, 8);

Изменяем на: $this->SetFont(‘freesans’, ‘I’, 8);

Дальше открываем файл /components/com_virtuemart/helpers/vmpdf.php

Ищем следующее значение: $this->setHeaderFont(Array(‘helvetica’, », 8));

Изменяем на : $this->setHeaderFont(Array(‘freesans’, », 8));

Ищем следующее значение: $this->setFooterFont(Array(‘helvetica’, », 10));

Изменяем на : $this->setFooterFont(Array(‘freesans’, », 10));

Ищем следующее значение: $this->SetFont(‘helvetica’, », 8, », true);

Изменяем на : $this->SetFont(‘freesans’, », 8, », true);

Ищем следующее значение: $this->SetFont(‘helvetica’, ‘I’, 8);

Изменяем на : $this->SetFont(‘freesans’, ‘I’, 8);

Если таких значений у вас в коде нет, Не беда отправляемся в пункт в опрос №3

Вопрос 5

tcpdf error: the xobject template » doesn’t exist! что за ошибка?

Ответ 5

затронуто ядро генерации — надо обновить полностью Virtuemart 2 или 3.

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


  • Оцените материал

SeRbGa

Последнее от SeRbGa

Оставить комментарий

Комментарии

вот инфа с оф. сайта вирта.
How to start

You are new to Joomla and VirtueMart or you don’t have Joomla already installed? we recommend to download the Full installer:

Unzip the downloaded archive
Move the unzipped archive to your web folder
Open your browser and enter the URL of you website
The installation process starts. Follow the instructions.

You already have Joomla installed ?
Download VirtueMart component (Core, AIO and TCPDF)

Unzip the downloaded archive
Install the VirtueMart core component via the Joomla installer first (com_virtuemart.w.x.y.zip)
Install the VirtueMart AIO component second. It contains VirtueMart plugins and modules (com_virtuemart_ext_aio.w.x.y.zip)
Install the TCPDF component. It is necessary for printing invoices and delivery notes (com_tcpdf_1.0.0.zip)

все так ставили ?

вот мой кусок кода. версия вирта 3.0.9

$vmFont=$this->vendor->vendor_letter_font;
$this->SetFont($vmFont, », $this->vendor-> vendor_letter_f ont_size, », ‘false’);
$this->setHe aderFont(Array( $vmFont, », $this->vendor-> vendor_letter_h eader_font_size ));
$this->setFooterFont(Array($vmFont, », $this->vendor-> vendor_letter_f ooter_font_size ));

Странно, но не помогло(.
Стоит последняя версия Joomla и Virtuemart. Проделал все пункты (кроме 4-го) что указаны выше, но знаки вопросов не убрались(.
Вот кусочек кода из vmpdf.php :

$vmFont=$this->vendor->vendor_letter_font;
//$this->SetFont($vmFont, », $this->vendor-> vendor_letter_f ont_size, », ‘false’);
$this->SetFont( ‘freesans’, », ‘8’, », ‘false’);
$this->setHeaderFont(Array($vmFont, », $this->vendor-> vendor_letter_h eader_font_size ));
$this->setFooterFont(Array($vmFont, », $this->vendor-> vendor_letter_f ooter_font_size ));
может тут где то проблема? Помогите плиз

You have no rights to post comments

Свежие статьи

  • 1
  • 2
  • 3
  • 4

Смена редиректа после авторизации НЕ…

Август 1, 2020 SeRbGa

Хочешь проверить свой навык владения…

Июль 27, 2020 SeRbGa

Коллекция CSS3 эффектов :hover

Июль 27, 2020 SeRbGa

Поочередное разворачивание и сворачи…

Июль 26, 2020 SeRbGa

Как отключить проверку обновлений Jo…

Октябрь 19, 2015 SeRbGa

Сторонний плагин в joomla не работае…

Сентябрь 29, 2015 SeRbGa

Добавить в скрипт замену запятой, на…

Февраль 17, 2015 SeRbGa

Шпаргалки для начинающих фотографов

Февраль 2, 2015 SeRbGa

Поиск Virtuemart 2, 3 — дефис «…

Январь 20, 2015 SeRbGa

Кодировка в счете PDF Virtuemart v.2…

Ноябрь 19, 2014 SeRbGa

Поиск Virtuemart 2 — расширение диап…

Октябрь 7, 2014 SeRbGa

Подборка 4 PSD макетов Apple Macbook

Сентябрь 25, 2014 SeRbGa

Большая подборка красивых PSD макето…

Сентябрь 25, 2014 SeRbGa

Новости и новинки для дизайнеров (№ …

Сентябрь 22, 2014 SeRbGa

Photoshop actions — photos to painte…

Сентябрь 22, 2014 SeRbGa

25 потрясающих инструментов и ресурс…

Сентябрь 17, 2014 SeRbGa

КАТЕГОРИИ

Популярные статьи

  • 1
  • 2
  • 3
  • 4

Добавить в скрипт замену запятой, на точ…

Иконки социальных сетей — набор (PSD, AI…

K2 — как убрать item и >Октябрь 24, 2013 No comments

Интеграция JComments с K2

Мега подборка JQuery Sl >Август 1, 2014 No comments

Метки обрезки или Обрезные метки в illus…

Кодировка в счете PDF Virtuemart v.2 (v.…

Страница ошибки 404 в Joomla 1.5,2.5,3.0…

RSForm Pro — экспорт заполненных полей в…

Анимированный фон (background) для сайта…

Как вставить php код. Конструкция включе…

Установка phpMyAdmin в «Битрикс веб-окру…

Как сделать произвольные title в компоне…

Текстуры Пыль и Шум

Выводим форму модуля WEBFORM или CONTACT…

Ошибка: Inval >Январь 28, 2014 No comments

Расширение Gr >Июнь 3, 2014 No comments

Wacom Intuos Pro — обзор графических пла…

Бесконечная рекурсия. Эффект Дросте

Ссылка в меню 1C-Битрикс в новом окне

последние комментарии

Иконки социальных сетей — набор (PSD, AI)

Шпаргалки для начинающих фотографов

Кодировка в счете PDF Virtuemart v.2 (v.3) (invoice pdf по-русски)

ON-Line Блог SeRbGa.ru предоставляет самую свежую и актуальную информацию для веб-дизайнеров и разработчиков в виде тематических материалов, уроков созданных собственноручно, а так же переводов статей и новостей, полученных с зарубежных информационных ресурсов.

Копирование материалов сайта разрешено только с указанием активной индексируемой гиперссылки на данный сайт!

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

вызов функции pdf_setfont 66ой раз

Ventura

Новичок

вызов функции pdf_setfont 66ой раз

Добрый день, столкнулся с такой проблемой:

мои скрипты работают под вин2000. Но после переноса на Windows Server 2003 вылетает ошибка при вызове функции
pdf_setfont 66ой раз. Причём независимо от того какие шрифты я использую. Как со встроенными так и с виндовскими.
Описание ошибки правда разное, но суть одна.

вот код для версии с использование встроенных шрифтов

pdf_set_parameter($pdf, «resourcefile», «c:/php/pdf-related/pdflib.upr»);

pdf_set_parameter($pdf, «FontOutline», «Courier=$fontdir/COUR.TTF»);
pdf_set_parameter($pdf, «FontOutline», «Courier-Oblique=$fontdir/COURI.TTF»);
pdf_set_parameter($pdf, «FontOutline», «Courier-Bold=$fontdir/COURBD.TTF»);
pdf_set_parameter($pdf, «FontOutline», «Courier-BoldOblique=$fontdir/COURBI.TTF»);

function set_font($fn,$fs,$f_enc=»host»,$emb=1) <
global $pdf;
static $cnt;
$cnt++;
echo «$cnt.$fn
«;
$font = pdf_findfont($pdf, $fn, $f_enc,$emb);
pdf_setfont($pdf, $font, $fs);
echo «End$font
«;
return array(«f»=>$fn,»h»=>$fs);
>

1.Courier
End1
2.Courier
End1
3.Courier-Bold
End2
.
11.Courier-BoldOblique
End3
.
60.Courier-Oblique
End4
61.Courier
End1
62.Courier-Oblique
End4
63.Courier-Oblique
End4
64.Courier-Oblique
End4
65.Courier
End1
66.Courier

Fatal error: PDFlib error: Outline data for font ‘Courier’ not found in d:\web\1000\html\get_pdf.php on line 44

Подскажите, где трабла может быть?

Модераторы, мож в «продвинутые» передвинуть?

Создаем документ PDF из PHP скрипта с помощью библиотеки FPDF

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

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

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

В данном уроке мы создадим прекрасный 2-х страничный документ PDF с помощью PHP. Мы будем использовать библиотеку FPDF.

Вот что должно в конечном итоге получиться:

Установка FPDF

Для использования FPDF нужно установить его на сайт. Скачайте архив FPDF и распакуйте его в папку fpdf , которую надо создать в папке вашего сайта.

Начинаем писать скрипт PHP

Теперь у вас есть установленный FPDF и можно начать писать скрипт PHP для генерации отчета в формате PDF. Создаем файл report.php в той же папке, где вы создали папку fpdf и открываем его в текстовом редакторе.

Первое, что нужно сделать — включить библиотеку FPDF. Библиотека называется fpdf.php и располагается в папке fpdf :

Теперь добавим несколько переменных для конфигурации:

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

  • Различные цвета, которые используются в отчете. Каждый цвет задается как массив из трех элементов, который содержит значения для красного, зеленого и голубого цветов (в диапазоне 0-255).
  • Заголовок отчета («2009 W >Создаем титульную страницу

Теперь можно приступить к построению PDF. Сначала создаем титульную страницу отчета. Оно содержит логотип компании и название отчета, расположенные по центру страницы.

Создаем объект FPDF

Сначала нужно создать новый объект FPDF, который будет содержать данные PDF. Конструктор FPDF принимает 3 аргумента:

  • Ориентация страницы. Используйте ‘P’ для книжной ориентации страницы, или ‘L’ для альбомного расположения листа. По умолчанию используется ‘P’ .
  • Единицы, которые используются для измерений на странице. Используйте ‘pt’ , ‘mm’ , ‘cm’ , или ‘in’ . По умолчанию используется ‘mm’ .
  • Формат страницы. Возможные значения: ‘A3’ , ‘A4’ , ‘A5’ , ‘Letter’ , и ‘Legal’ . Или вы можете задать пользовательские значения для ширины и высоты в двумерном массиве. По умолчанию используется ‘A4’ .

Например, устанавливаем книжную ориентацию страницы, миллиметры в качестве единиц измерения и формат A4:

Устанавливаем цвет текста

Теперь установим цвет текста на странице. Делаем это с помощью метода FPDF SetTextColor() , передавая ему значения для красного, зеленого и синего цветов (каждое значение лежит в диапазоне 0-255). Используем значения цветов в массиве $textColour, который был создан в разделе конфигурации:

Создаем страницу

Теперь мы готовы создать новую пустую страницу в документе PDF с помощью вызова метода FPDF AddPage() :

Добавляем изображение логотипа

FPDF позволяет просто вставлять изображения на страницу. Нужно вызвать метод Image() со следующими аргументами:

  • Путь к файлу с изображением. Это может быть абсолютный путь, или относительный к скрипту PHP script. Также можно использовать URL.
  • Положение X и Y левого верхнего угла изображения на странице документа PDF. Если опустить данные аргументы, то будет использована текущая позиция.
  • Ширина и высота изображения в документе PDF. Если опустить оба значения, то будут использовать оригинальные размеры изображения (при 72 DPI). Если опустить одно значение, то другое будет вычисляться автоматически.
  • Тип изображения. Допустимые значения включают: ‘ JPEG’ , ‘PNG’ и ‘GIF’ (в верхнем или нижнем регистре при написании). Если опустить данное значение, то FPDF будет распознавать формат по расширению имени файла.
  • URL ссылки для изображения. Указывается опционально — если указан URL, то изображение становится ссылкой, которая воспринимает нажатия кнопки мыши.


Все величины, такие позиция X и Y, высота и ширина, используют единицы измерения, указанные при создании документа PDF (в данном случае миллиметры).

Вы можете создать ваше собственное изображение логотипа (нужно использовать разрешение 300 DPI) или использовать изображение из исходников. Сохраните изображение в той же папке, что и скрипт PHP, а затеем вставьте изображение в документ PDF с помощью следующей команды:

Устанавливаем шрифт

FPDF позволяет установить шрифт, стиль и размер для текста в документе PDF. Для этого используется метод SetFont() со следующими аргументами:

  • Семейство шрифтов. Вы можете использовать следующие стандартные имена для семейств шрифтов: ‘Courier’ , ‘Helvetica’ , ‘Arial’ , ‘Times’ , ‘Symbol’ , или ‘ZapfDingbats’ .
  • Стиль шрифта. Можно использовать: » (обычный), ‘B’ (полужирный), ‘I’ (курсив), и ‘U’ (подчеркнутый). Можно использовать комбинации опций — например, ‘BU’ для полужирного подчеркнутого текста.
  • Размер шрифта. Указывается в пунктах (по умолчанию используется значение 12 пунктов).

Для названия отчета на титульной странице используем шрифт Arial Bold размером 24 пункта:

Можно импортировать любой шрифт TrueType или Type 1 с помощью метода AddFont() . Для более подробных сведений надо почитать руководство по FPDF .

Добавляем текст

Теперь можно добавить название отчета. Объект FPDF использует концепцию «текущая позиция», куда вставляется следующая часть текста или другой элемент. Так как нужно, чтобы название отчета располагалось в середине страницы, необходимо передвинуть текущую позицию вниз к данной точке, которая располагается на расстоянии 160мм от верха страницы (значение хранится в конфигурационной переменной $reportNameYPos ). Для этого используется метод FPDF Ln() , который добавляет перевод строки на указанное расстояние:

Если не указать высоту перевода строки, то будет использоваться высота последней выведенной ячейки.

Теперь добавим название отчета. Существует несколько различных способов добавить текст с помощью FPDF. В нашем случае используем метод Cell() , который, помимо всего прочего, позволяет легко центрировать текст.

Cell() принимает следующие аргументы (все являются опциональными):

  • Высота и ширина ячейки. По умолчанию ширина растягивается до правого поля, а высота устанавливается в 0.
  • Строка текста для вывода. По умолчанию » .
  • Указание для отображения рамки вокруг ячейки. Это может быть либо число ( 0 =нет рамки, 1 =рисуем рамку), или строка с одним или несколькими параметрами из следующего списка: ‘L’ (слева), ‘T’ (сверху), ‘R’ (справа), и ‘B’ (внизу). Значение по умолчанию: 0 .
  • Куда помещать текущую позицию после вывода ячейки. Значение может быть 0 (справа от ячейки), 1 (начало следующей строки), или 2 (ниже). Значение по умолчанию: 0 .
  • Выравнивание текста. Возможные значения: ‘L’ (выравнивание по левому краю), ‘C’ (выравнивание по центру), или ‘R’ (выравнивание по правому краю). Значение по умолчанию: ‘L’ .
  • Нужно ли заливать фон ячейки цветом. true = заливаем цветом, false = оставляем фон прозрачным. Значение по умолчанию: false .
  • URL ссылки. Если задан, то ячейка с текстом становится рабочей ссылкой на другой ресурс.

Теперь с помощью метода Cell() вставим название отчета и выровняем его по центру:

Создаем колонтитул страницы и вводный текст

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

Сделаем колонтитул страницы. Добавим новую страницу, затем выведем текст колонтитула, который содержит название отчета, выровнен по центру страницы и использует шрифт Arial размером 17. Используем переменную конфигурации $headerColour для установки цвета текста:

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

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

Метод Write() автоматически переводит текст на следующую строку, когда он достигает правой стороны страницы.

Добавляем данные

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

Создаем строку заголовков таблицы

Таблица имеет строку, которая содержит в ячейках заголовки столбцов «PRODUCT», «Q1, «Q2», «Q3», и «Q4». Ячейка «PRODUCT» использует отличный от других заголовков цвет текста и фона.

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

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

Ниже приведен код для создания строки заголовков. Сначала устанавливается полужирный шрифт. Затем создается ячейка «PRODUCT» с соответствующим текстом и фоном. Затем устанавливается цвет для оставшихся 4 ячеек заголовков, и выполняется цикл по элементам массива $columnLabels для вывода ячеек с выравниванием текста в них по центру:

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

Создаем строки с данными

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

Переменные служат для:

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

$row : Текущий номер строки. Она позволяет выводить соответствующий номер для каждой строки при перемещении по таблице.

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

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

После вывода строки увеличиваем переменную $row , переключаем переменную $fill , и используем Ln() для перехода к началу следующей строки.

Вот код всего цикла:

Создаем график

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

Вычисление масштаба и ширины столбика

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

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

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

Добавляем линии осей и метки на них

Теперь можно добавить линии осей X и Y, метки данных и метки осей. Используем шрифт Arial с размером 10 для меток данных.

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

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

Метод SetXY() позволяет устанавливать текущую позицию в нужное место на странице.

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

Теперь можно добавить метки осей. Используем шрифт Arial полужирный с размером 12. Размещаем метку оси X ниже меток данных, а метку оси Y — наверху оси Y:

Выводим столбцы графика

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

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

Теперь выводим столбцы. Установим переменную $xPos , которая служит для отслеживания текущей позиции по X. Зададим ей значение 40 мм с учетом расстояния для меток по оси Y и отступа для первого столбца. Теперь создадим переменную $bar , которая будет содержать номер текущего столбца. Она будет использоваться для установки цвета для столбца:

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

В коде используется оператор PHP деление по модулю ( % ) для повтора цвета столбца, если количество столбцов превышает количество элементов в массиве $chartColours .

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

Документ PDF готов! Осталось только отправить его браузеру, чтобы пользователь мог просмотреть его или загрузить.

Для этого используется метод FPDF Output() . Он принимает два аргумента: предполагаемое имя для PDF файла и флаг назначения. Данный флаг может принимать следующие значения:

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

D : Загружать PDF.

F : Сохранять файл в папке на сервере.

S : Возвращать данные PDF как строку.

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

Output() автоматически посылает заголовок HTTP «Content-type: application/pdf» , который сигнализирует браузеру о том, что следует ожидать документ PDF.

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

Для создания PDF документа нужен только PHP и FPDF.

Заключение

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

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/create-nice-looking-pdfs-php-fpdf/
Перевел: Сергей Фастунов
Урок создан: 15 Сентября 2010
Просмотров: 118351
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

Подборка из нескольких видов PHP песочниц. На некоторых вы в режиме online сможете потестить свой код, но есть так же решения, которые можно внедрить на свой сайт.

Generating PDF files with PHP and FPDF

Большинство web-сервисов экспортируют данные в разных форматах для дальнейшего использования. Данная статья о том, как экспортировать данные в pdf-формате.
Хотя многие знают как это делать, я опишу кратко для тех кто не знает.

PHP позволяет нам генерировать файлы в формате pdf налету. FPDF — это бесплатный код на языке php, позволяющий создавать документы в формате pdf и производить с ними различные манипуляции.

PDFlib
PHP API содержит большое количество функций для работы с PDF, реализованных на базе PDFlib. Несмотря на это, данная библиотека не является бесплатной для коммерческого использования. Бесплатная версия называется PDFlib Lite и бесплатная для персонального использования, однако она ограничена в функциональности. Для того чтобы использовать полную библиотеку PDFlib необходимо купить лицензию.

Почему FPDF?
Альтернатива — это использование FPDF, бесплатный класс содержащий большое количество функций для создания и манипулирования PDF-документами. Ключевое слово для данного момента — это ее бесплатность. Вы можете скачать, использовать и модифицировать данный класс как вам заблагорассудится. В дополнение к бесплатности, эта библиотека намного проще, чем PDFlib. Для использования PDFlib необходимо установить ее как расширение к PHP, в то время как FPDF может быть подключена в программу напрямую.

Создание документов PDF
Для того чтобы начать, необходимо скачать код FPDF с сайта FPDF Web site и включить в программу. Например, вот так

$pdf->SetAuthor(‘Lana Kovacevic’);
$pdf->SetTitle(‘FPDF tutorial’);

В функцию AddPage () можно передать параметры «P» или «L» для указания ориентации страницы. Функция SetDisplayMode определяет как будет отображена страница. Вы можете определить параметры увеличения и разметки. В примере мы используем 100% увеличение и разметку по умолчанию, определенную в программе, используемой для просмотра.

Сейчас, когда у нас есть страница, давайте вставим в нее изображение для того чтобы сделать страницу приятней, также мы добавим ссылку. Мы отобразим логотип FPDF используя функцию Image и передадим в нее следующие параметры — название файла, размерность и адрес.

$pdf->SetXY(10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,’Congratulations! You have generated a PDF. ‘);

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

Итак полный текст:

require(‘fpdf.php’);
//create a FPDF object
$pdf=new FPDF();
//set document properties
$pdf->SetAuthor(‘Lana Kovacevic’);
$pdf->SetTitle(‘FPDF tutorial’);
//set font for the entire document
$pdf->SetFont(‘Helvetica’,’B’,20);
$pdf->SetTextColor(50,60,100);
//set up a page
$pdf->AddPage(‘P’);
$pdf->SetDisplayMode(real,’default’);
//insert an image and make it a link
$pdf->Image(‘logo.png’,10,20,33,0,’ ‘,’http://www.fpdf.org/’);
//display the title with a border around it
$pdf->SetXY(50,20);
$pdf->SetDrawColor(50,60,100);
$pdf->Cell(100,10,’FPDF Tutorial’,1,0,’C’,0);
//Set x and y position for the main text, reduce font size and write content
$pdf->SetXY (10,50);
$pdf->SetFontSize(10);
$pdf->Write(5,’Congratulations! You have generated a PDF.’);
//Output the document
$pdf->Output(‘example1.pdf’,’I’);

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

require(‘fpdf.php’);
class PDF extends FPDF
<
function Header()
<
$this->Image(‘logo.png’,10,8,33);
$this->SetFont(‘Helvetica’,’B’,15);
$this->SetXY(50, 10);
$this->Cell(0,10,’This is a header’,1,0,’C’);
>
function Footer()
<
$this->SetXY(100,-15);
$this->SetFont(‘Helvetica’,’I’,10);
$this->Write (5, ‘This is a footer’);
>
>
$pdf=new PDF();
$pdf->AddPage();
$pdf->Output(‘example2.pdf’,’D’);

Как вы видите мы создали дочерний класс, используя наследование и создания функций Header и Footer. Затем мы создали новый объект и добавили страницу в документ. Функция AddPage автоматически вызовет функции Header и Footer. В конце мы вывели полученную информацию в файл с названием example2.pdf, используя значение «D». В этом случае браузер предложит сохранить данный файл.

Итак, мы изучили основы создания PDF-документов, для более подробной информации используйте FPDF Web site.

pdf_setfont

Руководство по PHP
Пред. След.

pdf_setfont

(PHP 4 >= 4.0.5, PECL)

pdf_setfont — Set the current font

Description

Set the current font in the given size , using a font handle returned by pdf_findfont() . Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

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

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

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

FPDF + русский шрифт

Нужно создать PDF версию. Скачал FPDF, установил, вроде бы все нормально. Но вот проблема с русским языком.
Сплошные крякозяблики.

Подскажите как там писать на русском?

20.05.2013, 11:05

Русская кодировка в FPDF
Народ привет! Выручите пожалуйста, Кто-нибудь работал с FPDF ? Если да, то как там решить.

Библиотека FPDF — как подключить ее к сайту
Привет всем! Народ, кто работал с этой библиотекой, подскажите, пожалуйста, как подключать её к.

Ошибка в PHP, при использовании fpdf библиотеки
Всем привет. Настигла меня одна проблема. Я работаю с fpdf библиотекой. И подключаюсь к ней вот.

Как библиотекой FPDF или какой-нибудь другой защищать от печати PDF файлы
Покопался в коде либы, не нашёл такого метода. Может плохо искал или такая возможность есть в.

Fpdf форма с отправкой pdf файла письмом и открытием файла
Помогите, пожалуйста. Уже неделю мучаюсь. Есть форма, которую заполняет пользователь. Данные.

20.05.2013, 11:07 2

Нужно создать PDF версию. Скачал FPDF, установил, вроде бы все нормально. Но вот проблема с русским языком.
Сплошные крякозяблики.

Подскажите как там писать на русском?

20.05.2013, 13:39 [ТС] 3

Вот этого совета мне больше всего и не хватало.
Уже 2 дня ищу. И эту статью видел. И шрифт создал ничего не помогло.

Добавлено через 2 часа 0 минут
Кажется начало получаться.. Нужно текст переформатировать в ср1251.
Только текст почему то кривой «р у с ск и й те к ст» межбуквенный интервал как отрегулировать?

20.05.2013, 13:43 4
20.05.2013, 13:43
20.05.2013, 16:06 [ТС] 5

Попробую сам сделать.

Добавлено через 1 час 9 минут
Получилось. )))

Один вопрос.. На хостинге какие фалы должны быть из созданных?
Только arial.php и arial.z или arial.afm, arial.t1a и сам arial.ttf тоже копировать?

20.05.2013, 16:07 6
20.05.2013, 19:32 [ТС] 7
11.02.2020, 00:49 8

В файле fpdf.php над линией кода
if($align==’R’)
вставте строку
$txt = iconv(‘utf-8’, ‘cp1251’, $txt);

на сайте : http://www.fpdf.org/makefont/index.php сконвертируйтк шривт ttf в файлы
php и zip в кодировке cp1251 !
перепишите эти файлы в папку /fpdf/font
и будет Вам счастье

Не забудте в файл вставить строки
$pdf->AddFont(‘NewFont’,»,newfont.php’);
$pdf->SetFont(‘NewFont»,»,12);

Добавлено через 15 минут
Я сам замучался с решением проблемы русификации библиотеки для создания PDF-файлов на PHP
И наконец нашел решение в интернете собрал вместе из разных источников и исправил ошибки

Илон Маск рекомендует:  Атрибут pluginspage в HTML
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL