Автор оригинала: David Wong.
фон
Недавно был получен запрос клиента на экспорт формы анализа результатов экзамена студента и диаграммы в PDF. В таблице используется общая таблица, а диаграмма ссылается на https://www.chartjs.org/возникшие проблемы. Подробнее см. диаграмму wkhtmltopdf js.
размышляющий
После проверки в Интернете как передняя, так и задняя части могут создавать PDF-файлы из html. Учитывая эффект и эффективность реализации, окончательное решение заключается в использовании PHP для завершения работы по преобразованию на стороне сервера. В соответствии с принципом, что лучше не устанавливать дополнительное программное обеспечение, после поиска мы попробовали TCPDF PDF FPDF HTML2PDF и так далее. Однако существует большой разрыв между результатами и ожиданиями. Наконец, вы должны попробовать wkhtmltopdf, который требует дополнительной установки.
Введение в wkhtmltopdf
Wkhtmltopdf является одним из инструментов wkhtmltox, а другой-wkhtmltoimage. Это инструменты командной строки с открытым исходным кодом (LGPLv3), которые используют механизм рендеринга Qt WebKit для рендеринга HTML в PDF и различные форматы изображений. Им не нужно отображать или отображать услуги. Стоит отметить, что Google Chrome также использует движок рендеринга Qt WebKit.
Установка Wkhtmltopdf
Установка выполняется в docker с использованием docker проекта с открытым исходным кодом-lnmp. Но PHP использует версию alpine, а затем изменяет изображение обратно на версию Debian по умолчанию. Поскольку клиент использует centos, он загружает изображение CentOS 7 отдельно.
Установка Debian
# wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox_0.12.5-1.jessie_amd64.deb # dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb
Установка здесь приведет к отсутствию информации о зависимостях, и другая информация может быть установлена непосредственно через apt-get install, но эти два необходимо отметить:
dpkg: dependency problems prevent configuration of wkhtmltox: wkhtmltox depends on libpng12-0; however: Package libpng12-0 is not installed. wkhtmltox depends on libssl1.0.0; however: Package libssl1.0.0 is not installed.
Эти два пакета отправляются непосредственно на склад для поиска установки, а затем снова выполняют команду установки, и установка будет успешной.
# dpkg -i wkhtmltox_0.12.5-1.jessie_amd64.deb # wkhtmltopdf -V # wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf
Установка CentOS
# wget https://downloads.wkhtmltopdf.org/0.12/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_64.rpm # rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm
Информация об отсутствии зависимостей будет запрошена после установки и обновления обычной системы:
error: Failed dependencies:
fontconfig is needed by wkhtmltox-1:0.12.2.1-1.x86_64
freetype is needed by wkhtmltox-1:0.12.2.1-1.x86_64
libpng is needed by wkhtmltox-1:0.12.2.1-1.x86_64
libjpeg is needed by wkhtmltox-1:0.12.2.1-1.x86_64
libX11 is needed by wkhtmltox-1:0.12.2.1-1.x86_64
libXext is needed by wkhtmltox-1:0.12.2.1-1.x86_64
libXrender is needed by wkhtmltox-1:0.12.2.1-1.x86_64
xorg-x11-fonts-Type1 is needed by wkhtmltox-1:0.12.2.1-1.x86_64
xorg-x11-fonts-75dpi is needed by wkhtmltox-1:0.12.2.1-1.x86_64Просто следуйте инструкциям по установке пакета здесь.
# yum install fontconfig freetype libpng libjpeg libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi
Просто следуйте инструкциям по установке пакета здесь.
# rpm -ivh wkhtmltox-0.12.5-1.centos7.x86_64.rpm # wkhtmltopdf -V # wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf
Проблема с Wkhtmltopdf
Важно отметить, что некоторые системы могут создавать исключения. QXcbConnection: Не удалось подключиться к прерванному отображению (сброс ядра) Здесь вам нужно установить xvfb и запустить его с помощью xvfb
# xvfb-run wkhtmltopdf --enable-forms https://www.baidu.com baidu.pdf
Экспортированный китайский PDF-файл будет зашифрован. Вы можете скопировать шрифт в шрифтах в каталоге system32 системного диска Windows C и запустить его снова в/usr/share/шрифты linux .
Wkhtmltopdf является кроссплатформенным программным обеспечением и не имеет ничего общего с языком, используемым в серверной части. PHP имеет фреймворки, доступные напрямую https://github.com/KnpLabs/snappy и фреймворки laravel https://github.com/barryvdh/laravel-snappy Конечно, использование PHP непосредственно для выполнения оболочки также очень просто, но обратите внимание на защиту от веб-оболочки.
Оригинал: “https://developpaper.com/initial-knowledge-of-wkhtmltopdf/”