Разное

Как определить шрифт в пдф файле – Как я могу автоматически определить шрифты, используемые в изображении или PDF?

pdf — Как узнать, какие шрифты используются в выбранной части документа PDF

В то же время я нашел другой способ перечислить шрифты, используемые в PDF (и указать, что они встроены или нет), в котором используется только Ghostscript (нет необходимости в дополнительных сторонних утилит). К сожалению, это также означает NOT , чтобы узнать о шрифте, используемом для выделенного текста.

Этот метод использует небольшую служебную программу, написанную на PostScript, отправляющую исходный код Ghostscript. Посмотрите в поддиректории toolbin для файла pdf_info.ps.

Включенные комментарии говорят, что вы должны запускать его так, чтобы отображать используемые шрифты, используемые размеры носителей

gs -dNODISPLAY ^
   -q ^
   -sFile=____.pdf ^
   [-dDumpMediaSizes] ^
   [-dDumpFontsUsed [-dShowEmbeddedFonts]] ^
   toolbin/pdf_info.ps

Я запустил его в файле локального примера. Вот результат:

C:\> gswin32c ^
      -dNODISPLAY ^
      -q ^
      -sFile=SHARE.pdf ^
      -dDumpMediaSizes ^
      -dDumpFontsUsed ^
      -dShowEmbeddedFonts ^
      C:\\pa\\gs\\gs8.64\\lib\\pdf_info.ps

SHARE.pdf has 12 pages.
Title: SHARE_Information_070808.indd
Creator: Adobe InDesign CS2 (4.0)
Producer: Adobe PDF Library 7.0
CreationDate: D:20080808103516+02'00'
ModDate: D:20080808103534+02'00'
Trapped: False

Page 1 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 2 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 3 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 4 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 5 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 6 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 7 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 8 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 9 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 10 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 11 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 12 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]

Font or CIDFont resources used:
DKCTOS+FrutigerLT-BlackCn
DKCTOS+FrutigerLT-BoldItalic
DKCTOS+Wingdings3
TIELEM+FrutigerLT-Black
TIELEM+FrutigerLT-Bold
TIELEM+FrutigerLT-BoldCn
TIELEM+FrutigerLT-Cn
TIELEM+FrutigerLT-Italic
TIELEM+FrutigerLT-UltraBlack
TIELEM+TimesNewRomanPS-BoldItalicMT
ответил Kurt Pfeifle 27 J0000006Europe/Moscow 2010, 17:54:21

sprosi.pro

Как узнать, какие шрифты используются в выбранной части документа PDF

В то же время я нашел другой способ перечислить шрифты, используемые в PDF (и указать, что они встроены или нет), в котором используется только Ghostscript (нет необходимости в дополнительных сторонних утилит). К сожалению, это также означает NOT , чтобы узнать о шрифте, используемом для выделенного текста.

Этот метод использует небольшую служебную программу, написанную на PostScript, отправляющую исходный код Ghostscript. Посмотрите в подмножество toolbin для файла pdf_info.ps .

Включенные комментарии говорят, что вы должны запускать его так, чтобы отображать используемые шрифты, используемые размеры носителей

gs -dNODISPLAY ^ -q ^ -sFile=____.pdf ^ [-dDumpMediaSizes] ^ [-dDumpFontsUsed [-dShowEmbeddedFonts]] ^ toolbin/pdf_info.ps

Я запустил его в файле локального примера. Вот результат:

C:\> gswin32c ^
      -dNODISPLAY ^
      -q ^
      -sFile=SHARE.pdf ^
      -dDumpMediaSizes ^
      -dDumpFontsUsed ^
      -dShowEmbeddedFonts ^
      C:\pa\gs\gs8.64\lib\pdf_info.ps

SHARE.pdf has 12 pages.
Title: SHARE_Information_070808.indd
Creator: Adobe InDesign CS2 (4.0)
Producer: Adobe PDF Library 7.0
CreationDate: D:20080808103516+02'00'
ModDate: D:20080808103534+02'00'
Trapped: False

Page 1 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 2 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 3 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 4 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 5 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 6 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 7 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 8 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 9 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 10 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 11 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]
Page 12 MediaBox: [ 595.276 841.89 ] CropBox: [ 595.276 841.89 ]

