« 2024年3月 | トップページ | 2024年9月 »

[PDF]見た目の文字を見た目通りにコピー出来ないPDF(テキストをコピーすると文字化けするPDF)

いわゆる
テキストをコピーすると文字化けするPDFです


ケース
1:フォント起因
2:作成方法起因(アプリケーション)


1:フォント起因
再現手順
テキストエディタに文字列『美しい日本語』
印刷画面からPostScriptファイルを生成する
プリンタドライバPPDはAcrobat9Jを使用LINK
A:Osaka-Mono レギュラー等幅
B:HiraginoSans-W4 ヒラギノ角ゴシック W4
ーーーーー
A:Osaka-Mono レギュラー等幅
Osaka 等幅
CaUniHexUTF8UniDecGIDGname
U+7F8EE7BE8E326543098post4_94FC
U+3057E3819712375456post4_82B5
U+3044E3818412356437post4_82A2
U+65E5E697A5260852908post4_93FA
U+672CE69CAC264123346post4_967B
U+8A9EE8AA9E354861576post4_8CEA

20240823045934_810x248

生成されたポストスクリプト
サブセット時にGIDグリフIDが1から採番されている
文字コードと紐づいていない=文字表示バケが発生する
20240823050500_1122x446

『字形としての文字』と『テキストとしての文字』が紐づいていないのがわかります
20240823060231_738x682
ーーーーー
B:HiraginoSans-W4 ヒラギノ角ゴシック W4

ヒラギノ角ゴシック W4
CaUniHexUTF8UniDecGIDGname
U+7F8EE7BE8E326543474gid3474
U+3057E3819712375864gid864
U+3044E3818412356845gid845
U+65E5E697A5260853284gid3284
U+672CE69CAC264123722gid3722
U+8A9EE8AA9E354861952gid1952

20240823050234_804x2542

生成されたポストスクリプト
ユニコード ユニコード名 GIDグリフIDが紐づいているのがわかる
PDFを生成した時に見た目の文字の通りにテキストとしてコピーできるタイプになる
Photo_20240823171001

『字形としての文字』と『テキストとしての文字』UNICODE CMAPで紐づいているのがわかります
20240823060153_750x650

同じアプリケーション
同じテキストで
『フォント』が違うと 見た目の文字とテキストとしての文字が紐づかないコピーできないPDFが生成されるケースがあります
これはフォントに依存します
この場合はOsakaフォントがこの方法でPDFを生成するのに適さないだけ
であって
Osakaフォントにバグがあるとか、不具合とかって事ではないんです
OsakaフォントのGIDの割り当てがオープンタイプの一般的な割り当て方法ではなく
昔ながらのGIDテーブルを利用しているために発生します。
なので
Osakaは古いシステム等とは相性が良いが
現行の現在のUnicodeベースのシステムだと
GIDの違いから意図しない結果になる可能性が高いフォントと言えます。
これが『フォント起因』です。



2:作成方法起因
OsakaフォントをPDFにする場合
Postscriptファイルを経由すると、見た目の文字でコピーできないPDFが生成されます
これは先い書いたように、GIDとユニコード名が紐づかないPostscriptをCUPS(プリンター)が書き出すからです
でも
Osakaフォントを使った文書でも、意図したようにコピーできるPDFを作成する事が出来ます
20240824112837_1274x716

書き出しから生成されるPDFはmacOSのバックエンドQuartzが
OsakaフォントのGIDとユニコードをMapしてPDFを生成するので
見た目の文字と同じ内容のテキストをコピーできるPDFを生成する事ができます
この方法『PDFを書き出す』から生成されたPDFは
GIDとしてはPostscript経由で生成されたPDFと同じく自動で採番されています
20240824114405_1248x748

ですが
Quartzは
/CMapName/Adobe-Identity-UCS として
GIDとテキストとしての文字ユニコードが紐づくように
Cmapを生成してPDFに埋め込みます
20240824115442_938x11262

この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を開きます
20240823123137_542x157

初期画面が表示されます
20240823123206_635x275

フォントを指定します
20240823123247_1096x330

文字を指定して、文字コード グリフID GID=たいていの場合CIDキャラクタIDと同一
グリフの名前を確認できます
20240823123319_1758x726



UnicodeChecker
https://earthlingsoft.net/UnicodeChecker/
インストール済みのフォントについて
任意の文字の文字コード等確認できます
20240823010002_1512x1192


文字化けPDFの文字列をペーストすれば
文字コードが何だったのか?Last Resort Fontで表示されます
20240823010255_1512x1192



FontLab 8(フォントを作らないならお試し版で充分です)
https://www.fontlab.com/font-editor/fontlab/

文字グリフの一覧を確認できるだけでなく
20240823011202_2728x888

フォントの詳細情報を個別に確認できます
20240823011231_1564x1156

gid cid グリフIDを確認する場合は
パネルの設定を変更します
20240823012624_948x374

20240823012637_1176x1006

GIDをスムーズに確認できるようになります
20240823012642_1084x524



pdfToolbox
PDFの各種調査・修正を行えるツール(無料で一部使えます)
https://www.callassoftware.com/en/products/pdftoolbox

20240823060839_1402x762

文字とユニコードが紐づいていないPDFの場合
20240823061108_1158x708

一般的な正しく紐づいているPDFの場合
20240823061044_1158x708

ToUnicodeのマップを確認したい場合は
PDFの調査を実行します
20240824120323_1626x12102

|

« 2024年3月 | トップページ | 2024年9月 »