Поиск по сайту:
taxpert.ruБлог — Генерация PDF средствами PHP

Генерация PDF средствами PHP

13.05.2021

Секция: Сайтостроение и WEB-разработка

Просмотров: 657

Комментариев нет — ваш комментарий может стать первым

На днях одной из рабочих задач оказалась необходимость генерировать PDF-документы средствами PHP. На первый взгляд — ничего сложного, на деле же сразу пришлось столкнуться с множеством подводных камней, о которых далее речь и пойдёт. В качестве библиотеки для генерации PDF была выбрана FPDF — простая бесплатная библиотека, не требующая компиляции дополнительных расширений под PHP. 

Первым делом сразу же выяснилось, что эта библиотека крайне криво работает (точнее, практически не работает) с кириллицей и использует в качестве рабочей кодировки cp1252. Эта проблема была решена сравнительно быстро — заменой FPDF на модифицированную версию TFPDF, работающую с кодировкой UTF-8. Однако кириллица в сгенерированном документе упорно не желала появляться — вскоре выяснилось, что в комплект библиотеки входят шрифты, не поддерживающие кириллицу, вследствие чего пришлось раздобыть несколько кириллических шрифтов в формате TTF и разместить их в каталоге фонтов библиотеки (по счастью, подключить новый TTF-шрифт средствами библиотеки TFPDF несложно). Впрочем, дополнительно пришлось ещё и сконвертировать раздобытые шрифты в два файла с расширениями php и z (что-то типа карт шрифтов), после чего также разместить их в каталоге фонтов (для TTF у библиотеки имеется вложеный подкаталог в каталоге фонтов, вперемешку шрифты разных форматов не размещаются!)

Далее обнаружилось, что библиотека категорически отказывается отображать в PDF-документе кириллицу, если вызов был произведён из сценария не с кодировкой UTF-8 (у меня он был в кодировке cp1251, и по ряду причин нельзя было менять эту кодировку) — тут мне помог оператор iconv.

А далее, оказавшись перед необходимостью сгенерировать в PDF-документе таблицу с кириллицей, я с ходу нарвался на неприятный сюрприз: окзалось, что встроенная в библиотеку функция Cell (ячейка таблицы) в принципе не поддерживает переносы длинных строк, даже принудительно проставленные. Пришлось воспользоваться расширением «Expanded tables with FPDF», которое, по счастью, сравнительно корректно заработало как с базовой библиотекой FPDF, так и с модифицированной библиотекой TFPDF. Фактически, расширение представляет собой дополнительный класс с наследованием базовых классов модифицированной библиотеки, который необходимо вставить в код этой библиотеки (лично я вставил его в начало кода).

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

Комментарии

добавить комментарий

комментариев не найдено — ваш может стать первым!


© Taxpert. Интернет-мастерская М. Ю. Уткина.