Font or CIDFont resources used:
DKCTOS+FrutigerLT-BlackCn
DKCTOS+FrutigerLT-BoldItalic
DKCTOS+Wingdings3
TIELEM+FrutigerLT-Black
TIELEM+FrutigerLT-Bold
TIELEM+FrutigerLT-BoldCn
TIELEM+FrutigerLT-Cn
TIELEM+FrutigerLT-Italic
TIELEM+FrutigerLT-UltraBlack
TIELEM+TimesNewRomanPS-BoldItalicMT
    

ubuntugeeks.com

Иллюстрированный самоучитель по программам Adobe › Acrobat › Общая информация [страница - 36] | Самоучители по графическим программам

Общая информация

Как Acrobat exchange и Reader отображают шрифты и выводят их на печать

В этом разделе суммируются методы работы программ просмотра со шрифтами.

Символы шрифта, представленные как графические объекты или растровые изображения Такие символы в PDF-файле не нуждаются в специальной обработке программами просмотра Acrobat. Они выводятся на экран и на печать как обычные графические объекты или растровые изображения.

Шрифты Type 1 Способ работы программ просмотра со шрифтом Type 1 зависит от того, встроен ли этот шрифт в PDF-файл и если нет, то установлен ли он на компьютере.

Если шрифт Type 1 встроен в PDF-файл или установлен на компьютере:

  • ATM, беря за основу контуры символов, создает растровые символы, которые и отображаются на экране;
  • программа просмотра с помощью PostScript-драйвера загружает шрифт в PostScript принтер;
  • ATM по контурам символов создает растровые символы для печати на He-PostScript-принтерах; если используется PCL-принтер, работающий с загружаемыми шрифтами, ATM с помощью его драйвера создает и загружает в принтер контурные шрифты.

Если шрифт Type 1 не встроен в PDF-файл и не установлен на компьютере:

  • ATM с помощью дескриптора шрифта формирует шрифт подстановки, который внешне похож на оригинальный;
  • программа просмотра с помощью PostScript-драйвера загружает шрифт подстановки в PostScript принтер;
  • ATM, используя контуры символов подстановки, создает растровые символы для печати на не-Post-Script-принтерах; если применяется PCL-принтер, работающий с загружаемыми шрифтами, ATM с помощью его драйвера создает и загружает в принтер контурные шрифты.

Шрифты Type 3 Шрифты Type 3 всегда встраиваются в PDF-файл и поэтому всегда доступны для программ просмотра. Последние создают из символов шрифта Type 3 растровые символы для отображения на экране. При печати документа со шрифтом Type 3 программы просмотра с помощью PostScript-драйвера загружают шрифт в принтер. Если используется не-PostScript-принтер, программы просмотра создают из символов шрифта Type 3 растровые символы, которые и выводятся на печать.

Как узнать, какие шрифты использованы в PDF-файле

Команда Document Info в Acrobat или Reader вызывает диалоговое окно с таблицей, содержащей список использованных в PDF-файле шрифтов. Чтобы увидеть этот список в Windows, нажмите клавиши CTRL + SHIFT + I и выберите команду File › Document Info, a на Macintosh, выбирая ту же команду, удерживайте SHIFT + Option (для Acrobat 3.0 выберите File › Document Info › Fonts безо всяких клавиш).

Примечание:
В только что открытом документе Acrobat в списке использованных в файле шрифтов некоторые из них могут оказаться пропущенными. В списке выводятся только шрифты, уже "увиденных" программой просмотра страниц. Самый простой способ получить полный список шрифтов документа – поискать командой Find какое-нибудь слово, которого в файле заведомо быть не может. Это заставит программу просмотреть все страницы документа

.

Например, в Exchange на Macintosh таблица использованных шрифтов включает следующее: Original Font В этом списке перечислены все шрифты, использованные в PDF-документе. Used Font Если оригинальный шрифт на компьютере не установлен, в списке указан шрифт, использованный для создания шрифта подстановки, заменяющего оригинальный. (Обычно для этого применяется AdobeSerifMM либо AdobeSansXMM.) Если шрифт встроен в PDF-файл, список содержит слово Embedded. Если оригинальный шрифт не встроен в PDF-файл, но есть на компьютере, где этот файл просматривается, строка в списке остается пустой. Это значит, что в данном случае используется шрифт, установленный на компьютере. Type В Windows этот список показывает тип шрифта, который использован вместо оригинального (Type 1 или Type 3). На Macintosh он показывает тип оригинального шрифта (Type 1, Type 3 или TrueType). Encoding Содержит служебную информацию, которая может пригодиться при разработке и отладке Acrobat Exchange или Reader.

