CharacterSets

[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

|

UNICODE EMOJI(Diversity:多様性)

9095e04a

http://www.unicode.org/reports/tr51/#Diversity

絵文字は何処へ向かって行くのか…(でも、選べる事は良いね)

|

Code Page 1250 Windows Latin 2 Central Europe

Latin 2等はDOSとWINで別物なので注意しないと痛い目にあう

Code Page 1250 Windows Latin 2 Central Europe


Code Pages Supported by Windows

Windows
1250 Windows Latin 2 (Central Europe)*
1251 Windows Cyrillic (Slavic)
1252 Windows Latin 1 (ANSI)
1253 Windows Greek
1254 Windows Latin 5 (Turkish)
1255 Windows Hebrew
1256 Windows Arabic
1257 Windows Baltic Rim

MS-DOS
437 MS-DOS Latin US
708 MS-DOS Arabic ASMO
737 MS-DOS Greek
775 MS-DOS Baltic Rim
850 MS-DOS Latin 1
851 MS-DOS Greek 1
852 MS-DOS Latin 2
855 MS-DOS Cyrillic
857 MS-DOS Turkish
860 MS-DOS Portuguese
861 MS-DOS Icelandic
862 MS-DOS Hebrew
863 MS-DOS French Canada
865 MS-DOS Nordic
866 MS-DOS Cyrillic CIS 1
869 MS-DOS Greek 2


Macintosh
10000 Macintosh Roman
10006 Macintosh Greek
10007 Macintosh Cyrillic
10029 Macintosh Central Europe
10079 Macintosh Icelandic
10081 Macintosh Turkish


Code Pages


Unicode and Character Sets


Unicode Enabled


CP00852


|

[CID]Adobe-Japan1-UCS2

Adobe Open Sourceの
プロジェクトのひとつの
Mapping Resources for PDF

Im00221130_124457

Downloadsコーナーにある
Mapping Resources for PDF
ToUnicode Mapping Resources

『Adobe-Japan1-UCS2』が含まれています。

全19000行以上におよぶ

GIDとUNICODE値をひもづけるファイルです。
異体字とかも紐付きが確認できます。

今日ちょっとビックリしたのが

Im00221130_125157

おおおっ合わないじゃん

ああぁ〜めんどうだなぁもう
LucidaGrande
Im00221130_130827

HelveticaNeue
ですよねぇやっぱりそうでないと
Im00221130_130853

UD新ゴ
こうでないいと
Im00221130_130149

PDFの中に
サブセットで埋め込まれるときに
GIDとユニコードは
PDF内で紐付くので
まぁ大丈夫なんですけど嫌だなぁこうゆうの


Im00221130_125917

もう
オープンタイプだけでいいやもう
面倒だし
色々考えたり検証したりするのも嫌だし
ましてや
何かあったら嫌だし

思いたくなる今日この頃


| | コメント (0)

[Adobe]CMap Resources

Adobe Open Source
のプロジェクトに入っている
CMap Resources

Im00221130_115551

CMap Resources - CMap Resources - Adobe Open Sourceアイコン:新しいウィンドで開きます


デベロッパードキュメントのリンクが誤り
正しくは
Adobe Tech Note #5099[PDF]新しいウィンドで開きます
(Building CMap Files for CID-Keyed Fonts)

Adobe Tech Note #5014 [PDF]新しいウィンドで開きます
(Adobe CMap and CID Font Files Specification).

です
他キャラクタやタイプ関係のドキュメントは
以下から
Im00221130_120710

Font technical notes | Adobe Developer Connectionアイコン:新しいウィンドで開きます

| | コメント (0)

[Unicode]PDF一覧

こちらのページ
Code Chartsアイコン:新しいウィンドで開きます
の番号順

U0000.pdf
U0080.pdf
U0180.pdf
U0250.pdf
U0300.pdf
U0370.pdf
U0500.pdf
U0530.pdf
U0590.pdf
U0600.pdf
U0700.pdf
U0780.pdf
U07C0.pdf
U0800.pdf
U0840.pdf
U0900.pdf
U0980.pdf
U0A00.pdf
U0A80.pdf
U0B00.pdf
U0C00.pdf
U0C80.pdf
U0D00.pdf
U0D80.pdf
U0E00.pdf
U0E80.pdf
U0F00.pdf
U1000.pdf
U10A0.pdf
U1100.pdf
U1200.pdf
U1380.pdf
U13A0.pdf
U1400.pdf
U1680.pdf
U16A0.pdf
U1720.pdf
U1740.pdf
U1760.pdf
U1780.pdf
U18B0.pdf
U1900.pdf
U1950.pdf
U1980.pdf
U19E0.pdf
U1A00.pdf
U1A20.pdf
U1B00.pdf
U1B80.pdf
U1BC0.pdf
U1C50.pdf
U1CD0.pdf
U1D00.pdf
U1D80.pdf
U1DC0.pdf
U1E00.pdf
U1F00.pdf
U2000.pdf
U2000.pdf
U2000.pdf
U2070.pdf
U2070.pdf
U20A0.pdf
U20A0.pdf
U20A0.pdf
U20D0.pdf
U2100.pdf
U2100.pdf
U2100.pdf
U2150.pdf
U2190.pdf
U2200.pdf
U2300.pdf
U2300.pdf
U2400.pdf
U2440.pdf
U2500.pdf
U25A0.pdf
U2600.pdf
U2600.pdf
U2600.pdf
U2600.pdf
U2600.pdf
U2700.pdf
U27C0.pdf
U27F0.pdf
U2800.pdf
U2980.pdf
U2B00.pdf
U2B00.pdf
U2B00.pdf
U2C60.pdf
U2C80.pdf
U2D00.pdf
U2D30.pdf
U2DE0.pdf
U2E00.pdf
U2E80.pdf
U2F00.pdf
U2FF0.pdf
U30A0.pdf
U3100.pdf
U3130.pdf
U3190.pdf
U31A0.pdf
U31F0.pdf
U3200.pdf
U3300.pdf
U4DC0.pdf
U4E00.pdf
UA000.pdf
UA4D0.pdf
UA500.pdf
UA640.pdf
UA6A0.pdf
UA700.pdf
UA720.pdf
UA800.pdf
UA830.pdf
UA840.pdf
UA880.pdf
UA8E0.pdf
UA900.pdf
UA960.pdf
UA980.pdf
UAA60.pdf
UAA80.pdf
UAB00.pdf
UABC0.pdf
UAC00.pdf
UD7B0.pdf
UD800.pdf
UDC00.pdf
UE000.pdf
UFB00.pdf
UFB00.pdf
UFB00.pdf
UFB00.pdf
UFB50.pdf
UFB50.pdf
UFE00.pdf
UFE10.pdf
UFE20.pdf
UFE30.pdf
UFE50.pdf
UFE70.pdf
UFF00.pdf
UFF00.pdf
UFF00.pdf
UFF00.pdf
UFF00.pdf
UFFF0.pdf
U10000.pdf
U10080.pdf
U10140.pdf
U10190.pdf
U10190.pdf
U10280.pdf
U102A0.pdf
U10300.pdf
U10330.pdf
U10380.pdf
U103A0.pdf
U10400.pdf
U10450.pdf
U10480.pdf
U10800.pdf
U10840.pdf
U10900.pdf
U10920.pdf
U10A00.pdf
U10B00.pdf
U10B40.pdf
U10B60.pdf
U10C00.pdf
U10E60.pdf
U11080.pdf
U12000.pdf
U13000.pdf
U16800.pdf
U1B000.pdf
U1D000.pdf
U1D100.pdf
U1D200.pdf
U1D300.pdf
U1D360.pdf
U1D400.pdf
U1D400.pdf
U1F000.pdf
U1F030.pdf
U1F100.pdf
U1F200.pdf
U1F300.pdf
U1F600.pdf
U1F700.pdf
U1FF80.pdf
U20000.pdf
U2A700.pdf
U2B740.pdf
U2F800.pdf
U2FF80.pdf
U3FF80.pdf
U4FF80.pdf
U6FF80.pdf
U7FF80.pdf
U8FF80.pdf
UAFF80.pdf
UBFF80.pdf
UCFF80.pdf
UE0100.pdf
UEFF80.pdf
UF0000.pdf
UFFF80.pdf
U100000.pdf
U10FF80.pdf

| | コメント (0)

Unicode 6.0.0

Force4u00221013_205535

The Unicode Standard, Version 6.0[LINK]新しいウィンドで開きますまたは[LINK]新しいウィンドで開きます
Archived Code Charts[PDF]新しいウィンドで開きます

Force4u00221013_210508

う〜ん


Force4u00221013_210838

う〜ん


Force4u00221013_210854

う〜ん


Force4u00221013_210930


あへぇ〜

   
Force4u00221013_211720
MyFonts.de Unicode 6.0: die piktografische Wende[LINK]新しいウィンドで開きます

| | コメント (0)

[Win]Unicode Character Map for Windows

後日参照用自分リンクメモ
BabelMap (Unicode Character Map for Windows)

Force4u00221010_31115

BabelStone : BabelMap (Unicode Character Map for Windows)[LINK]新しいウィンドで開きます

後日ためして見ましょう<<自分

| | コメント (0)

[MorxTester]フォントの文字のGIDやUIDを確認する

以前
フォントのGIDを確認するのに
インデザインが使えるよ!てな事を書きましたが
90pv-RKSJ-Hファイルの中身: [FORCE][LINK]新しいウィンドで開きます


最近は
これ
Force4u00221010_22016
を使っています。
[Font]Apple Font Tool Suite: [FORCE][LINK]新しいウィンドで開きます


Force4u00221010_22039

Force4u00221010_22153

こんな感じで
GIDを確認出来ます。

先日紹介した
PDFlibのFontReporter
[PDF]FontReporterを試す:前から使ってるけど【PDFlib】: [FORCE][LINK]新しいウィンドで開きます

と同様に
文字関係でのトラブル時に使えるツールです。

一番アナログな方法として
Adobe1-6のPDF[PDF]新しいウィンドで開きますから
目で探す方法もありますが...笑


Force4u00221024_134717


| | コメント (0)

[perl]Encode.pm文字コード変換【ファイルが大きい時】

S-JIS→UTF8

JIS→S-JIS

ファイルが小さい時は
エディタで変換すれば良いのですが
ファイルサイズが大きいくて
エディタで扱うのが苦しい時に使うのが
perl
Encode.pmです。
Force4u00221001_55554

Encode - search.cpan.org[LINK]新しいウィンドで開きます


 

まずはダウンロードしましょう

Force4u00221001_55554_2


ダウンロードしたら


Force4u00221001_55627

ダブルクリックで解凍して

Force4u00221001_55639

インストールします

cd_ (_は半角1バイトスペース)
と入力した後に
ドラッグ&ドロップします。
Force4u00221001_55722

perl Makefile.PL
を実行します。
Force4u00221001_55753


終わったら
makeです


sh-3.2$
sh-3.2$ make
cp lib/Encode/JP/H2Z.pm blib/lib/Encode/JP/H2Z.pm
cp lib/Encode/JP/JIS7.pm blib/lib/Encode/JP/JIS7.pm
....
.....色々出ます
Manifying blib/man3/Encode::MIME::Header.3pm
Manifying blib/man3/Encode::CN::HZ.3pm
Manifying blib/man3/Encode::CJKConstants.3pm
sh-3.2$



それも終わったら

sh-3.2$
sh-3.2$ sudo make install
Password:
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree

色々出ます
Appending installation info to /Library/Perl/Updates/5.10.0/darwin-thread-multi-2level/perllocal.pod
sh-3.2$



で終了です。

元になるSJISのテキストと
空のUTF8のテキストを用意して
サンプルを実行してみましょう
Force4u00221001_60027


短い簡単なサンプルが用意されています。
これをためしましょう
Force4u00221001_61125

コマンドを記載した
plファイルを
ドラッグして
Force4u00221001_61137

実行するだけ
Force4u00221001_61142


UTF8側に
エンコードされたテキストが
吐き出されます
Force4u00221001_60154

普段使いではありませんが
大きいファイルをもらう事がある人は
準備しておくと良いですね


「Encode.pl.txt」をダウンロード[LINK]新しいウィンドで開きます

   

| | コメント (0)

より以前の記事一覧

その他のカテゴリー

Accessibility AccessibilityCheck AccessibilityForm AccessibilityInDesign AccessibilityPDF Acrobat Acrobat Action Acrobat Annotation Acrobat AppleScripts Acrobat Character Acrobat Layer Acrobat PDF Embed API Acrobat PDF Form Print Acrobat Plug-ins Acrobat Portfolios Acrobat Print AcrobatBarcode AcrobatDialog AcrobatForm AcrobatJS AcrobatMenu AcrobatPDF AcrobatStamp AcrobatYouTube AddressBook Adobe Adobe InDesign Adobe Photoshop AdobeAppleScript AdobeBridge AdobeIllustrator AdobeJSX aed Alfresco Android AnimationGif Apple Apple Support AppleScript AppleScriptBasics AppleScriptCharacter AppleScriptColor AppleScriptDroplet AppleScriptErrorNum AppleScriptFolder AppleScriptFontBook AppleScriptRename AppleScriptTools AppleSymbols Applications Barcode Barcode2D BarcodePostal BetterHTMLExport Book BOX Browser buzz Certificates CharacterEntity CharacterSets Colors Cool Site CSS Cutting DecoMail DecorationMail Design Desktop Diff DJ dmg DNS Documents Download DTP eBook Editer eMail Envelopes ExifTool Facebook FFmpeg File System Fonts FontsTool FontsWeb FOOD FormPrint ftp Gadget Gif Animation Google Google Chrome Enterprise HexEditor HTML info iPhoto ISBN ISO iTunes iWork iWorkNumbers iWorkNumbersCalendar iWorkNumbersTimecard iWorkPages JavaScript JeditX JeditX Regexp JeditXAppleScript JIS jquery Letterpress Library logo Mac Admin Mac Archiver Mac Browser Mac Browser Plugin Mac QuickLook Mac Setup Mac Spotlight Mac Video Map Memo Microsoft Teams Mobby mobileconfig Moto Movies Music Network Basic ntp OCR Office OfficePowerPoint OSX Paint Pantone Paper PDFlib Permission Photo Pictograms Print Public Python QuickLook QuickTime QuickTimeSetting QuickTimeSound Real Media ReName ResourceFork ruby Sample Screen ScreenCast Search Security SEO Sharing SLAResource Sound Spotlight Stamp SWF TCC.db Tutorial PSD TV Twitter Typography Unicode Utilities Video WEB APP WebFont Wedding Windows WindowsMedia XML XMP XPS YouTube YouTube Rss