LuaTeX で生成した PDF から ToUnicode CMap を除去する

no extension

以前に紹介した原ノ味フォントだが, $\mathrm{Lua\LaTeX}$ で組版 & PDF 出力する際に Adobe-Identity-0 フォントとして埋め込まれてしまうそうで,フォントの性能を上手く活かしきれてないらしい。 しかも

LuaTeX はフォントの cmap テーブルから逆変換で ToUnicode CMap を生成しているようで、縦書き用グリフを使った場合や異字体を使った場合など、テキスト抽出すると意図しない結果になることがあります
via PDF から ToUnicode CMap を削除するツール

そこで原ノ味フォントの作者が pdf-rm-tuc というツールを公開されている。

このツールを使うと

PDF から原ノ味フォントの ToUnicode CMap を削除し、原ノ味フォントの ROS を Adobe-Identity-0 から 元の Adobe-Japan1-7 に変更します。 これによってテキスト抽出で意図しない結果になることを防げると考えています
via PDF から ToUnicode CMap を削除するツール

更に言うと PDF ファイルのサイズがちょびっとだけ小さくなる。 ありがたや m(_ _)m

pdf-rm-tuc のビルドとインストール

pdf-rm-tuc はソースコードのみの公開なので GCC を使って自前でビルドする必要がある1。 ここでは Ubuntu プラットフォームを前提に紹介する。

事前準備

たまに GCC が入ってないことがあるので,入ってなければ APT でインストールしておく。

$ sudo apt install build-essential

更に pdf-rm-tuc の GitHub リポジトリを clone して直接ビルドする場合は Autoconf および Automake が必要になる。 もし入ってなければ,これもインストールしておこう。

$ sudo apt install autoconf automake

更に更にビルドの際に libqpdf が必要らしいので,これもインストールしておく。

$ sudo apt install libqpdf-dev

これで準備完了。

ビルドとインストール

では,ビルドからインストールまで一気にやってしまおう。

$ git clone https://github.com/trueroad/pdf-rm-tuc.git
$ cd pdf-rm-tuc
$ ./autogen.sh
$ mkdir build
$ cd build
$ ../configure
$ make
$ make check # TeX Live 2020 が導入済みであること
$ sudo make install
$ pdf-rm-tuc -V
Remove ToUnicode CMap from PDF 1.0.0
Copyright (C) 2019 Masamichi Hosoda. All rights reserved.
License: BSD-2-Clause

https://github.com/trueroad/pdf-rm-tuc

インストールが成功すれば pdf-rm-tuc コマンドが以下に置かれる。

$ which pdf-rm-tuc
/usr/local/bin/pdf-rm-tuc

pdf-rm-tuc を試してみる

入力テキストは以下の通り。 TeX Live 2020 が導入されていることが前提ね。

\documentclass{ltjsarticle}
\usepackage[deluxe]{luatexja-preset}
\usepackage{luatexja-otf}

\begin{document}

{\mcfamily\ltseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・細字)}\par
{\mcfamily          ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・中字)}\par
{\mcfamily\bfseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(明朝体・太字)}\par

{\gtfamily          ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・中字)}\par
{\gtfamily\bfseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・太字)}\par
{\gtfamily\ebseries ☂ は夜更け過ぎに ☃ へとかわるだろう。(ゴシック体・極太)}

\end{document}

これを組版すると以下のような結果になる。

このときのフォント情報はこんな風になっている2

$ pdffonts lualatex-sample.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
OLUZKZ+HaranoAjiMincho-Light         CID Type 0C       Identity-H       yes yes yes      4  0
PTNBJH+HaranoAjiMincho-Regular       CID Type 0C       Identity-H       yes yes yes      5  0
BMAPJQ+HaranoAjiMincho-Bold          CID Type 0C       Identity-H       yes yes yes      6  0
HOSFGF+HaranoAjiGothic-Regular       CID Type 0C       Identity-H       yes yes yes      7  0
ULINFN+HaranoAjiGothic-Bold          CID Type 0C       Identity-H       yes yes yes      8  0
PJPUYK+HaranoAjiGothic-Heavy         CID Type 0C       Identity-H       yes yes yes      9  0
JFRMQG+LMRoman10-Regular             CID Type 0C       Identity-H       yes yes yes     10  0

uni の項目が ToUnicode CMap の有無を示すもので,原ノ味フォントの全てに ToUnicode CMap があるのが分かる。

では pdf-rm-tuc を実行してみよう。

$ pdf-rm-tuc lualatex-sample.pdf lualatex-sample-notuc.pdf

実行結果は以下の通り。

$ pdffonts lualatex-sample-notuc.pdf 
name                                 type              encoding         emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
JFRMQG+LMRoman10-Regular             CID Type 0C       Identity-H       yes yes yes     10  0
PTNBJH+HaranoAjiMincho-Regular       CID Type 0C       Identity-H       yes yes no       5  0
OLUZKZ+HaranoAjiMincho-Light         CID Type 0C       Identity-H       yes yes no       4  0
BMAPJQ+HaranoAjiMincho-Bold          CID Type 0C       Identity-H       yes yes no       6  0
HOSFGF+HaranoAjiGothic-Regular       CID Type 0C       Identity-H       yes yes no       7  0
ULINFN+HaranoAjiGothic-Bold          CID Type 0C       Identity-H       yes yes no       8  0
PJPUYK+HaranoAjiGothic-Heavy         CID Type 0C       Identity-H       yes yes no       9  0

原ノ味フォントuni 項目が全て no になっていることが確認できた。 よーし,うむうむ,よーし。

注意事項

  • $\mathrm{up\LaTeX}$ 等で組版したものを dvipdfmx で PDF に出力する場合は Adobe-Japan1 フォントであれば ToUnicode CMap の生成・埋め込みはしないので pdf-rm-tuc は不要
  • PDF ビュア側で Adobe-Japan1-UCS2 等の ToUnicode CMap を持っていない場合は PDF 側の ToUnicode CMap を削除すると日本語のテキスト抽出が上手く行かないらしい。 Ubuntu に標準で入ってる Evince は画面から普通にコピペできたけど,大丈夫ってこと?
  • PDF/A を構成する場合,適合レベルによっては ToUnicode CMap を削除すると拙い場合があるのだが Adobe-Japan1 フォントについては例外らしい? veraPDF 等の Validator で確認したほうがいいかも

ブックマーク

参考図書

photo
[改訂第7版]LaTeX2ε美文書作成入門
奥村 晴彦 (著), 黒木 裕介 (著)
技術評論社 2017-01-24
大型本
4774187054 (ASIN), 9784774187051 (EAN), 4774187054 (ISBN)
評価     

ついに第7版が登場。紙の本で買って常に側に置いておくのが吉。

reviewed by Spiegel on 2017-09-27 (powered by PA-APIv5)


  1. Windows であれば MSYS2 等の環境が必要になるかもしれない。あるいは TeX Live ひっくるめて WSL2 に引っ越すか(笑) ↩︎

  2. pdffontsPoppler のコマンドのひとつ。 Windows 版 TeX Live には既定で同梱されているらしい。他のプラットフォームについては「Poppler - TeX Wiki」を参考に導入すればいいだろう。 ↩︎