Примечание:
Информацию о других элементах диалогового окна Document Info Вы найдете в файле

Help программ Exchange или Reader.

Таблицы управления шрифтами

Технический комментарий "How the Acrobat Exchange and Reader Programs Handle FontTables" содержит таблицы со списками различных видов шрифтов, используемых в документах Windows и Macintosh. Там описано, как программы просмотра для Windows и Macintosh отображают и печатают шрифты.

samoychiteli.ru

Некорректное отображение кириллических шрифтов в PDF формуляре

Некоторое время назад я столкнулся с интересной проблемой: у пользователя некорректно отображаются кириллические шрифты в PDF формуляре при просмотре расчетного листка. Расчетный листок формируется из портального сервиса самообслуживания сотрудников. В условиях данной задачи, также «дано», что в постоянных значениях основной записи пользователя, для параметра «Устройство вывода», установлено значение «PDF».

Посмотрим, что было сделано, для ее исправления этой ошибки.

Для начала необходимо определить наименование шрифта, который не отображается на портале. Для этого, в открывшемся сервисе «Просмотр расчетного листка», кликнуть кнопкой мыши и в контекстном меню выбрать пункт «Document Properties»:

Затем перейти на вкладку Fonts:

В данном случае, используемый в PDF-формуляре шрифт, Courier. Скачиваем TrueType шрифт Courier и устанавливаем его в системе, с которой «связан» портал.
При этом необходимо обязательно убедиться, в том, что данный шрифт поддерживает кириллицу. Запускаем программу RSTXPDF2UC, выбираем на селекционном экране опцию «Перечислить атрибуты шрифта» и смотрим на раздел «Поддержанные языки/Сценарии»:

В данном случае, раздел «Поддержанные языки/сценарии» пустой. Для решения проблемы с некорректно отображаемыми кириллическими шрифтами в PDF формуляре, необходимо найти шрифт, который будет поддерживать кириллическую область уникода. К таким шрифтам, к примеру, относится Courier New:

Шрифт Courier New отлично подходит для решения вышеописанной проблемы.

После того, как необходимый шрифт был найден и сохранен на локальный компьютер (файл с расширение *.TTF) необходимо запустить программу RSTXPDF2UC в back-end системе, выбрать пункт «Инсталлировать шрифт True type»:

В появившемся окне необходимо выбрать директорию, в которой сохранен TTF файл

В появившемся диалоговом окне консультанту будет предложено создание нового шрифта в системе. Необходимо выбрать «Да»:

В следующем диалоговом окне будет предложено использование данного шрифта в PDF-файлах. Необходимо выбрать «Да»

Затем система предложит внесенные изменения сохранить в транспортный запрос

После выполненной установки отобразится справочная информация о шрифте:

Далее нужно создать правило мэппинга для только что установленного в системе шрифта. Правило мэппинга определяет для каких символов будет использоваться тот или иной шрифт. Для этого необходимо выбрать пункт «Создать/изменить правило мэппинга» на селекционном экране программы RSTXPDF2UC:

В появившемся диалоговом окне выбрать «Да»

Затем необходимо выбрать только что установленный шрифт (в данном примере, это Courier New)

Определяем поддерживаемые области для нового шрифта (в нашем случае необходимо выбрать значение CYRYLLIC)

Затем внесем изменения в устройство вывода, использующееся в системе для работы с PDF формулярами. Для этого открываем транзакцию SPAD:

Выбираем устройство вывода «PDF», нажимаем на кнопку «Просмотр». В открывшемся экране меняем тип устройства с POST2 на PDUFC:

Сохраняем внесенные изменения и переходим к свойствам типов устройств:

Заменяем значение кодировки на 1505 «Printer SAPWIN5  Russian MS-Windows codepage»

Сохраняем, и проверяем изменилось ли у пользователя отображение символов в формуляре сервиса «Просмотр расчетного листка».

Voilà:

signatov.com

DTP - Настольные издательские системы

Все материалы, находящиеся в этом разделе, являются переводами документов с сайта http://www.prepressure.com.

Шрифты

