research, r,

RでPDFファイルをPNGファイルに変換する(Fontconfig error: Cannot load default config file)

Shoya Shoya Follow May 01, 2020 · 28 mins read
RでPDFファイルをPNGファイルに変換する(Fontconfig error: Cannot load default config file)
Share this

RでPDFファイルをPNGファイルに変換する方法を検索したので、その方法をメモします。

PDFからPNGへの変換が必要になった理由

ggplotを使っていて、geom_line(linetype = "dotted")geom_path(linetype = "dashed")のように、点線や破線をプロットしようとした時に、データポイントが多すぎると、PNGで保存した場合には点線や破線が細かすぎて直線に見えてしまう。

PDFファイルで出力すると、linetypeが正しく反映され、点線や破線に見える。

また、他に以下の3つの理由でPNGファイルで出力したい。

  • データ点が多すぎるとPDFファイルをPowerPointなどに貼り付けた際に動作が遅くなる。
  • PDFを貼り付けたPowerPointファイルをWindowsユーザーに渡すと、半透明の塗り潰しが表示されない。
  • PDFを貼り付けたPowerPointをPDFに変換してWindowsユーザーに渡すと、画像の淵に線が入る。

上記の問題の解決策があれば教えてほしい。。

これまではPDFファイルに出力して、プレビューアプリでPNGファイルに変換していた。

ファイル数が多くなればその分手間も多くなるし、データ点が多い場合はPDFが重くなって書き出しにも時間がかかる。

RでPDFファイルとして出力して、続けて変換してやれば良いと思った次第。

package 'pdftools'のインストールとエラー

PDFファイルから情報を取得したり、PDFファイルを画像形式に変換したり、PDFファイルを画像ファイルとして読み込んでRでの解析に使ったりするためのライブラリ。

CRANから入手できる。(エラーが出るのでソースからインストールした。後述)

CRAN - Package pdftools

pdftools.pdf

PDFからPNGへの変換にはpdf_convert()関数を使う。

環境は
macOS 10.15.4
R 4.0.0

> # install.packages("pdftools")
> # library(pdftools)
> test2 <- data.frame(x = 1:10, y = 1:10)
> test <- ggplot() + geom_line(data = test2, aes(x = x, y = y))
> ggsave(test, filename = "pdffile.pdf")
> pdf_convert(pdf = "pdffile.pdf", format = "png", pages = NULL, filenames = NULL,
+ dpi = 72, antialias = TRUE, opw = "", upw = "", verbose = TRUE)
Converting page 1 to pdffile_1.png...PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
PDF error: Couldn't find a font for 'Helvetica'
 done!
[1] "pdffile_1.png"
Fontconfig error: Cannot load default config file

RStudioで一度できていたのだけど、R.appで再現しようとしたらエラーが出て、RStudioでも同様のエラーが出るようになった。

ソースからインストールする方法を試してみる。

とりあえず、ウェブサイトの手順通りにやってみた。

Text Extraction, Rendering and Converting of PDF Documents • rOpenSci: pdftools

brew install poppler

Homebrewのアップデートが始まって、しばらくするとインストールが始まった。結構長い。

インストールが終わって、

> library(pdftools)
> pdf_convert(pdf = "pdffile.pdf", format = "png", pages = NULL, filenames = NULL,
+  dpi = 72, antialias = TRUE, opw = "", upw = "", verbose = TRUE)
Converting page 1 to pdffile_1.png... done!
[1] "pdffile_1.png"
>

無事エラーがなくなった。

pdf_convert()関数の使い方

> # pdftoolsの読み込み
> library(pdftools)
> # ワーキングディレクトリのpdffile.pdfというPDFファイルを300dpiのpngfile.pngに変換
> pdf_convert(pdf = "pdffile.pdf", format = "png", pages = NULL, filenames = "pngfile.png",
+  dpi = 300, antialias = TRUE, opw = "", upw = "", verbose = TRUE)
  • pdfに変換したいPDFファイルのパスをいれる。
  • formatに出力したいファイル形式を指定。
  • filenamesに出力するファイル名をいれる。拡張子は必要。NULLの場合は、元のPDFファイル名に_1を付けて拡張子を変えた名前になる。
  • dpiで解像度を指定。

他のオプションはわかりません。。

まとめ

package 'pdftoos'のpdf_convert()関数を使えば、PDFファイルをPNGファイルに変換できる。

install.packages("pdftools")ではフォントに関するエラーが起きた。

brewを使ってソースからインストールすることで解決した(多分)。

にしても、一度できてたやつができなくなったのはなぜ。

Shoya
Written by Shoya Follow
免疫学やウイルス学について数理モデルを使った研究をしています。