У вас є кілька варіантів. Усі ці методи працюють як в Linux, так і в Windows або Mac OS X. Однак майте на увазі, що більшість PDF-файлів не включають повний, повний шрифт, коли у них вбудований шрифт. Переважно вони включають лише підмножину гліфів, що використовуються в документі.
Використання pdftops
Один з найбільш часто використовуваних методів цього для * nix-систем складається з наступних кроків:
- Перетворіть PDF у PostScript, наприклад, використовуючи XPDF
pdftops
(у програмі Windows: pdftops.exe
помічник.
- Тепер шрифти будуть вбудовані у
.pfa
формат (PostScript) + ви можете їх витягти за допомогою текстового редактора .
- Можливо, вам доведеться перетворити
.pfa
(ASCII) у .pfb
(бінарний) файл за допомогою t1utils
і pfa2pfb
.
- У PDF - файли ніколи не буває
.pfm
або .afm
файли (шрифт метричні файли) , вбудовані (оскільки PDF переглядач мають внутрішнє знання про них). Без них файли шрифтів навряд чи можна використовувати візуально.
Використання fontforge
Інший метод полягає у використанні безкоштовного редактора шрифтів FontForge :
- Використовуйте діалогове вікно "Відкрити шрифт", яке використовується під час відкриття файлів.
- Потім виберіть "Витяг з PDF" у розділі "Фільтр" діалогового вікна.
- Виберіть PDF-файл із шрифтом, який потрібно вилучити.
- Відкриється діалогове вікно "Вибір шрифту" - тут виберіть, який шрифт відкрити.
Перевірте посібник FontForge. Можливо, вам доведеться виконати кілька конкретних кроків, які не обов'язково є простими, щоб зберегти витягнуті дані шрифту як файл, який можна повторно використовувати.
Використання mupdf
Далі, MuPDF . Цей додаток постачається з утилітою під назвою pdfextract
(в Windows pdfextract.exe
:), яка може витягувати шрифти та зображення з PDF-файлів. (Якщо ви не знаєте про MuPDF, який досі є відносно невідомим та новим: "MuPDF - це безкоштовний переглядач PDF та інструментарій, написаний на портативному ПК" , написаний розробниками програмного забезпечення Artifex, тієї ж компанії, яка і нам дала Ghostscript. )
( Оновлення: новіші версії 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 тощо. Назви зображень будуть схожі на img-0412.png, якщо PDF-об'єкт зображення зображення становив 412. Назви шрифтів будуть як FGETYK + LinLibertineI-0966.ttf , якщо шрифт Номер об'єкта PDF - 966.
Файли CFF ( Compact Font Format ) - це визнаний формат, який можна перетворити в інші формати за допомогою різних перетворювачів для використання в різних операційних системах.
Знову ж таки: пам’ятайте, що більшість цих файлів шрифтів можуть мати лише підмножину символів і не можуть представляти повний шрифт.
Оновлення: (липень 2013 р.) Останні версії mupdf
не лише одного разу, а кілька разів бачили внутрішню перестановку та перейменування своїх бінарних файлів. Головною утилітою раніше називався двійковий код, схожий на "швейцарський ніж" mubusy
(ім'я, натхнене зайнятим?), До якого нещодавно було перейменовано mutool
. Вони підтримують вкладені команди info
, clean
, extract
, poster
і show
. На жаль, офіційна документація на ці інструменти ще не актуальна (поки що). Якщо ви користуєтеся Mac, використовуючи "MacPorts": утиліта була перейменована, щоб уникнути зіткнень імен з іншими утилітами, що використовують ідентичні імена, і вам може знадобитися використовувати 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)
Потім Ghostscript також може витягувати шрифти безпосередньо з PDF-файлів. Однак для цього потрібна допомога спеціальної утилітної програми з назвою extractFonts.ps
, написаної мовою PostScript, яка доступна у сховищі вихідного коду 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
>>
Це говорить мені, що FontFile2
всередині PDF є два екземпляри , і це в об'єктах PDF немає. 15 і ні. 16 відповідно. Об'єкт ні. 15 містить вміст/FontFile2
шрифту / ArialMT , об'єкт №. 16 містить /FontFile2
шрифт для шрифту / Arial-BoldMT .
Щоб показати це більш чітко:
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 і його потрібно декодувати (== "де- стиснутий "або" відфільтрований ") за допомогою стандартного /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.
Відкриття файлу інструментом для читання шрифту типу otfinfo
(це частина lcdf-typetools
пакета ) спочатку призведе до деякого розчарування:
otfinfo -i dumped-data.ext
otfinfo: dumped-data.ext: not an OpenType font (bad magic number)
Гаразд, це тому, що ми не (ще) не дозволили 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 no. 15 словник як значення для ключа /Length1
...
Що 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
Отже, Бінго !, у нас є переможець: pdf-parser.py
дійсно витяг дійсний файл шрифту для нас. Враховуючи розмір цього файлу (778.552 байт), схоже, цей шрифт був повністю вбудований у PDF ...
Ми можемо перейменувати його на arial-regular.ttf та встановити його як такий і радісно використовувати його.
Застереження:
У будь-якому випадку потрібно дотримуватися ліцензії, яка стосується шрифту. Деякі ліцензії на шрифт не дозволяють безкоштовно використовувати та / або розповсюджувати. Піратські шрифти - це як піратство будь-якого програмного забезпечення або іншого захищеного авторським правом матеріалу.
Більшість PDF-файлів, які знаходяться в природі, все одно не вбудовують повний шрифт, а лише підмножини. Витяг підмножини шрифту корисний лише в дуже обмеженій області, якщо він взагалі є.
Будь ласка, прочитайте також про плюси та (більше) мінуси щодо зусиль із вилучення шрифту: