どのフォントがPDFで使用されているか、およびそれらが埋め込まれているかどうかを示すことができるpdftk.exe
ユーティリティを知っています。
ここで問題:フォントが埋め込まれたPDFファイルがあった場合、それらのフォントを通常のフォントファイルとして再利用できるように抽出するにはどうすればよいですか?それができる(できれば無料の)ツールはありますか?また、これは、たとえばiTextを使用してプログラムで実行できますか?
いくつかのオプションがあります。これらの方法はすべて、LinuxおよびWindowsまたはMac OS Xで機能します。ただし、ほとんどのPDFには、フォントが埋め込まれている場合、完全で完全なフォントフェイスが含まれていないことに注意してください。ほとんどの場合、ドキュメントで使用されるグリフのsubsetのみが含まれます。
pdftops
を使用する* nixシステムでこれを行うために最も頻繁に使用される方法の1つは、次の手順で構成されます。
pdftops
(Windowsの場合:pdftops.exe
ヘルパープログラム) 。.pfa
(PostScript)形式で埋め込まれます+テキストエディターを使用して抽出できます。.pfa
および.pfb
を使用して、t1utils
(ASCII)をpfa2pfb
(バイナリ)ファイルに変換する必要がある場合があります。.pfm
または.afm
ファイル(フォントメトリックファイル)が埋め込まれることはありません(PDFビューアーにはこれらに関する内部知識があるため)。これらがないと、フォントファイルを視覚的に快適に使用することはほとんどできません。fontforge
を使用する別の方法は、フリーフォントエディタを使用することです FontForge :
FontForgeのマニュアルを確認してください。抽出したフォントデータを再利用可能なファイルとして保存するには、必ずしも簡単ではないいくつかの特定の手順に従う必要があります。
mupdf
を使用する次に、 MuPDF このアプリケーションには、PDFからフォントと画像を抽出できるpdfextract
(Windowsの場合:pdfextract.exe
)というユーティリティが付属しています。 (まだあまり知られていない新しいMuPuについて知らない場合: "MuPDFは無料の軽量PDFビューアーおよびポータブルCで書かれたツールキットです。"、Ghostscriptを提供した同じ会社のArtifex Software開発者によって作成されました。)
(更新:MuPDFの新しいバージョンでは、 'pdfextract'の以前の機能がコマンド 'mutool extract'。ここからダウンロード:mupdf.com/downloads)
注:pdfextract.exe
はコマンドラインプログラムです。それを使用するには、次の手順を実行します。
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
このコマンドは、現在のディレクトリに参照されるpdfファイルからすべての抽出可能なファイルをダンプします。通常、さまざまなファイルが表示されます。画像とフォントです。これらにはPNG、TTF、CFF、CIDなどが含まれます。画像のPDFオブジェクト番号が412の場合、画像名はimg-0412.pngのようになります。フォントのPDFオブジェクト番号が966の場合、フォント名はFGETYK + LinLibertineI-0966.ttfのようになります。
CFF(Compact Font Format)ファイルは、さまざまなオペレーティングシステムで使用するためのさまざまなコンバーターを介して他の形式に変換できる認識された形式です。
繰り返しますが、これらのフォントファイルのほとんどは、文字のサブセットしか持たず、完全な書体を表していない可能性があることに注意してください。
更新:(2013年7月)mupdf
の最近のバージョンでは、バイナリの内部的なシャッフルと名前変更が1回だけでなく数回行われています。メインユーティリティは、以前はmubusy
(busyboxに触発された名前?)と呼ばれる「スイスナイフ」のようなバイナリでしたが、最近ではmutool
に名前が変更されました。これらは、サブコマンドinfo
、clean
、extract
、poster
、およびshow
をサポートしています。残念ながら、これらのツールの公式ドキュメントは最新ではありません(まだ)。 「MacPorts」を使用するMacの場合:同じ名前を使用する他のユーティリティとの名前の衝突を避けるために、ユーティリティの名前が変更されました。mupdfextract
を使用する必要がある場合があります。
以前のツールmutool
と同じようにpdfextract
で(おおよそ)同等の結果を得るには、単にmubusy extract ...
。*を実行します
そのため、フォントと画像を抽出するには、次のいずれかのコマンドラインを実行する必要があります。
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
ダウンロードはこちら:mupdf.com/downloads
gs
の使用(ゴーストスクリプト)次に、 Ghostscript は、PDFから直接フォントを抽出することもできます。ただし、 extractFonts.ps
という名前の特別なユーティリティプログラムの助けが必要です。 Ghostscriptソースコードリポジトリ 。
ここで使用します。このファイルextractFonts.ps
とPDFファイルの両方を実行する必要があります。 Ghostscriptは、PostScriptプログラムからの指示を使用して、PDFからフォントを抽出します。 Windowsでは次のようになります(はい、GhostscriptはWindowsでもパスセパレーターとして「スラッシュ」/を理解します!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
またはLinux、Unix、Mac OS Xの場合:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
数年前にGhostscriptメソッドをテストしました。当時は* .ttf(TrueType)を問題なく抽出しました。他のフォントタイプもまったく抽出されるかどうか、もしそうなら再利用可能な方法で抽出されるかどうかはわかりません。ユーティリティが保護されているとマークされているフォントの抽出をブロックするかどうかはわかりません。
pdf-parser.py
を使用する最後に、ディディエスティーブンスの pdf-parser.py :これはおそらく使いやすいとは言えません。内部PDF構造に関するいくつかのノウハウがあります。 pdf-parser.py
はPythonスクリプトであり、他にも多くのことができます。また、オブジェクトから任意のストリームを解凍および抽出できるため、埋め込みフォントファイルも抽出できます。
しかし、何を探すべきかを知る必要があります。例を見てみましょう。 big.pdfという名前のファイルがあります。最初のステップとして、-s
パラメーターを使用して、PDFでキーワードFontFile(pdf-parser.py
は大文字と小文字を区別する検索を必要としません):
pdf-parser.py -s fontfile big.pdf
私の場合、big1.pdfの場合、次の結果が得られます。
obj 9 0
Type: /FontDescriptor
Referencing: 15 0 R
<<
/Ascent 728
/CapHeight 716
/Descent -210
/Flags 32
/FontBBox [ -665 -325 2000 1006 ]
/FontFile2 15 0 R
/FontName /ArialMT
/ItalicAngle 0
/StemV 87
/Type /FontDescriptor
/XHeight 519
>>
obj 11 0
Type: /FontDescriptor
Referencing: 16 0 R
<<
/Ascent 728
/CapHeight 716
/Descent -210
/Flags 262176
/FontBBox [ -628 -376 2000 1018 ]
/FontFile2 16 0 R
/FontName /Arial-BoldMT
/ItalicAngle 0
/StemV 165
/Type /FontDescriptor
/XHeight 519
>>
PDF内にはFontFile2
のインスタンスが2つあり、これらはPDFオブジェクトにあります。 15といいえ。 16、それぞれ。オブジェクト番号15は、フォント/ ArialMT、オブジェクト番号の/FontFile2
を保持します。 16は、フォント/ Arial-BoldMTの/FontFile2
を保持します。
これをより明確に示すには:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
PDF仕様をざっと覗くと、キーワード/FontFile2
が 'TrueTypeフォントプログラムを含むストリーム'に関連していることがわかります(/FontFile
は 「タイプ1フォントプログラムを含むストリーム」および/FontFile3
は、「ストリームディクショナリのサブタイプエントリでフォーマットが指定されているフォントプログラムを含むストリーム」に関連します」{したがって、Type1CまたはCIDFontType0Cサブタイプのいずれかです。)
PDFオブジェクト番号を具体的に見るには15(フォント/ ArialMTを保持)、-o 15
パラメーターを使用できます。
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
このpdf-parser.py
出力は、このオブジェクトに1.581.435バイトの長さのストリーム(直接表示されない)が含まれ、ASCIIHexEncodeでエンコード(== "compressed")され、デコードする必要がある(== "de -compressed」または「filtered」)標準の/ASCIIHexDecode
フィルターの助けを借りて。
オブジェクトからストリームをダンプするには、pdf-parser.py
パラメーターを使用して-d dumpname
を呼び出すことができます。やってみましょう:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
抽出されたデータダンプは、dumped-data.extという名前のファイルにあります。それがどれほど大きいか見てみましょう:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
ああ、1.581.435バイトです。前のコマンドの出力でこの図を見ました。このファイルをテキストエディタで開くと、その内容がASCII 16進エンコードデータであることを確認できます。
otfinfo
などのフォント読み取りツールでファイルを開くと(これはlcdf-typetools
packageの一部です)がっかりします最初は:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK、これは、(まだ)pdf-parser.py
がその完全な魔法を使用していないためです:フィルター処理され、デコードされたストリームをダンプします。このために、-f
パラメーターを追加する必要があります。
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
この新しいファイルのサイズは?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
ああ、見て:その正確な数は既にPDFオブジェクト番号にも保存されていました。キー/Length1
の値としての15の辞書...
file
は何だと思いますか?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
otfinfo
はそれについて何を教えてくれますか?
otfinfo -i dumped-data-decoded.ext
Family: Arial
Subfamily: Regular
Full name: Arial
PostScript name: ArialMT
Version: Version 5.10
Unique ID: Monotype:Arial Regular:Version 5.10 (Microsoft)
Designer: Monotype Type Drawing Office - Robin Nicholas, Patricia Saunders 1982
Manufacturer: The Monotype Corporation
Trademark: Arial is a trademark of The Monotype Corporation.
Copyright: © 2011 The Monotype Corporation. All Rights Reserved.
License Description: You may use this font to display and print content as permitted by
the license terms for the product in which this font is included.
You may only (i) embed this font in content as permitted by the
embedding restrictions included in this font; and (ii) temporarily
download this font to a printer or other output device to help
print content.
Vendor ID: TMC
Bingo !、勝者がいます:pdf-parser.py
は実際に有効なフォントファイルを抽出しました。このファイルのサイズ(778.552バイト)を考えると、このフォントはPDFに完全に埋め込まれているようです...
名前をarial-regular.ttfに変更し、そのままインストールして、喜んで利用することができます。
いずれの場合も、フォントに適用されるライセンスに従う必要があります。一部のフォントライセンスでは、無料での使用や配布が許可されていません。フォントの海賊版は、ソフトウェアやその他の著作権で保護された素材の海賊版に似ています。
世の中にあるほとんどのPDFは、とにかく完全なフォントを埋め込まず、サブセットのみを埋め込みます。フォントのサブセットを抽出することは、非常に限られた範囲内でのみ有用です(たとえあるとしても)。
フォント抽出の取り組みに関する長所と短所(以下)については、以下もお読みください。
オンラインサービスを使用 http://www.extractpdf.com 。何もインストールする必要はありません。
最終的に FontForge Windowsインストーラーパッケージ が見つかり、インストールされたプログラムを介してPDFを開きました。とても喜んで働いた。
http://www.verypdf.com/app/pdf-font-extractor/pdf-font-extracting-tool.html フォントを抽出するIMOの最も簡単な方法(Windows)。
Pdfフォントを抽出するために現在利用できる最高のオンラインツールの1つは http://www.pdfconvertonline.com/extract-pdf-fonts-online.html です
これは @ Kurt Pfeifle's answer のfont-forge
セクションのフォローアップであり、Red Hat(および他のLinuxディストリビューション)に固有のものです。
TTFファイルを入手したら、次の方法でシステムにインストールできます。
/usr/share/fonts
にコピーします(ルートとして)fc-cache -f /usr/share/fonts/
の実行(ルートとして)