У вас есть несколько вариантов.Все эти методы работают как в Linux, так и в Windows или Mac OS X. Однако следует помнить, что большинство PDF-файлов не включают в себя полный и полный шрифт, если в них встроен шрифт.В основном они включают только подмножество глифов, используемых в документе.
Использование pdftops
Один из наиболее часто используемых способов сделать это на *nix systems состоит из следующих этапов:
- Преобразование PDF в PostScript, например, с использованием XPDF
pdftops
(в Windows: pdftops.exe
вспомогательная программа. - Теперь шрифты будут встроены в формате
.pfa
(PostScript) + их можно извлечь с помощью текстового редактора . - . Возможно, потребуется преобразовать
.pfa
(ASCII) в .pfb
(двоичный) файл с использованием t1utils
и pfa2pfb
. - В PDF-файлах никогда не внедряются файлы
.pfm
или .afm
(файлы метрики шрифта)(потому что программа просмотра PDF обладает внутренними знаниями об этом.) Без них файлы шрифтов вряд ли можно использовать визуально приятным способом.
Использование fontforge
Другой метод -использовать бесплатный редактор шрифтов FontForge :
- Использовать «Открытый шрифт» диалоговое окно, используемое при открытии файлов.
- Затем выберите «Извлечь из PDF» в разделе фильтра диалогового окна.
- Выберите файл PDF с шрифтом для извлечения.
- A Откроется диалоговое окно «Pick a font» - выберите здесь, какой шрифт открыть.
Проверьте руководство FontForge.Возможно, вам придется выполнить несколько конкретных шагов, которые не обязательно просты, чтобы сохранить извлеченные данные шрифта в виде файла, который можно использовать повторно.
Использование mupdf
Далее MuPDF .Это приложение поставляется с утилитой pdfextract
(в Windows: pdfextract.exe
), которая может извлекать шрифты и изображения из PDF-файлов.(Если вы не знаете о MuPDF, который все еще относительно неизвестен и является новым: "MuPDF - это бесплатный легкий просмотрщик PDF и инструментарий, написанный на переносимом языке C." , написанный разработчиками Artifex Software, тоже самоекомпания, предоставившая нам 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
(имя, навеянное busybox?), Который недавно был переименован в 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 / загрузки
Использование gs
(Ghostscript)
Затем Ghostscript также может извлекать шрифты непосредственно из PDF-файлов.Однако для этого требуется специальная служебная программа с именем extractFonts.ps
, написанная на языке PostScript, которая доступна из репозитория Ghostscript *1150*.
Теперь используйте его, вам нужно запустить как этот файл 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 №. 15 словарь как значение для ключа /Length1
...
Что думает file
? 1265 *
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-normal.ttf и установить как таковой, и счастливо использовать его.
Предостережения:
В любом случае вам необходимо следовать лицензии, которая применяется к шрифту. Некоторые лицензии на шрифты не разрешают свободное использование и / или распространение. Пиратство шрифтов похоже на пиратство любого программного обеспечения или другого защищенного авторским правом материала.
Большинство PDF-файлов, которые находятся там, в любом случае, не включают в себя полный шрифт, а только подмножества. Извлечение подмножества шрифта полезно только в очень ограниченной области, если вообще.
Пожалуйста, прочитайте также о плюсах и минусах, касающихся усилий по извлечению шрифта: