- Шрифты PDF
- Доступ к шрифтам и их встраивание в Distiller
- Просмотр файлов PDF без локальных шрифтов
- Adobe Reader не может извлечь встроенный шрифт из PDF, созданного с помощью mPDF
- Решение
- Программа чтения Acrobat не может извлечь встроенный шрифт «PWLEAX + NotoSerifCJKsc-Regular-Identity-H»
- Как снять ограничения безопасности с файла PDF
- Решения:
- Как я могу извлечь встроенные шрифты из PDF как допустимые файлы шрифтов?
- С помощью pdftops
- С помощью fontforge
- С помощью mupdf
- Использование gs (Ghostscript)
- С помощью pdf-parser.py
- Предостережения:
- Как я могу извлечь встроенные шрифты из PDF как допустимые файлы шрифтов?
- 8 ответов
- Использование pdftops
- Использование fontforge
- Использование mupdf
- Использование gs (Ghostscript)
- Использование pdf-parser.py
- Предостережения:
Шрифты PDF
Шрифт можно встроить только в том случае, если поставщиком шрифта установлен параметр, допускающий встраивание. Встраивание исключает подстановку шрифта при просмотре или печати файла, поэтому читатель видит текст, набранный первоначальным шрифтом. Встраивание незначительно увеличивает размер файла, за исключением случая использования шрифтов CID — формата шрифтов, используемых для восточных языков. Встроить или подменить шрифты можно как в Acrobat, так и при экспорте документа InDesign в формат PDF.
Встраивать можно как весь шрифт целиком, так и подмножество символов, которые были реально использованы в файле. Использование подмножества обеспечивает применение при печати конкретных шрифтов и метрики шрифтов посредством создания пользовательского имени для шрифта. Таким образом, например, для просмотра и печати документа поставщиком услуг может использоваться ваша версия шрифта Adobe Garamond®, а не версия поставщика. Шрифты Type 1 и TrueType можно встраивать, если они включены в файл PostScript или доступны в одном из каталогов шрифтов, отслеживаемых приложением Distiller, и разрешены для встраивания.
Если шрифт невозможно встроить из-за настроек поставщика шрифта, или пользователь, который открывает или печатает PDF, не имеет доступа к оригинальному шрифту, выполняется временное замещение гарнитуры Multiple Master : гарнитурой AdobeSerifMM для отсутствующего шрифта serif и AdobeSansMM для sans serif.
Гарнитуру шрифта Multiple Master отличает способность сужаться и растягиваться, чтобы подходить по размерам к странице, и в результате строки и разбиение на страницы остаются такими же, как были в документе изначально. При подстановке, разумеется, не всегда удается воспроизвести форму оригинальных символов, особенно если использована нестандартная (например, рукописная) гарнитура шрифта.
Для азиатского языков Acrobat использует шрифты из установленного комплекта для азиатских языков или из аналогичных шрифтов, присутствующих в системе пользователя. Подстановка для шрифтов некоторых языков, а также шрифтов с неизвестными кодировками, невозможна; в этих случаях символы в тексте будет выглядеть как маркеры.
В случае возникновения проблем с копированием и вставкой текста из 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
Дополнительные сведения о включении шрифтов в PostScript-файл см. в документации к приложению и к драйверу принтера, используемого для создания PostScript-файлов.
Distiller не поддерживает шрифты Type 32.
В случае перемещения папки со шрифтами удалите ее в этом диалоговом окне, а затем добавьте папку в ее новом расположении.
Просмотр файлов PDF без локальных шрифтов
Можно создать печатный образец для просмотра документа, в котором для любого форматированного текста выполняется замена шрифтов по умолчанию на шрифты, доступные на локальном компьютере, но не встроенные в файл PDF. Это поможет принять решение о встраивании таких локальных шрифтов в PDF для придания документу желаемого вида.
Adobe Reader не может извлечь встроенный шрифт из PDF, созданного с помощью mPDF
Я создаю PDF-файлы с mPDF v5 и v6.0 / 6.1, так как вскоре я получил сообщение об ошибке от Adobe Reader, как только я начал прокручивать документ:
Встроенный шрифт «MPDFAA + DejaVVuSansCondensed» не может быть
извлекаться. Некоторые символы могут не отображаться или не печататься
правильно.
(Переведено с оригинального немецкого сообщения об ошибке)
Также все умлауты отсутствуют.
Эта ошибка не возникает в Chrome или SumatraPDF.
На всякий случай я добавил ob_clean () перед генерацией PDF, как было предложено здесь, но ничего не изменилось:
PHP: Adobe Reader не может открыть PDF-файлы, созданные с помощью mpdf
Это ошибка mPDF или Adobe? Я создавал такие документы около 6 месяцев назад, так что я думаю, что Adobe выпустила ошибочное (?) Обновление?
У кого-нибудь возникает такая же проблема?
Редактировать: Кажется, что проблема возникает, только если я использую шрифт «DejaVuSansCondensed» в конструкторе, а не «DejaVuSans». Оба файла шрифтов присутствуют в / ttfonts.
Решение
Обходной путь предоставленный пользователем asdfa80756749 работал для меня.
Файлы шрифтов, предоставленные mPDF, не могут быть открыты последней программой Acrobat Reader.
В качестве обходного пути можно использовать бесплатное программное обеспечение Type Light, чтобы открывать сломанные шрифты в каталоге ttfonts (включая их полужирный и т. Д. Версии) и снова сохранять их, делая их доступными для Adobe Reader.
Программа чтения Acrobat не может извлечь встроенный шрифт «PWLEAX + NotoSerifCJKsc-Regular-Identity-H»
Как снять ограничения безопасности с файла PDF
Я использую версию Jasper Report 6.9.0 с Java 1.8.0_201 и Arial Unicode MS и шрифты NotoSerifCJKsc (особенно для традиционного китайского) для отчета Jasper для отображения китайских иероглифов.
PDF-файл сгенерирован правильно, и я могу видеть все содержимое, когда открываю его в Chrome, но если я попытаюсь открыть его с помощью Acrobat reader, я получаю сообщение об ошибке
«Не удалось извлечь встроенный шрифт« PWLEAX + NotoSerifCJKsc-Regular-Identity-H ».
Некоторые символы могут отображаться или печататься некорректно ».
Есть что-то, что нужно обновить?
Скорее всего, это проблема старой библиотеки itext, которую отчеты jasper вынуждены использовать из-за проблем с лицензией.
Если вы проверите зависимости Jasper Report 6.9.0 на самом деле, вы найдете com.lowagie �� itext 2.1.7.js6
В этом посте разработчик Бруно Ловаги заявляет:
[*] Обновление: эта проблема может быть воспроизведена, если вы используете iText 4.2.x, версию, выпущенную кем-то, неизвестным iText Group NV. Пожалуйста, используйте только версии iText выше 5.
И вы также можете узнать больше о подобной проблеме здесь, в основном расширения шрифтов pdf, похоже, неправильно сгенерированы этой старой версией библиотеки itext.
Решения:
В недавнем обновлении Adobe Reader было внесено изменение, из-за которого Reader начал выдавать эту ошибку в файлах PDF, созданных iText (и, возможно, другими продуктами).
Adobe только что объявила о выпуске нового выпуска Reader, исправляющего эту проблему (19.012.20040).
Как я могу извлечь встроенные шрифты из PDF как допустимые файлы шрифтов?
Мне известна pdftk.exe утилита, которая может указывать, какие шрифты используются в PDF-файле, и являются ли они встроенными или нет.
У вас есть несколько вариантов. Все эти методы работают как в Linux, так и в Windows или Mac OS X. Однако имейте в виду, что большинство PDF-файлов не включают в себя полный и полный шрифт, когда в них встроен шрифт. В основном они включают только подмножество глифов, используемых в документе.
С помощью pdftops
Один из наиболее часто используемых методов для этого в системах * nix состоит из следующих шагов:
С помощью fontforge
Проверьте руководство FontForge. Возможно, вам придется выполнить несколько конкретных шагов, которые не обязательно просты, чтобы сохранить извлеченные данные шрифта в виде файла, который можно использовать повторно.
С помощью mupdf
Примечание: pdfextract.exe это программа командной строки. Чтобы использовать это, сделайте следующее:
Опять же: имейте в виду, что большинство из этих файлов шрифтов могут иметь только подмножество символов и могут не представлять полную гарнитуру.
Поэтому для извлечения шрифтов и изображений может потребоваться запустить одну из следующих командных строк:
Загрузки здесь: mupdf.com/downloads
Использование gs (Ghostscript)
Теперь используйте его, вам нужно запустить и этот файл, extractFonts.ps и ваш файл PDF. Затем Ghostscript будет использовать инструкции из программы PostScript для извлечения шрифтов из PDF. В Windows это выглядит примерно так (да, Ghostscript понимает «косую черту», /, как разделитель пути и в Windows!):
или в Linux, Unix или Mac OS X:
С помощью pdf-parser.py
Наконец, pdf-parser.py Дидье Стивенса : этот, вероятно, не так прост в использовании, потому что вам нужно иметь некоторые знания о внутренних структурах PDF. pdf-parser.py это скрипт на Python, который может делать и много других вещей Он также может распаковывать и извлекать произвольные потоки из объектов, и поэтому он также может извлекать файлы встроенных шрифтов.
В моем случае для моего big1.pdf я получаю такой результат:
Чтобы показать это более четко:
Быстрый просмотр спецификации PDF показывает, что ключевое слово /FontFile2 относится к «потоку, содержащему программу шрифтов TrueType» ( /FontFile относится к «потоку, содержащему программу шрифтов типа 1») и /FontFile3 относится к «потоку, содержащему программу шрифтов, формат которого указывается в записи Подтипа в словаре потока ‘ <следовательно, является либо подтипом Type1C, либо CIDFontType0C >.)
Чтобы посмотреть конкретно на PDF объект нет. 15 (который содержит шрифт / ArialMT ), можно использовать -o 15 параметр:
Эти pdf-parser.py выходные данные говорят нам, что этот объект содержит поток (который он не будет отображать напрямую), который имеет длину 1.581.435 байт и закодирован (== «сжат») с помощью ASCIIHexEncode и должен быть декодирован (== «де «сжатый» или «отфильтрованный») с помощью стандартного /ASCIIHexDecode фильтра.
Чтобы сбросить любой поток из объекта, pdf-parser.py может быть вызван с -d dumpname параметром. Давай сделаем это:
О, смотри, это 1.581.435 байт. Мы видели эту цифру в выводе предыдущей команды. Открытие этого файла в текстовом редакторе подтверждает, что его содержимое представляет собой данные в шестнадцатеричном формате ASCII.
Открытие файла с помощью инструмента для чтения шрифтов otfinfo (это часть lcdf-typetools пакета ) поначалу приведет к разочарованию:
Хорошо, это потому, что мы (пока) не позволили pdf-parser.py использовать всю его магию: сбросить отфильтрованный, декодированный поток. Для этого мы должны добавить -f параметр:
Каков размер этого нового файла?
Что file это значит?
Что otfinfo говорит нам об этом?
Мы могли бы переименовать его в arial-normal.ttf и установить как таковой, и счастливо использовать его.
Предостережения:
В любом случае вам необходимо следовать лицензии, которая применяется к шрифту. Некоторые лицензии на шрифты не разрешают свободное использование и / или распространение. Пиратство шрифтов похоже на пиратство любого программного обеспечения или других материалов, защищенных авторским правом.
Большинство PDF-файлов, которые находятся в свободном доступе, в любом случае не содержат полный шрифт, а только подмножества. Извлечение подмножества шрифта полезно только в очень ограниченной области, если вообще.
Пожалуйста, прочитайте также о плюсах и минусах относительно извлечения шрифтов:
Как я могу извлечь встроенные шрифты из PDF как допустимые файлы шрифтов?
8 ответов
У вас есть несколько вариантов. Все эти методы работают в Linux, а также в Windows или Mac OS X. Тем не менее, имейте в виду, что большинство PDF-файлов не включают полный, полный шрифт, если в них встроен шрифт. В основном они включают только подмножество глифов, используемых в документе.
Использование pdftops
Один из наиболее часто используемых способов сделать это в системах * nix состоит из следующих шагов:
Использование fontforge
Проверьте руководство FontForge. Возможно, вам придется выполнить несколько конкретных шагов, которые не обязательно являются простыми, чтобы сохранить извлеченные данные шрифта в виде файла, который можно использовать повторно.
Использование mupdf
Еще раз: имейте в виду, что большинство этих файлов шрифтов могут иметь только подмножество символов и могут не представлять полный шрифт.
Поэтому для извлечения шрифтов и изображений вам может потребоваться запустить одну из следующих командных строк:
Загрузки находятся здесь: mupdf.com/downloads .
Использование gs (Ghostscript)
Или в Linux, Unix или Mac OS X:
Использование pdf-parser.py
В моем случае для моего big1.pdf я получаю такой результат:
Чтобы показать это более ясно:
Быстрый просмотр спецификации PDF показывает, что ключевое слово /FontFile2 относится к ‘потоку, содержащему программу шрифтов TrueType’ ( /FontFile относится к ‘потоку, содержащему программа шрифтов типа 1 ‘ и /FontFile3 будет относиться к потоку ‘, содержащему программу шрифтов, формат которой задан записью подтипа в словаре потока ‘ <, следовательно, либо подтип Type1C или CIDFontType0C >.)
Чтобы посмотреть конкретно на объект PDF нет. 15 (который содержит шрифт / ArialMT ), можно использовать параметр -o 15 :
Ой, смотрите, это 1.581.435 байта. Мы видели этот рисунок в выводе предыдущей команды. Открытие этого файла в текстовом редакторе подтверждает, что его содержимое представляет собой данные в шестнадцатеричной кодировке ASCII.
Открытие файла с помощью средства чтения шрифтов, например otfinfo (это часть lcdf-typetools package ) сначала вызовет некоторое разочарование:
Хорошо, это потому, что мы (пока) не позволили pdf-parser.py использовать всю его магию: выгрузить отфильтрованный декодированный поток. Для этого нам нужно добавить параметр -f :
Какого размера этот новый файл?
Что file думает об этом?
Предостережения:
В любом случае вам необходимо соблюдать лицензию, которая распространяется на шрифт. Некоторые лицензии на шрифты не позволяют бесплатное использование и / или распространение. Пиратские шрифты сродни пиратству любого программного обеспечения или другого материала, защищенного авторским правом.
Большинство распространенных PDF-файлов в любом случае не включают полный шрифт, а только его подмножества. Извлечение подмножества шрифта полезно только в очень ограниченном объеме, если вообще возможно.
Пожалуйста, прочтите также следующее о плюсах и (больше) минусах, связанных с извлечением шрифтов: