いわゆる
テキストをコピーすると文字化けするPDFです
ケース
1:フォント起因
2:作成方法起因(アプリケーション)
1:フォント起因
再現手順
テキストエディタに文字列『美しい日本語』
印刷画面からPostScriptファイルを生成する
プリンタドライバPPDはAcrobat9Jを使用
LINK
A:Osaka-Mono レギュラー等幅
B:HiraginoSans-W4 ヒラギノ角ゴシック W4
ーーーーー
A:Osaka-Mono レギュラー等幅
Osaka 等幅Ca | UniHex | UTF8 | UniDec | GID | Gname |
---|
美 | U+7F8E | E7BE8E | 32654 | 3098 | post4_94FC |
---|
し | U+3057 | E38197 | 12375 | 456 | post4_82B5 |
---|
い | U+3044 | E38184 | 12356 | 437 | post4_82A2 |
---|
日 | U+65E5 | E697A5 | 26085 | 2908 | post4_93FA |
---|
本 | U+672C | E69CAC | 26412 | 3346 | post4_967B |
---|
語 | U+8A9E | E8AA9E | 35486 | 1576 | post4_8CEA |
---|
|
---|
生成されたポストスクリプト
サブセット時にGIDグリフIDが1から採番されている
文字コードと紐づいていない=文字表示バケが発生する
『字形としての文字』と『テキストとしての文字』が紐づいていないのがわかります
ーーーーー
B:HiraginoSans-W4 ヒラギノ角ゴシック W4
ヒラギノ角ゴシック W4Ca | UniHex | UTF8 | UniDec | GID | Gname |
---|
美 | U+7F8E | E7BE8E | 32654 | 3474 | gid3474 |
---|
し | U+3057 | E38197 | 12375 | 864 | gid864 |
---|
い | U+3044 | E38184 | 12356 | 845 | gid845 |
---|
日 | U+65E5 | E697A5 | 26085 | 3284 | gid3284 |
---|
本 | U+672C | E69CAC | 26412 | 3722 | gid3722 |
---|
語 | U+8A9E | E8AA9E | 35486 | 1952 | gid1952 |
---|
|
---|
生成されたポストスクリプト
ユニコード ユニコード名 GIDグリフIDが紐づいているのがわかる
PDFを生成した時に見た目の文字の通りにテキストとしてコピーできるタイプになる
『字形としての文字』と『テキストとしての文字』UNICODE CMAPで紐づいているのがわかります
同じアプリケーション
同じテキストで
『フォント』が違うと 見た目の文字とテキストとしての文字が紐づかないコピーできないPDFが生成されるケースがあります
これはフォントに依存します
この場合はOsakaフォントがこの方法でPDFを生成するのに適さないだけ
であって
Osakaフォントにバグがあるとか、不具合とかって事ではないんです
OsakaフォントのGIDの割り当てがオープンタイプの一般的な割り当て方法ではなく
昔ながらのGIDテーブルを利用しているために発生します。
なので
Osakaは古いシステム等とは相性が良いが
現行の現在のUnicodeベースのシステムだと
GIDの違いから意図しない結果になる可能性が高いフォントと言えます。
これが『フォント起因』です。
2:作成方法起因
OsakaフォントをPDFにする場合
Postscriptファイルを経由すると、見た目の文字でコピーできないPDFが生成されます
これは先い書いたように、GIDとユニコード名が紐づかないPostscriptをCUPS(プリンター)が書き出すからです
でも
Osakaフォントを使った文書でも、意図したようにコピーできるPDFを作成する事が出来ます
書き出しから生成されるPDFはmacOSのバックエンドQuartzが
OsakaフォントのGIDとユニコードをMapしてPDFを生成するので
見た目の文字と同じ内容のテキストをコピーできるPDFを生成する事ができます
この方法『PDFを書き出す』から生成されたPDFは
GIDとしてはPostscript経由で生成されたPDFと同じく自動で採番されています
ですが
Quartzは
/CMapName/Adobe-Identity-UCS として
GIDとテキストとしての文字ユニコードが紐づくように
Cmapを生成してPDFに埋め込みます
このMapがあるから
見た目の文字と同じ内容のテキストとしてコピーできるわけです。
同じアプリケーション 同じフォント でも
PDFの作成方法の違いによって、フォントとGID、ユニコードとの紐付け方法の違いから
見た目の文字と同じテキストでコピーできたり、出来なかったりするPDFが作成されるわけになります。
ツール類
PDFlib FontReporter※
https://www.pdflib.com/products/fontreporter/
※FontReporter2.0はAcrobatv22以降では正常に動作しないだけでなくメニュー項目を阻害するので非推奨
■MorxTester必須(Font Tools for Xcode AppleIDでのログインが必要)
https://developer.apple.com/download/all/?q=font
■UnicodeChecker
https://earthlingsoft.net/UnicodeChecker/
■FontLab 8(フォントを作らないならお試し版で充分です)
https://www.fontlab.com/font-editor/fontlab/
■pdfToolbox
PDFの各種調査・修正を行えるツール(無料で一部使えます)
https://www.callassoftware.com/en/products/pdftoolbox
cpdfコマンドラインツール(非商用なら無料で使えます)
https://github.com/coherentgraphics/cpdf-binaries
■xpdfコマンドラインツール※必須
埋め込まれたフォントを取り出せます
https://www.xpdfreader.com/download.html
■Last Resort Font(コード確認できるタイプを選んでください)
https://github.com/unicode-org/last-resort-font
Jedit Ω(再現用として・お試し版で充分です)
https://www.artman21.com/en/sparkle/jeditomega.html
■Visual Studio Code
バイナリー仕様のPostScriptファイルの閲覧に便利です
インテルとARM間違えないように
https://code.visualstudio.com/Download
資料
AdobeReader8 とencode
http://www.dtptemple.org/imgbbs/index.php?mode=thread&id=8057&page=1
PDFからテキスト抽出のために ToUnicode CMap
https://blog.antenna.co.jp/PDFTool/archives/2006/05/tounicode_cmap.html
PDFと文字(4) – 文字の取り扱い
https://blog.antenna.co.jp/PDFTool/archives/2005/12/15/
PDFと文字 (25) – CMapで文字コードからCIDへ変換
https://blog.antenna.co.jp/PDFTool/archives/2006/01/17/
【再考中】なぜ?印刷時に文字化けして出力されるのか
https://force4u.cocolog-nifty.com/skywalker/2015/02/post-fd60.html
【再考中】なぜ?印刷時に文字化けして出力されるのかーその2 CID GID
https://force4u.cocolog-nifty.com/skywalker/2015/02/cid-gid-a96b.html
Adobe-Japan1-6 Character Collection for CID-Keyed Fonts
ダウンロード - Adobe-Japan1-6.pdf
MorxTester必須(Font Tools for Xcode AppleIDでのログインが必要)
https://developer.apple.com/download/all/?q=font
起動したらNEWから新規WINDOWを開きます
初期画面が表示されます
フォントを指定します
文字を指定して、文字コード グリフID GID=たいていの場合CIDキャラクタIDと同一
グリフの名前を確認できます
UnicodeChecker
https://earthlingsoft.net/UnicodeChecker/
インストール済みのフォントについて
任意の文字の文字コード等確認できます
文字化けPDFの文字列をペーストすれば
文字コードが何だったのか?Last Resort Fontで表示されます
FontLab 8(フォントを作らないならお試し版で充分です)
https://www.fontlab.com/font-editor/fontlab/
文字グリフの一覧を確認できるだけでなく
フォントの詳細情報を個別に確認できます
gid cid グリフIDを確認する場合は
パネルの設定を変更します
GIDをスムーズに確認できるようになります
pdfToolbox
PDFの各種調査・修正を行えるツール(無料で一部使えます)
https://www.callassoftware.com/en/products/pdftoolbox
文字とユニコードが紐づいていないPDFの場合
一般的な正しく紐づいているPDFの場合
ToUnicodeのマップを確認したい場合は
PDFの調査を実行します