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
■wkhtmltopdfの乗り換え先 ゼロからはじめるPython(114) HTMLからPDFを作成するツール「wkhtmltopdf」が開発終了・代替ライブラリのxhtml2pdfとWeasyPrintを試してみよう | TECH+(テックプラス) https://news.mynavi.jp/techplus/article/zeropython-114/ 文書配付機能でPDFレンダリングのライブラリを置き換えた話 - SmartHR Tech Blog https://tech.smarthr.jp/entry/2023/07/03/170509 【Rails】Ferrumを使ってHTMLをPDFへ変換してみた(wicked_pdfからの移行) #Ruby - Qiita https://qiita.com/aisplay/items/7ed4ec9fd311395f6540 wkhtmltopdfの次どうするか問題 - おもしろwebサービス開発日記 https://blog.willnet.in/entry/2023/02/10/233053 ゼロからはじめるPython 第114回 HTMLからPDFを作成するツール「wkhtmltopdf」が開発終了・代替ライブラリのxhtml2pdfとWeasyPrintを試してみよう:マピオンニュース https://www.mapion.co.jp/news/column/cobs2737199-1-all/

Advertisement