![]() ![]() | |
taxpert.ru — Блог — Генерация PDF средствами PHPГенерация PDF средствами PHP13.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. Интернет-мастерская М. Ю. Уткина. | |