Шрифт содержит неправильный bbox

Шрифт содержит неправильный bbox

На этой странице

某些 Creative Cloud 应用程序、服务和功能在中国不可用。

Встраивание и подстановка шрифтов

Шрифт можно встроить только в том случае, если поставщиком шрифта установлен параметр, допускающий встраивание. Встраивание делает ненужной подстановку шрифта при просмотре или печати файла, поэтому читатель видит текст, набранный первоначальным шрифтом. Встраивание незначительно увеличивает размер файла, за исключением случая использования шрифтов CID – формата шрифтов, используемых для восточных языков. Встроить или подменить шрифты можно как в Acrobat, так и при экспорте документа InDesign в формат PDF.

Встраивать можно как весь шрифт целиком, так и подмножество символов, которые были реально использованы в файле. Использование подмножества обеспечивает применение при печати конкретных шрифтов и метрики шрифтов посредством создания пользовательского имени для шрифта. Таким образом, например, для просмотра и печати документа поставщиком услуг может использоваться ваша версия шрифта Adobe Garamond ®, а не версия поставщика. Шрифты Type 1 и TrueType можно встраивать, если они включены в файл PostScript или доступны в одном из каталогов шрифтов, отслеживаемых приложением Distiller, и разрешены для встраивания.

Если шрифт невозможно встроить из-за настроек поставщика шрифта, или пользователь, который открывает или печатает PDF, не имеет доступа к оригинальному шрифту, выполняется временное замещение гарнитуры Multiple Master : гарнитурой AdobeSerifMM для отсутствующего шрифта serif и AdobeSansMM для sans serif.

Гарнитуру шрифта Multiple Master отличает способность сужаться и растягиваться, чтобы подходить по размерам к странице, и в результате строки и разбиение на страницы остаются такими же, как были в документе изначально. При подстановке, разумеется, не всегда удается воспроизвести форму оригинальных символов, особенно если использована нестандартная (например, рукописная) гарнитура шрифта.

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

В случае возникновения проблем с копированием и вставкой текста из PDF сначала проверьте, встроен ли используемый шрифт («Файл» > «Свойства» > Вкладка «Шрифт»). Для встроенного шрифта попытайтесь исправить проблемы со встраиванием, а не отправляйте его в файле PostScript. Создайте PDF, не встраивая этот шрифт. Затем откройте PDF в Acrobat и встройте шрифт, используя предпечатную проверку.

Доступ к шрифтам и их встраивание в Distiller

При преобразовании PostScript-файла в PDF для Distiller необходимо обеспечить доступ к шрифтам файла. Это необходимо для вставки в PDF соответствующих данных. Distiller сначала выполняет поиск шрифтов Type 1, TrueType и OpenType в PostScript-файле. Если шрифт не встроен в PostScript-файл, Distiller выполняет поиск в дополнительных папках шрифтов. Distiller выполняет поиск шрифтов в следующих папках (Windows):

/Resource/Font в папке Acrobat

Читайте также:  Питон тьютор ответы на задачи

/Program Files/Common Files/Adobe/Fonts

Distiller выполняет поиск шрифтов в следующих папках ( Mac OS ):

/Resource/Font в папке Acrobat

Установка Acrobat включает версии с различной шириной наиболее употребительных китайских, японских и корейских шрифтов, поэтому Distiller может найти эти шрифты в папке Acrobat. Убедитесь, что шрифты имеются на компьютере. ( В ОС Windows при установке Acrobat выберите вариант «Полностью» или «Настройка» и выберите параметр Поддержка азиатских языков в категории «Просмотр Adobe PDF ». В Mac OS эти шрифты устанавливаются автоматически.)

Дополнительные сведения о включении шрифтов в PostScript-файл см. в документации к приложению и к драйверу принтера, используемого для создания PostScript-файлов.

Distiller не поддерживает шрифты Type 32.

Для указания других папок поиска шрифтов для Distiller выберите в Acrobat Distiller пункт «Параметры» > «Папки со шрифтами» . Затем в диалоговом окне щелкните «Добавить» для добавления папки со шрифтами. Для исключения шрифтов TrueType, имеющих такие же имена, как и шрифты PostScript 3, установите флажок «Игнорировать версии TrueType стандартных PostScript-шрифтов».

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

Просмотр файлов PDF без локальных шрифтов

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

Если шрифт не подставляется, текст отображается в виде маркеров списка, Acrobat выводит сообщение об ошибке.

Поиск по именам PostScript-шрифтов

Если необходимо ввести имя шрифта вручную в панели «Шрифты» диалогового окна «Параметры Adobe PDF », можно посмотреть точное написание имени шрифта в PDF-файле.

Откройте файл PDF в программе Acrobat DC и выберите меню «Файл» > «Свойства» > «Шрифты».

На посты, размещаемые в Twitter™ и Facebook, условия Creative Commons не распространяются.

Вопросы сообществу

Получайте помощь от экспертов по интересующим вас вопросам.

Сразу следует сказать, что лучшей информации по формату, чем много мегабайтный 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. Признаком последней таблицы может служить и то, что она начинается с записи 0000000000 65535 f. Надо сказать, что мы читаем таблицы задом наперед, последняя при чтении является первой, которая появилась при создании самого документа, а первая при чтении возникла после последнего редактирования.

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

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

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

Читайте также:  Функция быстрое включение андроид

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

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

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

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

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

/FontDescriptor 1675 0 R

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

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

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

/FontFile2 1676 0 R

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

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

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

Ссылка на основную публикацию
Что такое синтаксический пакет
Одна из проблем, с которыми можно столкнуться при установке приложения apk на Android — сообщение: «Синтаксическая ошибка» — ошибка при...
Что отражает двоичная матрица
Представление информации в табличной форме широко распростране­но. Чаще всего мы пользуемся прямоугольными таблицами. Простейшая таблица состоит из строк и граф...
Что означают значки в погоде на айфоне
Самые интересные новости о технике Apple и не только. Что означают значки погоды на iPhone? Сегодняшняя тема весьма заинтересует многих...
Что такое синтаксическая ошибка на андроиде
При попытке распаковать приложение из APK на Android может появляться «Синтаксическая ошибка. При синтаксическом анализе пакета возникла неполадка». Это значит,...
Adblock detector