В PDF могут использоваться шрифты PostScript (type 1 и type 3) и TrueType. Эти шрифты могут включаться в PDF-файл для того, чтобы он мог быть просмотрен и отпечатан таким же, каким и был создан. Если какой-либо шрифт пропущен в PDF-файле, то Acrobat автоматически попытается эмулировать его, используя один из шрифтов Multiple Master. Файл при этом не будет выглядеть точно так же, как был создан, но текст сохранится.

Шрифты Multiple Master, используемые в Acrobat, следующие:

  • Adobe Serif MM
  • Adobe Sans MM

Какие шрифты использовались в PDF?

В Acrobat есть опция 'Font info'. Эта опция не показывает все шрифты, использованные в документе, а только те, которые использованы на текущей странице. Не полагайтесь на нее, если вы хотите получить список всех шрифтов в документе.

Чтобы получить список шрифтов, нужен плагин, типа Enfocus PitStop.

Включение шрифтов

В Acrobat Distiller есть опция автоматического включения шрифтов, отсутствующих в обрабатываемых PostScript-файлах. Пользователь может указать несколько папок, которые будут использованы для поиска таких шрифтов.

Шрифты, которые не включаются в PDF-файл

Есть фундаментальная разница в том, как Acrobat 3.x и Acrobat 4.x обрабатывают шрифты.

Есть 14 шрифтов, которые Distiller 3.x никогда не включает в PDF-файл. Это:

  • Courier, Courier-Bold, Courier-Oblique, Courier-BoldOblique
  • Times-Roman , Times-Bold , Times-Italic, Times-BoldItalic
  • Helvetica, Helvetica-Bold, Helvetica-Oblique, Helvetica-BoldOblique
  • Symbol
  • ZapfDingbats.

Эти шрифты, за исключением ZapfDingbats, называются "Base 13 fonts".

Acrobat 4.x без проблем включает эти шрифты, но у него есть другое ограничение: если лицензия на TrueType шрифт запрещает его включение в файл, то Distiller 4 соблюдает это ограничение и не включает такой шрифт. Здесь эта проблема описана более подробно.

Подстановка шрифтов

Возможно включать в файл только те символы шрифта, которые используются в публикации. Эта технология называется подстановкой шрифтов (font subsetting). Параметр 'Subset fonts below XX %' в Distiller определяет сколько символов должно использоваться в публикации для использования подстановки.

Есть два преимущества у этой технологии:

  • Уменьшается размер файла, что делает его более удобным при использовании, например, в Интернет.
  • RIP всегда будет использовать этот шрифт, даже если его полная версия есть в RIP. Это дает гарантию, что шрифт будет использован именно тот, который нужен.

Есть и два недостатка у этой технологии:

  • Если вы захотите редактировать текст, а нужного символа не будет в шрифте, то он не может быть введен.
  • Слияние двух файлов, содержащих разные наборы символов одного шрифта приведет к потере некоторых символов.

mikeudin.net

Обработка шрифтов в Acrobat Distiller при создании файлов PDF

Используемый тип шрифта может повлиять на отображение и печать текста в PDF-файлах, а также возможность его поиска и редактирования.

Растровые шрифты

Если файл PDF содержит шрифты, преобразованные в растровые изображения, в средствах просмотра не удастся обработать изображения в качестве шрифтов, но при этом их можно вывести на экран и распечатать, как любые другие растровые изображения. Однако текст, преобразованный в растровые изображения, не доступен для поиска или редактирования.

dFonts (только Mac OS X)

Эти шрифты установлены по умолчанию в системе Mac OS X и идентичны стандартным пакетным файлам шрифтов за исключением того, что ресурсы шрифтов хранятся в блоке данных файла. Acrobat Distiller обрабатывает dFonts таким же образом, как и другие шрифты TrueType в Mac OS.

Шрифты кандзи

PDF-файлы, содержащие шрифты кандзи, можно создавать как в японской, так и в английской версии Acrobat Distiller. (Для версий Acrobat Distiller на английском языке необходимо установить пакет поддержки соответствующего шрифта.) В Acrobat автоматически отображаются азиатские шрифты, встроенные в файл PDF. Если азиатские шрифты не встроены, то их можно просмотреть в Acrobat после установки пакета поддержки подходящего шрифта. Дополнительные сведения об установке пакета поддержки шрифтов приведены в документе «Просмотр и печать азиатских шрифтов в PDF-файлах с помощью версий средств просмотра Acrobat на романских языках».

Шрифты Multiple Master (MM)

Поскольку при использовании ММ-шрифтов (например, Minion MM) создаются отдельные экземпляры шрифта на основе свойств документа и мест использования этого шрифта, их встраивание невозможно в Acrobat Distiller. Вместо этого в Acrobat Distiller добавляется поднабор шрифта с уникальным идентификатором. Поскольку с MM-шрифтами эти экземпляры создаются динамически, не удастся встроить шрифты или отредактировать их в Acrobat. Служба технической поддержки Adobe не рекомендует использовать MM-шрифты, если необходимо отредактировать или встроить шрифты в Acrobat. Дополнительные сведения об ММ-шрифтах приведены в документе 328600 — «Общие сведения об ММ-шрифтах».

Шрифты OpenType из Adobe

Формат OpenType, основанный на шрифтах Type 1, объединяет в один файл шрифтов контурные, метрические и растровые данные. Формат OpenType включает улучшенную типографику, которая еще не используется в большинстве приложений. В результате эти приложения распознают и обрабатывают формат OpenType как шрифты TrueType. Такая обработка влияет на характер встраивания шрифтов OpenType из Adobe в PDF-файл. Требования к встраиванию шрифтов Type 1 применяются к шрифтам OpenType из Adobe, основанным на шрифтах Type 1. Требования к встраиванию шрифтов TrueType применяются к шрифтам OpenType на основе TrueType.

Шрифты OpenType из Adobe можно встраивать в Acrobat Distiller 7.0, выбрав совместимость с PDF 1.6, однако элементы, характерные для OpenType, будут доступны только в Acrobat 7.0. (Выберите «Параметры»> «Изменить параметры Adobe PDF», перейдите на вкладку «Общие» и выберите Acrobat 7.0 (PDF 1.6) во всплывающем меню «Совместимость».)

Символьные шрифты

Поскольку в каждом символьном шрифте имеются уникальные символы и наборы символов, Acrobat Distiller всегда встраивает эти шрифты, чтобы предотвратить их замену.

Шрифты TrueType

Шрифты TrueType, для которых имеются разрешения на установку и редактирование, можно встроить в PDF-файл в Acrobat Distiller. Если для шрифта не такие разрешения не предусмотрены, Acrobat Distiller встраивает поднабор шрифта (только символы этого шрифта, используемые в документе).

Примечание. Данные о поднаборах шрифтов TrueType не заносятся в журнал Acrobat Distiller. Несмотря на то, что при использовании инструмента «Редактировать текст» в Acrobat эти шрифты указываются как встроенные в диалоговом окне «Атрибуты текста», поднабор шрифта нельзя изменить посредством этого инструмента, так как система не распознает уникальный идентификатор поднабора шрифта и сопоставляет его с исходным шрифтом TrueType в системе. При редактировании поднабора шрифта с помощью инструмента «Редактировать текст», вместе этого шрифта в Acrobat подставляется шрифт Sans Serif или эквивалентный.

При использовании Acrobat Distiller для создания файлов PDF, текст, отформатированный со шрифтами TrueType может не быть доступен для поиска в зависимости от того, каким образом информация о шрифте была записана в файл PostScript. В таких случаях принтеры PostScript преобразуют шрифт TrueType в Type 42, который наиболее эффективно сохраняет характеристики шрифта, например возможность поиска. Формат шрифта Type 42 способствует, в первую очередь, средствам распознавания PostScript в загрузке шрифтов, не относящихся к PostScript (TrueType). Шрифт Type 42 представляет собой «оболочку» шрифта TrueType для языка PostScript. Шрифт Type 42, как правило, создается драйвером принтера для загрузки шрифтов TrueType в принтер PostScript, в котором имеется растрирующий процессор для TrueType. С помощью этого метода шрифт TrueType обрабатывается непосредственно в Acrobat Distiller, в результате чего обеспечивается наиболее точное описание оригинального шрифта TrueType. К переменным, которые могут повлиять на данные о шрифтах, относятся: приложение, в котором создавался файл PostScript, сам шрифт, драйвер принтера PostScript и файл описания принтера PostScript (PostScript Printer Description — PPD). Если для текста, отформатированного со шрифтами TrueType, отсутствует возможность поиска в PDF-файле, созданном с помощью Acrobat Distiller, измените одну или несколько из этих переменных и затем повторно создайте PDF-файл.

Информация записывается в файл PostScript посредством приложения, которое генерирует код PostScript, или с помощью драйвера принтера PostScript. Более подробные сведения приведены в документации к этому приложению и в разделе «Как драйверы принтера PostScript обрабатывают шрифты TrueType в Windows» настоящего документа.

Шрифты Type 1

Для улучшения внешнего вида и обеспечения возможности поиска, при использовании шрифтов Type 1 предусмотрено надежное преобразование в PDF. Поскольку шрифты Type 1 не требуется преобразовывать в другой формат при встраивании шрифта (или поднабора шрифта) в файл PostScript, их использование дает лучше результаты в Acrobat Distiller.

Для встраивания шрифтов Type 1 должны быть выполнены следующие условия:

1. В диалоговом окне «Параметры Adobe PDF» шрифт включен в список AlwaysEmbed на вкладке «Шрифты», а для параметра EmbedAllFonts выбрано значение «Истина».

2. Символы не используются (за исключением символа «пи»).

3. Размер шрифта попадает в допустимый диапазон (значение длины словаря CharStrings больше 115, но меньше 229). Проверить значение длины словаря CharStrings можно посредством приложения для редактирования шрифтов.

Шрифты Type 3

Поскольку для выражения шрифтов Type 3 всецело используется компьютерный язык PostScript, в них могут быть заключены указания о том, какие возможности недоступны для Type 1, например тени, цвет и заливка. Однако шрифты Type 3 не оптимизированы по размеру и производительности, поэтому их знаки могут отображаться более жирными, чем соответствующие знаки шрифта Type 1.

Шрифты Type 3 всегда встроены в PDF-файлы и, таким образом, всегда доступны в Acrobat или Adobe Reader (кроме системы Mac OS X, в которой шрифты Type 3 не поддерживаются). Acrobat и Adobe Reader преобразует знаки Type 3 в растровые изображения и отображают их. При печати на принтере PostScript, в Acrobat и Adobe Reader используется драйвер принтера PostScript для загрузки шрифта в принтер. При печати на принтере, не относящемся к PostScript, печатаются растровые изображения. Символы шрифта Type 3 в наборе символов ISO Latin 1 преобразовываются в текст с возможностью поиска в PDF-файлах, однако при этом символы, содержащиеся в наборах символов, не преобразовываются. PDF-файлы со встроенными шрифтами Type 3, обычно имеют больший размер, чем PDF-файлы со встроенными шрифтами Type 1.

helpx.adobe.com

Извлечение шрифтов из PDF / Habr

Сразу следует сказать, что лучшей информации по формату, чем много мегабайтный PDFReference с сайта Adobe не существует. Для тех, кто пишет на С++ есть готовое решение — XPDF. В линуксе это самая полнофункциональная замена продуктам Adobe. Русскоязычные материалы на эту тему поверхностны и служат лишь для ознакомления, а не для практической работы. Но я рассчитываю, что с ними, а лучше с PDFReference вы уже знакомы. Я решил описать конкретный упрощенный пример извлечения из файла PDF truetype шрифтов, потому что этот вопрос очень часто звучит в сети и остается без ответа. Мне известна только одна такая программа, которая работает с ошибками и без исходников. Напоминаю, что пользоваться извлеченными шрифтами не всегда законно, можно только выводить встроенным шрифтом текст из документа.

Кто интересовался вопросом, то знают, что PDF состоит из заголовка, таблицы перекрестных ссылок (XRef), тела и трайлера (прицепа). Все элементы кроме заголовка могут быть разбросаны частями и в нескольких экземплярах по всему документу. Для начала надо прочитать таблицу XRef. Рекомендую оформить её классом. Для поиска адреса таблицы читаем файл с конца, пока не встретим тег %%EOF. Продолжаем читать задом наперед до тега startxref. теперь можно считать число, которое следует за этим тегом.
Вот пример конца файла:

startxref
173
%%EOF
число 173 — это смещение от начала данных файла к началу первой таблицы XRef. Переместившись в эту точку, мы видим что-то вроде этого:
xref
7628 42
0000000016 00000 n
0000001195 00000 f
и тд.

На 7628 пока не будем обращать внимание (это имя первого объекта, где записана информация о количестве страниц, например, а так же много чего другого). А 42 — это количество записей в данной части таблицы. Далее совсем просто: считываем в 10 байтный буфер первое слово, пропускаем пробел и считываем 5 байтный буфер, читаем отдельный символ. И так 42 раза. Преобразованные к целым строки имеют следующее значение — смещение от начала данных к ссылочному объекту, номер генерации. Последний символ интерпретируется так: n — объект используется, f — объект не используется, но как я говорил, у таблицы XRef могут быть продолжения в потоке файла. Как их найти? после таблицы всегда следует тег trailer. Когда он встретится надо искать строку /Prev — если она есть, то следом идет смещение к следующей таблице.

