(しばらく工事中)
PDF のアウトライン化に対する「文句」を書いたけれど、 それを言うには、 PDFファイルにフォントの埋め込みがもれなく行われていることが必要だ。
自分の手持ちのPDFファイルを調べてみたら (pdffonts コマンドでフォント一覧が表示できて、埋め込みの有無も分かる)、 漏れているファイルをいくつか発見した。あららら。
1つの原因は、 \includegraphics{} で取り込んだPDFファイルの中に フォント (名前が Times とか) が埋め込まれていないものがあったからのようだった。
Mathematica で描いた図を、 元々 PNG ファイルであったものを PDF に convert したとか。 これは Mathematica で直接 PDF 出力し直したら解決した。 ずっと以前に作成した図とか、 再作成を面倒がって convert で済ませているものが結構残っていそう。
しばらくはバグ潰しか (重要な PDF ファイルについてチェックする)。
| check-pdf-fonts.sh |
#!/bin/sh
# check-pdf-fonts.sh
# PDF に埋め込まれていないフォントがないか pdffonts で検査する。
if [ "$#" -eq 0 ]; then
echo "Usage: $0 file1.pdf [file2.pdf ...]" >&2
exit 2
fi
if ! command -v pdffonts >/dev/null 2>&1; then
echo "Error: pdffonts が見つかりません。" >&2
echo "MacPorts なら: sudo port install poppler" >&2
exit 2
fi
result=0
for pdf in "$@"; do
if [ ! -f "$pdf" ]; then
echo "ERROR: ファイルがありません: $pdf" >&2
result=2
continue
fi
output=$(pdffonts "$pdf" 2>&1)
status=$?
if [ "$status" -ne 0 ]; then
echo "ERROR: pdffonts で検査できません: $pdf" >&2
echo "$output" >&2
result=2
continue
fi
bad=$(printf '%s\n' "$output" |
awk 'NR > 2 && NF >= 5 && $(NF-4) == "no"')
if [ -n "$bad" ]; then
echo "WARNING: 埋め込まれていないフォントがあります: $pdf"
printf '%s\n' "$bad"
echo
if [ "$result" -eq 0 ]; then
result=1
fi
else
echo "OK: $pdf"
fi
done
exit "$result"
|
| 自分の使うマシンに撒く |
curl -O https://m-katsurada.sakura.ne.jp/misc/20260905/check-pdf-fonts.sh cat check-pdf-fonts.sh chmod +x check-pdf-fonts.sh mv check-pdf-fonts.sh $(SOMEWHERE) |
大勢の人からPDFを集めると、こういう埋め込み忘れは多分たくさんあって、 確実に印刷ができることを保証しようとすると、アウトライン化する、 という選択も理解できなくはない気がしてきた。 紙媒体の予稿集を作る場合に、印刷する側の立場としては、 そう考えるのだろう。「印刷保証版」と言うべきか。
しかし、もう滅多に印刷しないのだから (と私は思う)、 提出されるPDFにフォントが埋め込まれていることをきちんとチェックする仕組みを 用意する方が良いと考える。 万が一、著者が意図したように印刷されないものがあったとしても、 それは著者の責任で良いと思う。
学会の活動なので、どうやって後世に残すか考えるべきなんでしょうけれど、 どうするのでしょう。
grep -E 'Times|DocumentNeededResources|DocumentSuppliedResources|Helvetica' fig/*.eps |
gs -dSAFER -dBATCH -dNOPAUSE \
-sDEVICE=pdfwrite \
-dEmbedAllFonts=true \
-dSubsetFonts=true \
-sOutputFile=なんとか.pdf \
なんとか.eps
|