Конвертировать php в пдф
Dompdf – мощнейший PHP-класс для конвертирования HTML-документов в PDF-файлы
Не так давно передо мной встала задача – организовать экспорт HTML-данных в один из популярных графических файлов или же в PDF.
Поскольку получать на выходе картинку в данном случае мне показалось безумием, я решил остановиться на PDF.
Поискав информацию в Интернете и испробовав уйму различных вариантов реализации похожего функционала, я обнаружил, что часть из них работают некорректно, а часть – попросту не работает с кириллицей (русским языком).
Это, конечно, меня не огорчило, и потратив еще немного времени (как говорится, кто ищет – тот всегда найдет), я нашел-таки тот инструмент, который помог мне решить поставленные задачи.
Это класс «Dompdf» для PHP. Что же он из себя представляет?
Возможно, что-то забыл упомянуть, но согласитесь – звучит впечатляюще.
Так вот, именно этот класс помог мне превратить некий документ HTML в идентичный PDF. Именно тому, как им пользоваться, и будет посвящена эта статья.
Итак, прежде всего, для того чтобы воспользоваться этим классом, вы скачиваете архив в конце статьи.
Далее загружаете файлы к себе на сервер и осуществляете подключение скрипта в вашем PHP-файле:
Здесь мы указываем документ непосредственно в теле скрипта, но также вы можете заменить всю строку, например, на:
Где «LINK» – ссылка на HTML-страницу, которую нужно конвертировать.
Ну и финальные штрихи – это добавить соответствующие теги класса:
И общая картина получается такая:
Если вы не хотите, чтобы при посещении скрипта происходило скачивание полученного PDF-файла, а хотите поместить данные в переменную для дальнейшего использования, то строку:
Еще один важный момент: если ссылки на изображения прописаны не относительные, а абсолютные (то есть не «/logo.png», а «https://your_site.com/logo.png»), то в таком случае откройте файл dompdf_config.inc.php в папке /dompdf/ и строку:
Вот, собственно, и все. Очень важный момент: если вы получаете ошибку при конвертировании, то всего скорее, вы используете новые свойства стилей (как было у меня), в таком случае – просто постарайтесь оптимизировать (упростить) свой код.
Конвертировать PHP в PDF с помощью Фотоконвертера
Способы преобразования формата PHP в PDF
Есть несколько способов конвертации PHP файлов в формат PDF. Самый простой способ – это онлайн конвертация. В процессе, ваши файлы загружаются на сервер, и там обрабатываются. Такой вариант будет удобен, если вам нужно конвертировать всего несколько файлов.
Другой способ – установить Фотоконвертер. Установленная программа работает быстрее и эффективнее онлайн конвертации, так как все файлы обрабатываются на локальном диске. Фотоконвертер – это хороший вариант конвертировать множество файлов PHP в формат PDF за раз, сохраняя конфиденциальность информации.
Вы довольно быстро оцените, как Фотоконвертер способен сэкономить массу времени, необходимого при обработке файлов вручную или онлайн.
Скачайте и установите Фотоконвертер
Фотоконвертер легко скачать, установить и использовать – не нужно быть специалистом, чтобы разобраться как он работает.Установить Фотоконвертер
Добавьте PHP файлы
Вы можете выбрать PHP файлы через меню Файлы → Добавить файлы либо просто перекинуть их в окно Фотоконвертера.
Выберите место, куда сохранить полученные PDF файлы
Во вкладке Сохранить выберите папку для записи готовых PDF файлов.
Во вкладке Редактировать есть возможность добавить эффекты редактирования изображений для использования во время конвертации, но это не обязательно.
Выберите PDF в качестве формата для сохранения
Теперь просто нажмите кнопку Старт, чтобы начать конвертацию. Созданные PDF файлы сохранятся в указанное место с нужными параметрами и эффектами.
Видео инструкция
Интерфейс командной строки
Опытные пользователи могут использовать конвертер PHP в PDF через командную строку в ручном или автоматическом режиме.
За дополнительной помощью по использованию по использованию командной строки обращайтесь в службу поддержки пользователей.
Конвертируйте документы и изображения в формат PDF
Конвертер PDF
Конвертируйте документы и изображения в формат PDF с помощью бесплатного он-лайн конвертера PDF. Вы можете сделать скриншот веб-страницы, предоставив нам его ссылку, а после конвертировать его в HTML или PDF. Загрузите ваши документы и тут же получите PDF-файл! Вы также можете ввести ссылку на файл, который мы преобразуем самостоятельно. Он-лайн PDF конвертер может преобразовывать как файлы Microsoft Word, так и другие файлы в PDF.Если файл PDF содержит только сканированные изображения текста, вы можете конвертировать такой файл в файл PDF с текстовой информацией, доступой для поиска, с помощью функции распознавания текста. Если вы хотите провести более сложные операции (например, повернуть, объединить или сортировать страницы файла PDF, воспользуйтесь бесплатным редактором файлов PDF редактор PDF.
Ошибка: количество входящих данных превысило лимит в 3.
Чтобы продолжить, вам необходимо обновить свою учетную запись:
Ошибка: общий размер файла превысил лимит в 100 MB.
Чтобы продолжить, вам необходимо обновить свою учетную запись:
Ошибка: общий размер файла превысил абсолютный лимит в 8GB.
Для платных аккаунтов мы предлагаем:
- Вплоть до 8GB общего размера файла за один сеанс конвертирования 200 файлов на одно конвертирование Высокий приоритет и скорость конвертирования Полное отсутствие рекламы на странице Гарантированный возврат денег
- До 100 Мб общего размера файла за один сеанс конвертирования 5 файлов на одно конвертирование Обычный приоритет и скорость конвертирования Наличие объявлений
Мы не может загружать видео с Youtube.
PDF (Portable Document Format)
DOMPDF – экспорт данных из PHP в PDF
С помощью библиотеки DOMPDF можно создавать PDF файлы из HTML кода. Нужно только сверстать некий HTML шаблон и передать его DOMPDF и уже на выходе получить сгенерированный PDF файл. Но не надо забывать и то, что эта библиотека не движок для обработки веб-страниц, а значит и шаблоны должны быть сверстаны с использованием самых базовых средств: HTML тегов и CSS стилей. Хотя разработчики заявляют, что их библиотека поддерживает стандарты CSS 2.1 и даже некоторые свойства CSS 3. С полным их перечнем можно ознакомиться здесь. Есть, кстати, один минус – она является довольно “прожорливой” к оперативной памяти. Поэтому возможно придется задуматься об аренде виртуального выделенного сервера. Но это зависит от содержания и объема планируемых PDF документов. С другой стороны она вам может помочь сэкономить много времени на разработку различных отчетов в формате PDF.
Читая различную документацию по DOMPDF, а ее немного и то в основном больше информации в виде ответов на заданные вопросы. Я заметил, что ее используют для более тривиальных задач. Ну, к примеру, ответа на вопрос: как задать номер стартовой страницы для документа? Мной получено не было.
Сейчас я вам хочу рассказать о тех “подводных камнях”, с которыми мне пришлось столкнуться. И поверьте, я потерял много времени. Потерял бы еще больше, если бы мне не дал пару советов один добрый человек. Уже имевший опыт по работе с данной библиотекой.
Представляю перечень проблем, с которыми мне пришлось столкнуться:
Установка библиотеки
Саму библиотеку берем вот здесь. Я, к сожалению, не могу сказать (как обычно говорят в таких случаях), что необходимо скачать самую новую версию. Далее я объясню почему. Но я все-таки надеюсь, что со временем существующие в последней версии баги будут устранены. После получения архива с библиотекой, распакуйте его в нужную вам на сервере директорию.
В корневом каталоге библиотеки DOMPDF находиться файл конфигурации – dompdf_config.inc.php. В нем присутствуют базовые настройки библиотеки. Нас здесь интересуют следующие три:
Установка шрифтов
Изначально в библиотеке присутствует набор базовых шрифтов, однако среди них нет тех, которые поддерживали бы кириллицу. Поэтому если нужны кириллические шрифты или есть необходимость в расширении имеющегося множества уже готовых шрифтов, то придется заняться их установкой. И в этом нет ничего сложного. Устанавливать можно шрифты как TrueType (*.ttf) так и OpenType (*.otf). Для работы нам понадобится PHP скрипт load_font.php, который располагается в корне каталога библиотеки DOMPDF. Запуск данного скрипта необходимо производить из командной строки и на вход он принимает следующие параметры:
Для демонстрации произведем установку шрифта “roboto”. Предположим что каталог со шрифтом “roboto” и его стилями находится в директории “D:\font”. Соответственно если нам нужен только шрифт со стилем “normal”, то необходимо запустить скрипт со следующими параметрами:
Но если требуется установить шрифт “roboto” со всеми четырьмя его стилями (normal, bold, italic и bold-italic), то вызов скрипта уже будет иметь другой вид:
Обратите внимание на порядок передачи параметров скрипту для одновременного создания шрифта “roboto” с его четырьмя стилями. Первым передается путь к файлу шрифта со стилем “normal”, затем “bold” и т.д. Этот порядок нарушать ни в коем случае нельзя.
Создание шаблона для DOMPDF
Шаблон представляет обычную HTML страницу с добавлением некоторых новых свойств CSS, которые необходимы для работы самой библиотеки. Весь исходный код шаблона я здесь приводить не стану, так как в этом нет необходимости. Тем более что к статье прилагаются все необходимые файлы. Кстати в шаблоны можно встраивать код на PHP и JavaScript. В нашем случае в шаблоне будет располагаться шесть меток: метка для устанавливаемого номера страницы , метка с кодом цвета для подвала страницы, метка для текста на первой странице, метка для текста на второй странице и две метки и для вывода информационного текста в подвал. Также будет присутствовать встроенный скрипт на PHP для примитивного рисования и вывода нумерации страниц. Данные, которые могут занимать более одной страницы необходимо заключать в блок. Можно конечно этого не делать, но тогда не будет возможности вставлять разрывы страниц, да и текст может не равномерно заполнять страницу. Для вставки разрыва страницы, следует в стилях этого блока прописать одно из следующих свойств:
Нумерацию можно сделать и другим способом. Создаете CSS стиль:
А затем в необходимое вам в HTML коде место вставить конструкцию:
Но только во втором варианте, нельзя задать номер стартовой страницы. Возможно, нам понадобиться не начинать нумерацию с единицы, а к примеру с двойки и т.д. В таком случае подойдет только использование первого метода.
Примечание: При работе с графикой во встроенных скриптах, значение цвета каждой из RGB составляющих должно находиться в диапазоне 0 — 1. Т.е. каждую составляющую цвета в формате RGB требуется разделить на 255.
Создание модуля для экспорта данных
Осталось самое простое – это сделать экспорт данных. Но есть в библиотеке и еще один небольшой баг. Он заключается в том, что если нам понадобиться сгенерировать несколько файлов, то нужно для каждой итерации создавать экземпляр объекта класса DOMPDF заново, иначе вы получите сообщение об ошибке. Ниже приведен исходный код модуля:
В результате должен получиться PDF файл следующего образца:
Генерация документов в doc, excel, pdf и других форматах на сервере
Выгрузка отчетов в различных форматах — типовая задача для многих проектов. И сейчас есть немало инструментов для этого. Среди них есть интересный вариант, который применяется, как мне кажется, не часто, но он однозначно стоит внимания. Потому что позволяет получить документ в нужном формате буквально одной командой. О нем и расскажу.
Я буду не многословен и сразу скажу, что речь идет о конвертере, встроенном в пакет LibreOffice. Вы можете запустить конвертацию из консоли, чтобы увидеть как это работает:
Эта команда конвертирует файл html.html в pdf файл. Количество поддерживаемых форматов впечатляет.
Выгода от использования такого инструмента очевидна. Вместо того, чтобы писать код для генерации документов в каждом из нужных форматов, просто создаем обычное html-представление. Далее сгенерированную страницу прогоняем через конвертер.
Запуск конвертации из PHP
Для установки конвертера на сервере придется установить пакет libreoffice-core:
Чтобы было удобно работать с утилитой из PHP, я написал обертку.
Обертка позволяет вам не думать о работе с временными файлами, подставляет в команду некоторые параметры по умолчанию, содержит константы с описанием доступных форматов, а также дает возможность задать таймаут на выполнение конвертации.
Для работы с оберткой подключаем ее к своему проекту через composer:
Использовать ее можно так:
В результате будет сформирован docx файл. Больше примеров можно найти на гитхабе.
Разумеется, в качестве бонуса можно запускать конвертацию в другую сторону — из doc в html и отображать содержимое офисных документов в браузере. Качество конвертации будет не всегда на высоте, но для каких-то случаев вполне подойдет.
Несколько граблей
Будет полезно рассказать про несколько особенностей, с которыми я столкнулся при работе с этой утилитой.
1. Применение CSS стилей. При преобразовании html в нужный формат имейте ввиду, что такая запись воспринимается корректно:
А такие записи будут обработаны точно так же, как если бы class мы совсем не указали:
2. При преобразовании html в нужный формат не всегда срабатывают описания стилей и иногда приходится экспериментировать, чтобы заработало. Например, так не работает:
3. Одно и то же преобразование можно выполнять с помощью разных конвертеров. При этом результат будет существенно отличаться. Если у вас на выходе получится не очень красивый документ, попробуйте принудительно задать используемый модуль, например:
4. Можно ли настроить ширину строк в таблице — для меня пока загадка. И в целом со стилизацией таблицы при преобразовании html в docx или pdf у меня возникли затруднения. Поэтому на мой взгляд подход трудно будет применять для генерации сложных печатных форм, таких как счет-фактура.