Anda memiliki beberapa opsi. Semua metode ini bekerja di Linux dan juga pada Windows atau Mac OS X. Namun, perlu diketahui bahwa sebagian besar PDF tidak termasuk untuk fontface lengkap, lengkap ketika mereka memiliki font yang tertanam. Kebanyakan mereka hanya memasukkan sebagian mesin terbang yang digunakan dalam dokumen.
Menggunakan pdftops
Salah satu metode yang paling sering digunakan untuk melakukan ini pada sistem * nix terdiri dari langkah-langkah berikut:
- Konversikan PDF ke PostScript, misalnya dengan menggunakan XPDF's
pdftops
(pada Windows: pdftops.exe
program bantuan.
- Sekarang font akan disematkan dalam
.pfa
format (PostScript) + Anda dapat mengekstraknya menggunakan editor teks .
- Anda mungkin perlu mengonversi file
.pfa
(ASCII) menjadi .pfb
(biner) menggunakan t1utils
dan pfa2pfb
.
- Dalam PDF tidak pernah ada
.pfm
atau .afm
file (file metrik font) tertanam (karena penampil PDF memiliki pengetahuan internal tentang ini). Tanpa ini, file font hampir tidak dapat digunakan dengan cara yang menyenangkan secara visual.
Menggunakan fontforge
Metode lain adalah dengan menggunakan editor font Gratis FontForge :
- Gunakan kotak dialog "Open Font" yang digunakan saat membuka file.
- Kemudian pilih "Ekstrak dari PDF" di bagian filter dialog.
- Pilih file PDF dengan font yang akan diekstraksi.
- Kotak dialog "Pilih font" terbuka - pilih di sini font mana yang akan dibuka.
Periksa manual FontForge. Anda mungkin perlu mengikuti beberapa langkah spesifik yang tidak selalu mudah untuk menyimpan data font yang diekstraksi sebagai file yang dapat digunakan kembali.
Menggunakan mupdf
Selanjutnya, MuPDF . Aplikasi ini dilengkapi dengan utilitas bernama pdfextract
(pada Windows pdfextract.exe
:) yang dapat mengekstrak font dan gambar dari PDF. (Jika Anda tidak tahu tentang MuPDF, yang masih relatif tidak dikenal dan baru: "MuPDF adalah penampil PDF ringan gratis dan toolkit yang ditulis dalam portabel C." , yang ditulis oleh pengembang Perangkat Lunak Artifex, perusahaan yang sama yang memberi kami Ghostscript. )
( Pembaruan: Versi MuPDF yang lebih baru telah memindahkan fungsi mantan 'pdfextract' ke perintah 'ekstrak mutool' . Unduh di sini: mupdf.com/downloads )
Catatan: pdfextract.exe
adalah program baris perintah. Untuk menggunakannya, lakukan hal berikut:
c:\> pdfextract.exe c:\path\to\filename.pdf # (on Windows)
$> pdfextract /path/tofilename.pdf # (on Linux, Unix, Mac OS X)
Perintah ini akan membuang semua file yang dapat diekstraksi dari file pdf yang dirujuk ke direktori saat ini. Secara umum Anda akan melihat berbagai file: gambar serta font. Ini termasuk PNG, TTF, CFF, CID, dll. Nama gambar akan seperti img-0412.png jika jumlah objek PDF dari gambar adalah 412. Nama font akan seperti FGETYK + LinLibertineI-0966.ttf , jika font Jumlah objek PDF adalah 966.
File CFF ( Compact Font Format ) adalah format yang dikenal yang dapat dikonversi ke format lain melalui berbagai konverter untuk digunakan pada sistem operasi yang berbeda.
Sekali lagi: perlu diketahui bahwa sebagian besar file font ini mungkin hanya memiliki sebagian karakter dan mungkin tidak mewakili jenis huruf lengkap.
Pembaruan: (Jul 2013) Versi terbaru mupdf
telah melihat perombakan internal dan penggantian nama biner mereka, tidak hanya sekali, tetapi beberapa kali. Utilitas utama yang dulunya adalah 'biner swiss' yang mirip mubusy
( disebut terinspirasi oleh busybox?), Yang baru-baru ini diubah namanya menjadi mutool
. Ini mendukung sub-perintah info
, clean
, extract
, poster
dan show
. Sayangnya, dokumentasi resmi untuk alat-alat ini belum mutakhir. Jika Anda menggunakan Mac menggunakan 'MacPorts': maka utilitas diubah namanya untuk menghindari bentrokan nama dengan utilitas lain yang menggunakan nama yang identik, dan Anda mungkin perlu menggunakannya mupdfextract
.
Untuk mencapai hasil (secara kasar) setara dengan mutool
seperti yang pdfextract
dilakukan alat sebelumnya , jalankan saja mubusy extract ...
. *
Jadi untuk mengekstrak font dan gambar, Anda mungkin perlu menjalankan salah satu dari perintah berikut:
c:\> mutool.exe extract filename.pdf # (on Windows)
$> mutool extract filename.pdf # (on Linux, Unix, Mac OS X)
Unduhan ada di sini: mupdf.com/downloads
Menggunakan gs
(Ghostscript)
Kemudian, Ghostscript juga dapat mengekstrak font langsung dari PDF. Namun, itu membutuhkan bantuan dari program utilitas khusus bernama extractFonts.ps
, ditulis dalam bahasa PostScript, yang tersedia dari repositori kode sumber Ghostscript .
Sekarang gunakan, Anda harus menjalankan keduanya, file ini extractFonts.ps
dan file PDF Anda. Ghostscript kemudian akan menggunakan instruksi dari program PostScript untuk mengekstrak font dari PDF. Sepertinya ini di Windows (ya, Ghostscript memahami 'forward slash', /, sebagai pemisah jalur juga di Windows!):
gswin32c.exe ^
-q -dNODISPLAY ^
c:/path/to/extractFonts.ps ^
-c "(c:/path/to/your/PDFFile.pdf) extractFonts quit"
atau di Linux, Unix atau Mac OS X:
gs \
-q -dNODISPLAY \
/path/to/extractFonts.ps \
-c "(/path/to/your/PDFFile.pdf) extractFonts quit"
Saya telah menguji metode Ghostscript beberapa tahun yang lalu. Pada saat itu ekstrak * .ttf (TrueType) baik-baik saja. Saya tidak tahu apakah jenis font lain juga akan diekstraksi sama sekali, dan jika demikian, dengan cara yang dapat digunakan kembali. Saya tidak tahu apakah utilitas tersebut memblokir ekstraksi font yang ditandai sebagai terproteksi.
Menggunakan pdf-parser.py
Akhirnya, pdf-parser.py Didier Stevens : yang ini mungkin tidak mudah digunakan, karena Anda perlu memiliki beberapa pengetahuan tentang struktur PDF internal. pdf-parser.py
adalah skrip Python yang dapat melakukan banyak hal lain juga. Itu juga dapat mendekompresi dan mengekstrak aliran sewenang-wenang dari objek, dan karena itu dapat mengekstrak file font yang tertanam juga.
Tetapi Anda perlu tahu apa yang harus dicari. Mari kita lihat dengan sebuah contoh. Saya memiliki file bernama big.pdf . Sebagai langkah pertama saya menggunakan -s
parameter untuk mencari PDF untuk setiap kejadian kata kunci FontFile ( pdf-parser.py
tidak memerlukan pencarian case sensitif):
pdf-parser.py -s fontfile big.pdf
Dalam kasus saya, untuk big1.pdf saya , saya mendapatkan hasil ini:
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
>>
Ini memberitahu saya bahwa ada dua contoh FontFile2
di dalam PDF, dan ini ada dalam objek PDF no. 15 dan tidak. 16 masing-masing. Objek no. 15 memegang /FontFile2
untuk font / ArialMT , objek no. 16 memegang /FontFile2
untuk font / Arial-BoldMT .
Untuk menunjukkan ini dengan lebih jelas:
pdf-parser.py -s fontfile big1.pdf | grep -i fontfile
/FontFile2 15 0 R
/FontFile2 16 0 R
Mengintip spesifikasi PDF dengan cepat mengungkapkan kata kunci tersebut /FontFile2
terkait dengan 'stream yang mengandung program font TrueType' ( /FontFile
akan terkait dengan 'stream yang berisi program font Tipe 1' dan /FontFile3
akan terkait dengan 'stream yang berisi program font yang formatnya adalah ditentukan oleh entri Subtipe dalam kamus aliran ' {maka menjadi subtipe Type1C atau CIDFontType0C }.)
Untuk melihat secara spesifik pada objek PDF no. 15 (yang memiliki font / ArialMT ), orang dapat menggunakan -o 15
parameter:
pdf-parser.py -o 15 big1.pdf
obj 15 0
Type:
Referencing:
Contains stream
<<
/Length1 778552
/Length 1581435
/Filter /ASCIIHexDecode
>>
pdf-parser.py
Output ini memberi tahu kita bahwa objek ini berisi aliran (yang tidak akan langsung ditampilkan) yang memiliki panjang 1,581.435 Bytes dan dikodekan (== "dikompresi") dengan ASCIIHexEncode dan perlu diterjemahkan (== "de- dikompresi "atau" disaring ") dengan bantuan /ASCIIHexDecode
filter standar .
Untuk membuang aliran apa pun dari suatu objek, pdf-parser.py
dapat dipanggil dengan -d dumpname
parameter. Ayo lakukan:
pdf-parser.py -o 15 -d dumped-data.ext big1.pdf
Dump data yang diekstraksi akan berada dalam file bernama dumped-data.ext . Mari kita lihat seberapa besar itu:
ls -l dumped-data.ext
-rw-r--r-- 1 kurtpfeifle staff 1581435 Apr 11 00:29 dumped-data.ext
Oh, lihat, ini adalah 1,581,435 Bytes. Kami melihat angka ini di output perintah sebelumnya. Membuka file ini dengan editor teks mengonfirmasi bahwa kontennya adalah data yang disandikan ASCII hex.
Membuka file dengan alat baca font seperti otfinfo
(ini adalah bagian dari lcdf-typetools
paket ) akan menyebabkan beberapa kekecewaan pada awalnya:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
OK, ini karena kami belum (belum) pdf-parser.py
menggunakan sihir penuhnya: untuk membuang aliran yang disaring dan didekodekan. Untuk ini kita harus menambahkan -f
parameter:
pdf-parser.py -o 15 -f -d dumped-data-decoded.ext big1.pdf
Berapa ukuran file baru ini?
ls -l dumped-data-decoded.ext
-rw-r--r-- 1 kurtpfeifle staff 778552 Apr 11 00:39 dumped-data-decoded.ext
Oh, lihat: nomor pastinya juga sudah tersimpan di objek PDF no. 15 kamus sebagai nilai untuk kunci /Length1
...
Apa file
pikir itu?
file dumped-data-decoded.ext
dumped-data-decoded.ext: TrueType font data
Apa yang otfinfo
memberitahu kita tentang itu?
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
Jadi Bingo !, kami memiliki pemenang: pdf-parser.py
memang mengekstrak file font yang valid untuk kami. Mengingat ukuran file ini (778.552 Bytes), sepertinya font ini telah tertanam bahkan sepenuhnya dalam PDF ...
Kita bisa mengganti namanya menjadi arial-regular.ttf dan menginstalnya seperti itu dan dengan senang hati menggunakannya.
Peringatan:
Bagaimanapun Anda harus mengikuti lisensi yang berlaku untuk font. Beberapa lisensi font tidak memungkinkan penggunaan dan / atau distribusi gratis. Pembajakan font seperti membajak perangkat lunak atau materi berhak cipta lainnya.
Sebagian besar PDF yang ada di luar sana tidak menyematkan font lengkap, tetapi hanya subset. Mengekstraksi subset font hanya berguna dalam cakupan yang sangat terbatas, jika ada.
Harap baca juga yang berikut tentang Pro dan (selengkapnya) Kontra mengenai upaya ekstraksi font: