Memo

メモ > サーバ > 各論: プログラミング > wkhtmltopdf(PDF作成)を使う

■wkhtmltopdf(PDF作成)を使う
■wkhtmltopdfのインストール(2023年にAmazonLinux2で試したもの) wkhtmltopdf を CentOS 7 にインストールする方法 - LAOX PowerTech https://laox.com/ja/9mcv wkhtmltopdf https://wkhtmltopdf.org/downloads.html Release 0.12.6 - wkhtmltopdf/wkhtmltopdf https://github.com/wkhtmltopdf/wkhtmltopdf/releases/0.12.6/ バージョン「0.12.6」が最終安定板となっている 「xorg-x11-fonts-75dpi」「xorg-x11-fonts-Type1」は必須のフォントらしい
# yum install -y libXrender libXext # yum install -y xorg-x11-fonts-75dpi xorg-x11-fonts-Type1 # wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox-0.12.6-1.amazonlinux2.... # rpm -Uvh wkhtmltox-0.12.6-1.amazonlinux2.x86_64.rpm # /usr/local/bin/wkhtmltopdf -V wkhtmltopdf 0.12.6 (with patched qt)
追加でフォントをインストール
# yum install -y ipa-gothic-fonts ipa-mincho-fonts ipa-pgothic-fonts ipa-pmincho-fonts
フォントは以下のようになった
# ll /usr/share/fonts 合計 0 drwxr-xr-x 2 root root 314 11月 30 17:02 dejavu drwxr-xr-x 2 root root 35 11月 30 17:06 ipa-gothic drwxr-xr-x 2 root root 35 11月 30 17:06 ipa-mincho drwxr-xr-x 2 root root 36 11月 30 17:06 ipa-pgothic drwxr-xr-x 2 root root 36 11月 30 17:06 ipa-pmincho
■wkhtmltopdfのインストール(2020年にCentOS7で試したもの) PHPでPDFを作成するphpwkhtmltopdfはまだまだ戦える - このすみエンジニアブログ https://www.konosumi.net/entry/2018/06/22/015223 CentOS7 に wkhtmltopdf をインストールする - Qiita https://qiita.com/ucan-lab/items/5ba8c8fac4407239f19f wkhtmltopdfをインストール
$ sudo su - # cd # yum -y install fontconfig libXrender libXext xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi freetype libpng zlib libjpeg-turbo # wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos7.x86_6... # rpm -Uvh wkhtmltox-0.12.5-1.centos7.x86_64.rpm # wkhtmltoimage --version wkhtmltoimage 0.12.5 (with patched qt) # wkhtmltopdf --version wkhtmltopdf 0.12.5 (with patched qt) # rm -f wkhtmltox-0.12.5-1.centos7.x86_64.rpm
wkhtmltopdfを動作確認(ただし日本語は表示できない)
# wkhtmltopdf http://www.yahoo.co.jp yahoo.pdf
日本語フォントをインストール
# fc-list # wget https://moji.or.jp/wp-content/ipafont/IPAexfont/IPAexfont00301.zip # unzip IPAexfont00301.zip # mv IPAexfont00301 /usr/share/fonts # rm -f IPAexfont00301.zip # fc-cache -fv # fc-list
日本語フォント込でwkhtmltopdfを動作確認
# wkhtmltopdf http://www.yahoo.co.jp yahoo.pdf
■wkhtmltopdfのインストール(2019年にCentOS7で試したもの) CentOS7 に wkhtmltopdf をインストールする - Qiita https://qiita.com/ucan-lab/items/5ba8c8fac4407239f19f wgetでIPAフォントを落とそうとして失敗(returned a non-zero code: 4)した時の対処 - TonamiLog http://th.hatenablog.jp/entry/2019/03/13/093956
# cd # yum -y install libXrender libXext # wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-a... # tar Jxfv wkhtmltox-0.12.4_linux-generic-amd64.tar.xz # cp wkhtmltox/bin/wkhtmltoimage /usr/local/bin/ # cp wkhtmltox/bin/wkhtmltopdf /usr/local/bin/ # wkhtmltoimage --version wkhtmltoimage 0.12.4 (with patched qt) # wkhtmltopdf --version wkhtmltopdf 0.12.4 (with patched qt) # rm -f wkhtmltox-0.12.4_linux-generic-amd64.tar.xz # rm -rf wkhtmltox
引き続き日本語フォントの追加 上記解説からURLが変更になっているので注意
# fc-list # wget https://oscdl.ipa.go.jp/IPAexfont/IPAexfont00301.zip # unzip IPAexfont00301.zip # mv IPAexfont00301 /usr/share/fonts # rm -f IPAexfont00301.zip # fc-cache -fv # fc-list
■wkhtmltopdfのインストール(2016年にCentOS6で試したもの) PHPでPDFを作成する時はwkhtmltopdf + snappyで戦え http://qiita.com/morisuke/items/b9c18dcba99ba6501d6e 上記手順で進めると、インストール時に以下のエラーが発生した
# rpm -ivh wkhtmltox-0.12.2.1_linux-centos6-amd64.rpm error: Failed dependencies: 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 -y xorg-x11-fonts-Type1 # yum install -y xorg-x11-fonts-75dpi
日本語フォントを使うために、以下も実行
# wget http://dl.ipafont.ipa.go.jp/IPAexfont/IPAexfont00301.zip # unzip IPAexfont00301.zip # mv IPAexfont00301/ /usr/share/fonts
フォントをインストールできたら、改めてwkhtmltopdfのインストールを実行する ■PHPプログラムから扱う Snippy(ライブラリを簡単に扱うためのラッパー)をインストールする。Composerは使える前提とする composer.json を同一階層に作る。記述は以下のようにする
{ "require": { "knplabs/knp-snappy": "dev-master" } }
composer.json のある階層で以下を実行してインストール
$ composer install
もしくは、直接以下でインストール
$ composer require knplabs/knp-snappy
あとは以下の記述で自動的に読み込めば、命令を使うことができる
require 'vendor/autoload.php';
以下、サンプルプログラム
<?php require 'vendor/autoload.php'; $html = <<<EOF <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>サンプル</title> <style> body { padding: 10px 0; } </style> </head> <body> <p>サンプル。</p> </body> </html> EOF; // wkhtmltopdfの位置をコンストラクタに渡す $pdf = new Knp\Snappy\Pdf('/usr/local/bin/wkhtmltopdf'); // 文字コードUTF-8 $pdf->setOption('encoding', 'utf-8'); // 用紙サイズ $pdf->setOption('page-size', 'B5'); // 用紙の向き $pdf->setOption('orientation', 'landscape'); // PDFをブラウザに出力 header('Content-Type: application/pdf'); echo $pdf->getOutputFromHtml($html); exit;
■他環境からフォントを複製 A環境のフォントをダウンロードし、B環境にアップロードする…という手順で複製できる 基本的に、/usr/share/fonts に配置するだけで大丈夫そうではある LINUX(CentOS)のフォントのあれこれ #Linux - Qiita https://qiita.com/kenta8813/items/fb0c7c348e0d6b17dd87 フォントキャッシュの更新について、以下で触れられている (44) wkhtmltopdfでホームページをPDF化 - Linuxやってみる! https://www.dogrow.net/linux/blog44/ 以下、実際に default と liberation を複製したときの作業メモ(環境はEC2) ↓ A環境で以下を実行し、default.zip と liberation.zip をダウンロード
$ sudo su - # cp -rp /usr/share/fonts/default /home/ec2-user # cp -rp /usr/share/fonts/liberation /home/ec2-user # cd /home/ec2-user # zip -r default.zip default # zip -r liberation.zip liberation
B環境に default.zip と liberation.zip をアップロードし、以下を実行
$ sudo su - # cd /home/ec2-user # unzip default.zip # unzip liberation.zip # cp -rp default /usr/share/fonts # cp -rp liberation /usr/share/fonts
B環境のフォントキャッシュをクリア
# fc-cache -fv
B環境のフォントを確認
# fc-list

Advertisement