/Prev 4025745

Таким образом прочитываем все таблицы, если их больше одной. Закончить чтение можно, если в следующем трайлере будет отсутствовать ключ /Prev. Признаком последней таблицы может служить и то, что она начинается с записи 0000000000 65535 f. Надо сказать, что мы читаем таблицы задом наперед, последняя при чтении является первой, которая появилась при создании самого документа, а первая при чтении возникла после последнего редактирования.

Используя полученные данные мы можем перемещаться к любому ссылочному объекту документа. Правда есть еще прямые объекты, адреса которых не внесены в XRef, но об этом позже. Теперь мы можем перебирать объекты документа, проверяя их тип и делая с ними, что душе угодно. Объект начинается так:

7626 0 obj
содержимое объекта
endobj

7626 — номер (имя) объекта, а 0 — номер генерации, который должен совпадать с подобным значением в таблице ссылок для этого объекта. Как я понял, если объект меняется, редактируется, то и номер генерации увеличивается. Мы собрались искать шрифты, для этого надо прочитать словарь объекта, который представляет собой лексему, заключенную в теги <<… >>. Если элементы словаря имеют такую структуру, например:

/FirstChar 32

где слово после слеша — ключ, а необязательное значение после пробела — значение. При парсинге надо помнить, что значение может содержать любые данные, любой вложенности, в том числе и другие словари. Так что рекурсию вам в руки, впрочем, можно и без рекурсии, если мы работаем над конкретной задачей извлечения шрифтов. Указанное значение может также включать вложенные или не вложенные элементы следующих типов:

(… ) -текстовые строки
<… > — hex-строки
[… ] — массивы

Строка значения продолжается до следующего слеша или до перевода строки. Чтобы идентифицировать объект шрифта надо найти в словаре комбинацию:

/Type /Font
Теперь фильтруем Truetype шрифты по содержанию в словаре последовательности:
/Subtype /TrueType

Остальные ключи игнорируем, потому что мы просто хотим извлечь шрифты. Но самого шрифта мы в этом объекте, скорее всего не найдем. Только набор ненужных нам ключей. Читаем один из них:

/FontDescriptor 1675 0 R

Если такой ключ отсутствует, то шрифт внешний и не встроен в документ. Далее номер генерации этого объекта, а символ R обозначает, что это ссылка. Таблицу XRef мы уже прочитали и теперь можем переместиться к данным шрифта, через поиск смещения для объекта с номером 1675. Правда, возможен такой вариант:

/FontDescriptor << словарь и (или) данные шрифта >>

Будем считать, что мы переместились по ссылке к прямому объекту. В его словаре должны быть такие ключи:

/Type /FontDescriptor

В этом объекте тоже много полезных сведений о шрифте, но самого шрифта опять нет. Не моя вина — все претензии к компании Adobe. Нам нужен такой ключ

/FontFile2 1676 0 R

Знакомая конструкция. Переходим к следующему объекту. Если мы все сделали правильно, то это потоковый объект. Он состоит из словаря потока и из бинарных данных, заключенных между тегами stream… endstream. Вот тут надо сказать, что наличие бинарных данных не дает использовать готовые текстовые парсеры. Перепробовал много и пришлось написать свой с нуля. Бинарные данные можно считывать разом, так как в словаре потока имеется ключ /Length с длиной потока. Если попробовать сохранить извлеченный поток в файл с расширением TTF, то система объявит, что это никакой не шрифт. Все правильно, надо его разжать.

Шрифт чаще сжат с помощью zip, но для верности можно это проверить по наличию ключа /FlateDecode. Если работаем в Delphi, то используем стандартный ZLib. Мы можем получить размер буфера для разжатых данных из словаря потока по ключу /Length2. Ну и нужно знать, что встроенный в документ шрифт содержит только те глифы, которые в документе используются.

Думаю, что после этих наметок можно брать в одну руку hex-вьвер, в другую — PDFReference и стоить собственный АкробатРидер.

habr.com

Отправить ответ

avatar
  Подписаться  
Уведомление о