メモ > サーバ > 各論: プログラミング > 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/