【XPDF】XPDFのpdftopngで出力したpng画像が豆腐のように真っ白だった話

研究
Polina Tankilevitch at Pexels
この記事は約7分で読めます。

今回のオーダーはPDFファイルのプレビュー画像をよしなに生成しろとのこと。
imagemagickを使う方法もあったのですがサーバ負荷が高いのでXPDFを利用。

Xpdf

Xpdf は Windows, macOS, Linux で動作する PDF ビューア(XpdfReader)および PDF 操作ツール(Xpdf command line tools)です。 XpdfReader でトラブルが生じる場合は, Poppler を使用した PDF ビューア( Evince, Okular, zathura, qpdfview, TeXworks, TeXstudio など)または MuPDF を利用してください。 Xpdf 4.00 で GUI に使用されるツールキットが Motif から Qt に変更されました。 現在の Linux ディストリビューションや TeX Live 2017 (win32, win64) 以降あるいは W32TeX [2017/02/20] 以降に収録されているのは xpdf

XpdfReader

Xpdf is a free PDF viewer and toolkit, including a text extractor, image converter, HTML converter, and more. Most of the tools are available as open source. Download XpdfReader Download the open source Xpdf tools Xpdf is based on XpdfWidget/Qt™, by Glyph & Cog.

この辺に従う。今回も開発環境はamazon lightsailにamazon linuxを入れたものなので、

Download Xpdf and XpdfReader

null

Xpdf command line tools というの(ファイル名がxpdf-tools-linux-x.xx.tar.gzとか)をwgetして展開してインストール。
よしなに配置されると、

pdftopng pdfファイル 出力先フォルダ

このようなコマンドで画像が生成されます。
されるんだが…いざ画像を開いたら、豆腐のように真っ白。

裏を取ってみると、

Config Error: No display font for 'Courier'
Config Error: No display font for 'Courier-Bold'
Config Error: No display font for 'Courier-BoldOblique'
Config Error: No display font for 'Courier-Oblique'
Config Error: No display font for 'Helvetica'
Config Error: No display font for 'Helvetica-Bold'
Config Error: No display font for 'Helvetica-BoldOblique'
Config Error: No display font for 'Times-Bold'
Config Error: No display font for 'Times-BoldItalic'
Config Error: No display font for 'Times-Italic'
Config Error: No display font for 'Times-Roman'

このように叱られていました。

Configとは誰だ。調べると、先程wgetして展開したxpdf-tools-linux-x.xxとかいうフォルダのdocフォルダ内にいる

sample-xpdfrc

このファイルによると…

# Sample xpdfrc file
#
# The Xpdf tools look for a config file in two places:
# 1. ~/.xpdfrc
# 2. in a system-wide directory, typically /usr/local/etc/xpdfrc

どちらかのフォルダに記述しないとならないようです。ならば

cp $HOME/xpdf-tools-linux-x.xx/doc/sample-xpdfrc $HOME
mv sample-xpdfrc .xpdfrc

と実行して該当のファイルを作ります。
ファイル内にこのようにフォントのありかが記述されており、しかもコメントアウトされているのでコメントを外す。
フォントファイルの実体がいないと意味がないので、探してきてwgetしましたよ。

#fontFile Times-Roman           /usr/local/share/ghostscript/fonts/n021003l.pfb
#fontFile Times-Italic          /usr/local/share/ghostscript/fonts/n021023l.pfb
#fontFile Times-Bold            /usr/local/share/ghostscript/fonts/n021004l.pfb
#fontFile Times-BoldItalic      /usr/local/share/ghostscript/fonts/n021024l.pfb
#fontFile Helvetica             /usr/local/share/ghostscript/fonts/n019003l.pfb
#fontFile Helvetica-Oblique     /usr/local/share/ghostscript/fonts/n019023l.pfb
#fontFile Helvetica-Bold                /usr/local/share/ghostscript/fonts/n019004l.pfb
#fontFile Helvetica-BoldOblique /usr/local/share/ghostscript/fonts/n019024l.pfb
#fontFile Courier               /usr/local/share/ghostscript/fonts/n022003l.pfb
#fontFile Courier-Oblique       /usr/local/share/ghostscript/fonts/n022023l.pfb
#fontFile Courier-Bold          /usr/local/share/ghostscript/fonts/n022004l.pfb
#fontFile Courier-BoldOblique   /usr/local/share/ghostscript/fonts/n022024l.pfb
#fontFile Symbol                        /usr/local/share/ghostscript/fonts/s050000l.pfb
#fontFile ZapfDingbats          /usr/local/share/ghostscript/fonts/d050000l.pfb

んで再度コンバート…あれ?

Syntax Error: Couldn't find a font for 'Helvetica'
Syntax Error: Couldn't find a font for 'Helvetica'

なんでやねん…。落としたフォントファイルがダメだったのか。

果たして、ほんとに入ってないのかなんなのかコンピュータ内を探してみる。

$ fc-match Helvetica
DejaVuSans.ttf: "DejaVu Sans" "Book"

いるじゃん。ちゃんといるじゃん。

ならば、と記述変更。
この DejaVuSans.ttf は、私の環境では /usr/share/fonts/dejavu/ にいる。
コンピュータに元々持ってるフォントで書き換えてみます。

fontFile Times-Roman            /usr/share/fonts/dejavu/DejaVuSerif.ttf
fontFile Times-Italic           /usr/share/fonts/dejavu/DejaVuSerif-Italic.ttf
fontFile Times-Bold             /usr/share/fonts/dejavu/DejaVuSerif-Bold.ttf
fontFile Times-BoldItalic       /usr/share/fonts/dejavu/DejaVuSerifCondensed-BoldItalic.ttf

そして再コンバート…やった、解決。

多分運用環境を作るときにまた手間取るだろうので、メモ書き。

コメント

タイトルとURLをコピーしました