Adobe reader невозможно извлечь встроенный шрифт
По гуглил. Много чего пишут, но решения не нашёл. У вас было такое? Какое то pdf'ник неправильный.
Т.к. тема является архивной.
Описали бы лучше ситуацию.
Откуда файл, какой программой открываете?
Не забывайте, что эти документы могут быть защищены автором.
Т.к. тема является архивной.
Т.к. тема является архивной.
Есть pdf. Открываю его в Хроме. Выделяю слово и копирую в блокнот/ворд/фар. Получаю не читаемое слово
Т.к. тема является архивной.
Вы вопрос не поняли.
1. файл из тырнета, как я понял. А скачать пробовали?
2. воспользуйтесь программой для чтения и редактирования пдф файлов. Я, например, пользуюсь Адобе Профешинал 7 версии.
3. Не факт, что и после такого подхода получится желаемое.
Т.к. тема является архивной.
1. Скачал. Открывается в Хроме
2. Использовал:
Adobe Acrobat Reader DC v2017.009.20044 RePack by KpoJIuK
и
Foxit PDF Editor 2.2.1.1119 Rus
3. Везде слово по разному копируется.
В Adobe Acrobat Reader DC:
.
В Foxit PDF Editor 2.2.1.1119 Rus:
.
В хроме:
.
Т.к. тема является архивной.
Т.к. тема является архивной.
В винде такого не попадалось, а вот в убунте (в evince) - частенько бывало. Да и в Adobe Reader 9, что в той же убунте тоже грешит. И не только в таком виде. Особенно когда документ просто пипец какой официальный.
Т.к. тема является архивной.
Список причин можно расширить на:
- у вас отсутствуют шрифты в системе в целевой программе.
- программа-вьювер pdf некорректно работает с буфером обмена
- программа-вьювер pdf данной версии некорректно работает с pdf данной спецификации формата.
- можно извлечь текст OCR программами.
и т.д. и т.п.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Первую Вашу реплику я прочёл как "он копирует в блокнот, где нет управления шрифтами".
Если вы имеете в виду что-то другое, то пожалуйста более однозначно выражайте свою мысль.
Т.к. тема является архивной.
Я извиняюсь, погорячился, частично вы были правы: шрифт, которым набран документ, является встроенным и в системе его нет. Но проблема все равно не в шрифте, а в перекодировке.
Т.к. тема является архивной.
Тогда можно через велосипед - экспортировать в картинки и распознать через фаинридер, онлайн конвертер, вроде, распознает из пдф
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Судя по всему, автор фала таки наложил ограничения, которые предусмотрены данным форматом, для сохранения авторских прав.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Если файл не защищён от распознования, то его можно подсунуть сразу в распознавальщик.
Как я и предлагал выше. Но это показалось вам достаточно трудоёмким.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
классная штука!
1. попробовал пдф - ворд
Самый близкий результат к оригиналу выдал!
Получил это "CO?EPKAHEE:" вместо "содержание". Читать увы оч сложно такой текст.
2. Снял защиту. Копирую из пдф и вставляю в ворд. Получаю ерунду.
3. пдф со снятой защитой перевожу в ворд. Получаю "CO?EPKAHEE:"
Не пробиваемый ПДФ.
Т.к. тема является архивной.
Такое впечатление, что у вас не пдф, а картинка, сохранённая/конверчённая в пдф.
А на печать выводит без ошибок?
Т.к. тема является архивной.
я могу отдельные буквы и слова копировать в буфер.
Возможности проверить как на печати нет (
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Надо нажимать не печать, а "предварительный просмотр".
Тогда откроется превью, как будет выглядеть документ на печати при данных установках полей, размера бумаги и настроек принтера.
Т.к. тема является архивной.
в хроме,
Adobe Acrobat Reader DC v2017.009.20044 RePack byKpoJIuK, Foxit PDF Editor 2.2.1.
нет "предварительный просмотр".
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
раньше распознаватели и сами делали этот "принтскрин", когда ПДФ распознавался .. правда почкму-то формат ВМР для этого использовали :) . но разпознавали в конечно итоге :) .
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Английский текст из этого пдф копируется без ошибок! Причины точно в кодировке! Но как проблему решить, что это за кодировка?
Т.к. тема является архивной.
Я вам сразу говорил, что у вас просто нет в системе того шрифта, который используется в том документе. Именно по этой причине вместо символов поставляются прямоугольнички.
Выхода два:
1) угадать, что это за шрифт (по дизайну или чему-то другому) и поставить его в систему
2) искать способы перекодировки. Но сразу скажу, что у меня это не получалось. Труд занимал куда больше времени, чем нужда в результате. я забил.
Т.к. тема является архивной.
Esik писал(а)
Я вам сразу говорил, что у вас просто нет в системе того шрифта, который используется в том документе.
Т.к. тема является архивной.
Т.к. тема является архивной.
иногда помогает при вставке указать, что стандартная вставка без форматов . сам т текст в пдф отображается по русски же .
P.S. если тексты не секретные - киньте файл сюда - посмотрим ))
Т.к. тема является архивной.
где указать это?
нельзя файл выкладывать.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
вставил в екселе - спец вставка
как юникод получил китайские символы.
как текст получил вопросительные знаки.
Т.к. тема является архивной.
Какая-то хрень с кодировкой:
Открываете файл в FoxIt, далее File -> Preferences -> Fonts и скришот списка сюда
Т.к. тема является архивной.
Т.к. тема является архивной.
Что-то я один момент никак не пойму. Выше вы приложили скриншот, снятый в Foxit PDF Reader, там указан встроенный шрифт TimesNewRoman, а здесь такого встроенного шрифта в списке нет.
Суть в чём: я хочу узнать кодировку этого шрифта (например, не ANSI). См. аттач:
Т.к. тема является архивной.
Явлинский писал(а)
Что-то я один момент никак не пойму. Выше вы приложили скриншот, снятый в Foxit PDF Reader, там указан встроенный шрифт TimesNewRoman, а здесь такого встроенного шрифта в списке нет.
Тоже заметил что шрифты отличаются. В первый раз я скопировал название шрифта с правой части, а во-второй раз с меню "Настройки". Списки шрифтов разные.
Вот с правой части список шрифтов.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Приложение FoxitReader83_L10N_Setup_Prom
Вид - просмоторщик текста. Показывает ерунду вместо кириллицы.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Т.к. тема является архивной.
Этот список в Акробат Ридере есть. Чем FoxitReader лучше?
Т.к. тема является архивной.
Т.к. тема является архивной.
Ничем не лучше, просто именно это я и хотел увидеть изначально. Ваша проблема в том, что текст набран встроенным шрифтом в т.н. кастомной кодировке (CID, Identity-H). В системе его нет, поэтому при копировании нужно знать т.н. таблицу замещения для встроенного шрифта. Причина того, что копирование не работает в том, что этой таблицы замещения в документе нет:
This is relatively common, and is caused when the application creating the PDF fails to correctly embed the Unicode lookup table for the font. Without that lookup table there is no relationship between the visible character on screen and the equivalent character code, so copying and pasting the text will lead to either a series of unknown markers, or a jumble of characters with a 1:1 relationship to the original text.
Поэтому вариант решения вашей проблемы такой:
- самостоятельно создать таблицу соответствий каждой буквы русского алфавита встроенного шрифта вашего документа соотв. юникод-символу
- далее написать скрипт, который будет делать подстановку, скопипасть исходный тескт в файл и обработать это скриптом. VBA из пакета Ms Office это прекрасно может сделать.
ЗЫ. Либо связаться с автором исходного документа и попросить его внедрить нормальный шрифт.
5.0 Оценок: 2 (Ваша: )
Скачали книгу с интернета, а ваша программа-ридер отображает текст некорректно или подменяет некоторые знаки иероглифами? Или хотите использовать в документе интересное оформление текста, например шрифт Geometria, но встроенная в ПДФ-редактор коллекция не отвечает вашим запросам? В этой статье мы разберем, как добавить шрифт в Adobe Acrobat Pro или Адоб Ридер, а также как открывать документацию с недостающими стилями.
Хотите читать PDF-файлы без проблем со шрифтами?
Скачайте лучший PDF редактор
Как добавить шрифт в Adobe Acrobat или Adobe Reader
По умолчанию Acrobat всегда «читает» шрифты, встроенные в Windows. Чтобы использовать понравившийся вам стиль текста в создаваемом документе, достаточно установить его непосредственно в операционную систему. Приведенные ниже способы действуют для всех версий продуктов Adobe, в том числе Акробат Про и Ридер.
Шаг 1. Скачайте шрифт
Отыскать русские шрифты можно на сайтах DaFont, AllShrift, Fonts-Online. На этих ресурсах можно скачать самые популярные стили, а также редкие вроде Formular или GOST Type. Также бесплатные файлы с поддержкой кириллицы можно найти на сайте Google Fonts. Для этого выставьте фильтр «Cyrillic» в меню «Languages».
Обычно файл загружается на компьютер в стандартном расширении TTF или OTF. Семейство шрифтов часто разделяется на отдельные файлы с настройками для курсива, стандартного и жирного текста. В этом случае они будут запакованы в архив. Чтобы распаковать его, понадобится программа WinRar или 7ZIP. Дважды кликните на значок архива и извлеките файлы в текущую папку.
Шаг 2. Установите шрифт в систему
Встроить новый стиль текста можно двумя способами. Во-первых, вы можете скинуть все файлы в системную папку, пройдя по пути «Этот компьютер» — «Жесткий диск С» — «Windows» — «Fonts». Данный вариант подходит для Windows 10 и других версий ОС, но в более ранних сборках Виндовс путь может незначительно различаться.
Второй вариант более простой и не требует знания того, куда закидывать скачанные файлы. Чтобы установить шрифт, дважды кликните по файлу. В открывшемся окне с сэмплами букв нажмите кнопку «Установить» слева сверху. Компьютер попросит подтвердить действие и после вашего согласия сохранит новые системные установки.
Шаг 3. Найдите новый шрифт в программе
Готово! Теперь вы знаете, как добавить шрифт в Адоб Акробат и можете использовать его в проекте. Чтобы изменить текст во время редактирования, в колонке справа во время ввода выберите нужный пункт в списке «Формат».
Если вы читаете электронную документацию, а не редактируете, то проверить, появился ли в редакторе новый шрифт, можно через пункт меню «Файл». Найдите строку «Свойства» и раскройте вкладку «Шрифты». Программа выведет список шрифтов, которые используется в макете. Таким образом вы также можете понять, как определить недостающие стили.
Советы по установке шрифтов для Adobe Acrobat
Адоб Акробат ДС – сложная программа с большим количеством нюансов в настройках. Чтобы не ошибиться при выборе и установке шрифтов, советуем придерживаться следующих рекомендаций.
- Adobe Acrobat не распознает шрифты вида Type 32.
- Перед тем, как устанавливать шрифт, закройте все текстовые редакторы и программы линейки Adobe.
- Если вы установили шрифт с открытым редактором PDF, закройте и снова откройте его, чтобы перезапустить настройки.
- При открытии документов с азиатскими шрифтами Acrobat использует встроенную библиотеку или сканирует компьютер на наличие установленного стиля. В этом случае подстановка невозможна, поэтому вместо нераспознанных знаков в тексте отобразятся маркеры. Учитывайте это и используйте шрифты из внутреннего набора редактора.
- Следите за тем, чтобы выбранное семейство шрифтов поддерживало все знаки кириллицы, так как некоторые популярные стили вроде Arialmt умеют отображать в русском тексте только цифры.
Если вы создаете проект с нуля и хотите использовать необычный шрифт, имейте в виду, что Acrobat использует режим подстановки. Это значит, что, если кто-то откроет вашу книгу, программа автоматически заменит неопознанные знаки на подходящие. В итоге текст может кардинально измениться. Это критично важно для макетов, которые отправляются на печать.
Поэтому выбирайте шрифты для Adobe с классическим начертанием и откажитесь от слишком замысловатых узоров, которые сложно имитировать. К примеру, семейство Adobe Sans и Calibri установлены во многих редакторах. А вот такие стили, как GOST Common, Batang или Isocpeur редко встречаются на стандартных компьютерах.
Как просматривать PDF документы без локальных шрифтов
Что делать, если вы не знаете, какой шрифт был использован и поэтому не можете его установить? Приложение позволяет просматривать форматированный текст без встраивания его в документ. Для этого используется специализированный режим замены, который позволяет придать ПДФ-файлу желаемый вид.
- Откройте ПДФ-файл в Adobe Acrobat. Раскройте пункт «Редактирование» в главном меню программы.
- Выберите опцию «Установки» и в диалоговом окне раскройте вкладку «Вид страницы».
- В блоке «Рендеринг» снимите галочку с пункта «Использовать локальные шрифты» и нажмите «ОК».
Заключение
Итак, мы рассказали, как добавить шрифт в Adobe Acrobat несколькими способами и читать документы с недостающим стилем текста. Следует отметить, что эта программа довольно капризно относится к файлам, загруженным из интернета или созданным не с ее помощью, поэтому, используя её, вы нередко будете сталкиваться с вылетами и прекращением работы Адоба.
Если вы столкнулись с тем, что в редакторе отсутствуют или не устанавливаются нужные шрифты, отдайте предпочтение более удобной альтернативе PDF Commander. Программа включает в себя все необходимые инструменты для работы с ПДФ-документацией и отличается лучшей оптимизацией ресурсов ПК.
PDF Commander поддерживает все версии Windows и быстро обрабатывает крупные многостраничные файлы на слабых компьютерах. Скачайте редактор и убедитесь в том, насколько он удобен для повседневных, личных и бизнес задач.
Шрифт можно встроить только в том случае, если поставщиком шрифта установлен параметр, допускающий встраивание. Встраивание исключает подстановку шрифта при просмотре или печати файла, поэтому читатель видит текст, набранный первоначальным шрифтом. Встраивание незначительно увеличивает размер файла, за исключением случая использования шрифтов CID — формата шрифтов, используемых для восточных языков. Встроить или подменить шрифты можно как в Acrobat, так и при экспорте документа InDesign в формат PDF.
Встраивать можно как весь шрифт целиком, так и подмножество символов, которые были реально использованы в файле. Использование подмножества обеспечивает применение при печати конкретных шрифтов и метрики шрифтов посредством создания пользовательского имени для шрифта. Таким образом, например, для просмотра и печати документа поставщиком услуг может использоваться ваша версия шрифта Adobe Garamond®, а не версия поставщика. Шрифты Type 1 и TrueType можно встраивать, если они включены в файл PostScript или доступны в одном из каталогов шрифтов, отслеживаемых приложением Distiller, и разрешены для встраивания.
Если шрифт невозможно встроить из-за настроек поставщика шрифта, или пользователь, который открывает или печатает PDF, не имеет доступа к оригинальному шрифту, выполняется временное замещение гарнитуры Multiple Master : гарнитурой AdobeSerifMM для отсутствующего шрифта serif и AdobeSansMM для sans serif.
Гарнитуру шрифта Multiple Master отличает способность сужаться и растягиваться, чтобы подходить по размерам к странице, и в результате строки и разбиение на страницы остаются такими же, как были в документе изначально. При подстановке, разумеется, не всегда удается воспроизвести форму оригинальных символов, особенно если использована нестандартная (например, рукописная) гарнитура шрифта.
Для азиатского языков Acrobat использует шрифты из установленного комплекта для азиатских языков или из аналогичных шрифтов, присутствующих в системе пользователя. Подстановка для шрифтов некоторых языков, а также шрифтов с неизвестными кодировками, невозможна; в этих случаях символы в тексте будет выглядеть как маркеры.
Если были использованы нестандартные символы (слева), символы шрифта, использованного для подстановки, окажутся совершенно на него непохожими (справа).
При преобразовании 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 для придания документу желаемого вида.
В диалоговом окне «Установки» в разделе «Категории» выберите «Вид страницы» , затем отмените выбор «Использование локальных шрифтов».
Мне известна pdftk.exe утилита, которая может указывать, какие шрифты используются в PDF-файле, и являются ли они встроенными или нет.
Теперь проблема: учитывая, что у меня были PDF-файлы со встроенными шрифтами - как я могу извлечь эти шрифты таким образом, чтобы их можно было повторно использовать как обычные файлы шрифтов? Есть ли (желательно бесплатные) инструменты, которые могут это сделать? Также: можно ли это сделать программно, скажем, с помощью iText?
У вас есть несколько вариантов. Все эти методы работают как в 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 с шрифтом для извлечения.
- «Выберите шрифт» DialogBox открывает - выбрать здесь какой шрифт открыть.
Проверьте руководство FontForge. Возможно, вам придется выполнить несколько конкретных шагов, которые не обязательно просты, чтобы сохранить извлеченные данные шрифта в виде файла, который можно использовать повторно.
С помощью mupdf
Примечание: pdfextract.exe это программа командной строки. Чтобы использовать это, сделайте следующее:
Эта команда выведет все извлекаемые файлы из PDF-файла, на который есть ссылки в текущем каталоге. Как правило, вы увидите различные файлы: изображения, а также шрифты. К ним относятся PNG, TTF, CFF, CID и т. Д. Имена изображений будут похожи на img-0412.jpg, если номер объекта 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 . . *
Поэтому для извлечения шрифтов и изображений может потребоваться запустить одну из следующих командных строк:
Использование gs (Ghostscript)
Затем Ghostscript может также извлекать шрифты непосредственно из PDF-файлов. Однако для этого требуется специальная служебная программа с именем extractFonts.ps , написанная на языке PostScript, которая доступна в репозитории исходного кода Ghostscript .
Теперь используйте его, вам нужно запустить и этот файл, extractFonts.ps и ваш файл PDF. Затем Ghostscript будет использовать инструкции из программы PostScript для извлечения шрифтов из PDF. В Windows это выглядит примерно так (да, Ghostscript понимает «косую черту», /, как разделитель пути и в Windows!):
или в Linux, Unix или Mac OS X:
Я тестировал метод Ghostscript несколько лет назад. В то время он действительно извлекал * .ttf (TrueType) просто отлично. Я не знаю, будут ли вообще извлечены другие типы шрифтов, и если да, то для повторного использования. Я не знаю, блокирует ли утилита извлечение шрифтов, помеченных как защищенные.
С помощью pdf-parser.py
Наконец, pdf-parser.py Дидье Стивенса : этот, вероятно, не так прост в использовании, потому что вам нужно иметь некоторые знания о внутренних структурах PDF. pdf-parser.py это скрипт на Python, который может делать и много других вещей Он также может распаковывать и извлекать произвольные потоки из объектов, и поэтому он также может извлекать файлы встроенных шрифтов.
Но вам нужно знать, что искать. Давайте посмотрим на это на примере. У меня есть файл с именем big.pdf . В качестве первого шага я использую -s параметр для поиска в PDF- файле любого вхождения ключевого слова FontFile ( pdf-parser.py не требует поиска с учетом регистра):
В моем случае для моего big1.pdf я получаю такой результат:
Это говорит мне, что есть два экземпляра FontFile2 внутри PDF, и они в объектах PDF нет. 15 и нет. 16 соответственно. № объекта 15 содержит /FontFile2 для шрифта / ArialMT , номер объекта. 16 содержит /FontFile2 для шрифта / Arial-BoldMT .
Чтобы показать это более четко:
Быстрый просмотр спецификации PDF показывает, что ключевое слово /FontFile2 относится к «потоку, содержащему программу шрифтов TrueType» ( /FontFile относится к «потоку, содержащему программу шрифтов типа 1») и /FontFile3 относится к «потоку, содержащему программу шрифтов, формат которого указывается в записи Подтипа в словаре потока ' подтипом Type1C, либо CIDFontType0C >.)
Чтобы посмотреть конкретно на PDF объект нет. 15 (который содержит шрифт / ArialMT ), можно использовать -o 15 параметр:
Хорошо, это потому, что мы (пока) не позволили pdf-parser.py использовать всю его магию: сбросить отфильтрованный, декодированный поток. Для этого мы должны добавить -f параметр:
Каков размер этого нового файла?
О, смотрите: это точное число также уже сохранено в объекте PDF №. 15 словарь как значение для ключа /Length1 .
Что file это значит?
Что otfinfo говорит нам об этом?
Итак, Bingo !, у нас есть победитель: мы pdf-parser.py действительно извлекли правильный файл шрифта для нас. Учитывая размер этого файла (778,552 байт), похоже, что этот шрифт был даже полностью встроен в PDF .
Мы могли бы переименовать его в arial-normal.ttf и установить как таковой, и счастливо использовать его.
Предостережения:
В любом случае вам необходимо следовать лицензии, которая применяется к шрифту. Некоторые лицензии на шрифты не разрешают свободное использование и / или распространение. Пиратство шрифтов похоже на пиратство любого программного обеспечения или других материалов, защищенных авторским правом.
Большинство PDF-файлов, которые находятся в свободном доступе, в любом случае не содержат полный шрифт, а только подмножества. Извлечение подмножества шрифта полезно только в очень ограниченной области, если вообще.
Пожалуйста, прочитайте также о плюсах и минусах относительно извлечения шрифтов:
Согласно распространённым представлениям, извлечение текста из PDF не должно быть такой уж сложной задачей. Ведь вот он, текст, прямо у нас перед глазами, и люди постоянно и с большим успехом воспринимают содержимое PDF. Откуда взяться трудностям в автоматическом извлечении текста?
Оказывается, точно так же, как работа с именами людей сложна для алгоритмов из-за множества пограничных случаев и неправильных предположений, так и работа с PDF сложна из-за чрезвычайной гибкости PDF-формата.
Основная проблема в том, что PDF не предполагался как формат для ввода данных – его разрабатывали, как канал вывода, дающий возможность тонкой подстройки вида итогового документа.
По сути, формат PDF состоит из потока инструкций, описывающих, как создаётся изображение на странице. В частности, текстовые данные хранятся не в виде параграфов – или даже слов – а в виде символов, нарисованных на определённых местах в странице. В итоге при преобразовании текста или документа Word в PDF большая часть семантики контента теряется. Вся внутренняя структура текста превращается в аморфный суп из плавающих на странице символов.
Наполняя FilingDB, мы извлекли текстовые данные из десятков тысяч PDF-документов. В процессе мы наблюдали за тем, как оказались неверными абсолютно все наши предположения о структуре PDF-файлов. Наша миссия оказалась особенно трудной потому, что нам приходилось обрабатывать PDF-документы, приходящие от разных источников, с совершенно разными стилями, шрифтами и внешним видом.
Ниже описывается, какие особенности PDF-файлов делают сложной или даже невозможной задачу извлечения из них текста.
Защита от чтения PDF
Вы могли встречать PDF-файлы, запрещающие копировать из них текстовое содержимое. К примеру, вот, что выдаёт программа SumatraPDF при попытке скопировать текст из защищённого от копирования документа:
Интересно, что текст виден, но при этом программа для просмотра отказывается передавать выделенный текст в буфер обмена.
Это реализовано при помощи нескольких флагов с «разрешениями доступа», один из которых управляет разрешением на копирование. Важно понимать, что сам PDF-файл это делать не заставляет – его содержимое от этого не меняется, и задача по его реализации лежит полностью на программе для просмотра.
Естественно, это на самом деле не защищает от извлечения текста из PDF, поскольку любая достаточно продвинутая библиотека для работы с PDF позволит пользователю либо поменять эти флаги, либо проигнорировать их.
Символы за пределами страниц
Частенько в PDF можно встретить больше текстовых данных, чем те, что показаны на странице. Возьмём эту страницу из ежегодного отчёта Nestle за 2010-й.
К этой странице прикреплено больше текста, чем видно. В частности, в содержимом, связанном с нею, можно найти следующее:
KitKat отметила свой 75-й день рождения в 2010-м, но остаётся молодой и успевает за тенденциями, имея более 2,5 млн фанатов на Facebook. Её продукция продаётся в более чем 70 странах, а продажи хорошо растут в развитых странах и на развивающихся рынках, например, на Среднем Востоке, в Индии и России. Япония – второй по величине рынок компании.
Этот текст расположен вне границ страницы, поэтому большинство просмотрщиков PDF его не показывают. Однако данные там есть, и их можно извлечь программно.
Такое иногда бывает из-за принимаемых в последнюю минуту решений о замене или удалении текста в процессе утверждения.
Мелкие или невидимые символы
Иногда на странице PDF можно встретить очень маленькие или вообще невидимые символы. Вот, к примеру, страница из отчёта Nestle за 2012 год.
На странице имеется мелкий белый текст на белом фоне, где написано следующее:
Wyeth Nutrition logo Identity Guidance to markets
Vevey Octobre 2012 RCC/CI&D
Иногда это делается для повышения доступности, с теми же целями, которым служит тег alt в HTML.
Слишком много пробелов
Иногда в PDF между буквами слов вставлены дополнительные пробелы. Это наверняка сделано в целях кернинга (изменения интервала между символами).
К примеру, в отчёте Hikma Pharma от 2013 года есть такой текст:
Если его скопировать, получим:
В общем случае сложно решить задачу реконструкции исходного текста. Наиболее успешно у нас работает подход с применением оптического распознавания символов, OCR.
Недостаточно пробелов
Иногда в PDF не хватает пробелов, или они заменены другим символом.
Пример 1: следующая выдержка сделана из ежегодного отчёта SEB за 2017.
Пример 2: отчёт Eurobank от 2013 содержит следующее:
И снова лучше всего оказалось использовать для таких страниц OCR.
Встроенные шрифты
PDF работает со шрифтами, мягко говоря, сложным образом. Чтобы понять, как хранятся в PDF текстовые данные, сначала нам нужно разобраться в глифах, названиях глифов и шрифтах.
- Глиф – это набор инструкций, описывающих, как изображать символ или букву.
- Название глифа – это название, связанное с этим глифом. К примеру, «торговая марка» для ™ или «а» для глифа «а».
- Шрифт – это список глифов и связанных с ними названий. К примеру, в большинстве шрифтов есть глиф, который большинство людей распознает, как букву «а», при этом в разных шрифтах содержатся различные способы изображения этой буквы.
К примеру, PDF может содержать код символа 116, который он сопоставляет с названием глифа «t», который, в свою очередь, сопоставлен глифу, описывающему, как выводить на экран символ «t».
Большинство PDF используют стандартную кодировку символов. Кодировка символов – это набор правил, присваивающих смысл самим кодам символов. К примеру:
- В ASCII и Unicode для обозначения буквы «t»используется код символа 116.
- Unicode сопоставляет код символа 9786 глифу «белый смайлик», который выводится, как ☺, а в ASCII такой код не определён.
Хотя для человека итоговый результат ничем не отличается, машина запутается из-за таких кодов символов. Если коды символов не соответствуют стандартной кодировке, программным способом почти невозможно понять, что обозначают коды 1, 2 или 3.
Зачем же в PDF нужно включать нестандартные шрифты и кодировку?
- Одна причина – усложнить извлечение текста.
- Вторая – использование субшрифтов. В большинстве шрифтов есть глифы для очень большого числа кодовых символов, при этом в PDF может использоваться небольшое их подмножество. Для экономии места создатель PDF может обрезать все ненужные глифы и создать компактный субшрифт, который скорее всего будет использовать нестандартную кодировку.
Карта кодирования, которую вы только что сделали – та, что сопоставляет цифры 1 и 116 – называется в PDF-стандарте картой ToUnicode. В PDF-документах могут содержаться собственные карты ToUnicode, однако это не обязательно.
Распознавание слов и параграфов
Воссоздание параграфов и даже слов из аморфного символьного супа PDF-файлов – задача сложная.
PDF-документ содержит список символов на странице, а распознавать слова и параграфы должен потребитель. Люди от природы эффективно справляются с этим, поскольку чтение – навык распространённый.
Чаще всего используется алгоритм группировки, сравнивающий размеры, расположение и выравнивание символов, с целью определить, что является словом или параграфом.
У простейших реализаций таких алгоритмов сложность легко может достичь O(n²), из-за чего обработка плотно забитых страниц может проходить долго.
Порядок текста и параграфов
Распознавание текста и порядка параграфов – задача сложная по двум причинам.
Во-первых, иногда правильного ответа просто нет. Если у документов с обычным типографским набором с одной колонкой последовательность чтения выходит естественной, то у документов с более смелым расположением элементов определить её сложнее. К примеру, не совсем ясно, должна ли следующая вставка идти до, после или в середине статьи, рядом с которой она расположена:
Во-вторых, даже когда человеку ответ ясен, компьютеры определить точный порядок параграфов бывает очень сложно – даже с использованием ИИ. Возможно, это утверждение покажется вам чересчур смелым, но в некоторых случаях правильную последовательность параграфов можно определить, только понимая содержимое текста.
Рассмотрим данное расположение компонентов в два столбца, где описано приготовление овощного салата.
В западном мире разумно предположить, что чтение идёт слева направо и сверху вниз. Поэтому мы, не изучая содержимого текста, можем свести все варианты к двум: A B C D и A C B D.
Изучив содержание, поняв, о чём там говорится, и зная, что овощи моют перед нарезкой, мы можем понять, что правильным порядком будет A C B D. Алгоритмически это определить крайне сложно.
При этом «в большинстве случаев» работает подход, полагающийся на порядок хранения текста внутри PDF-документа. Обычно он соответствует порядку вставки текста во время создания. Когда большие отрезки текста содержат по многу параграфов, они обычно соответствуют тому порядку, который подразумевал их автор.
Встроенные изображения
Нередко часть содержимого документа (или весь документ) оказывается отсканированным изображением. В таких случаях в нём нет текстовых данных, и приходится прибегать к OCR.
К примеру, ежегодный отчёт Yell от 2011 года доступен только в виде скана:
Почему бы просто всё не распознать?
Хотя OCR может помочь с некоторыми описанными проблемами, у него тоже есть свои недочёты.
- Длительное время обработки. Запуск OCR на скане из PDF обычно отнимает на порядок больше времени (а то и ещё дольше), чем прямое извлечение текста из PDF.
- Сложности с нестандартными символами и глифами. Алгоритмам OCR сложно работать с новыми символами – смайликами, звёздочками, кружочками, квадратиками (в списках), надстрочными индексами, сложными математическими символами, и т.п.
- Нет подсказок о последовательности текста. Упорядочивать текст, извлекаемый из PDF-документа, легче, поскольку большую часть времени этот порядок соответствует порядку вставки текста в файл. При извлечении текста с изображений таких подсказок не будет.
Тестирование
Пока что мы ещё не упоминали о том, насколько сложно подтвердить, что текст был извлечён правильно или ожидаемо. Мы обнаружили, что лучше всего проводить обширный набор тестов, изучающих как базовые метрики (длину текста, длину страницы, соотношение количества слов и пробелов), так и более сложные (процент английских слов, процент нераспознанных слов, процент чисел), а также следить за предупреждениями типа подозрительных или неожиданных символов.
Что мы можем посоветовать для извлечения текста из PDF? Прежде всего убедиться, что у текста нет более удобного источника.
Если интересующие вас данные идут только в формате PDF, тогда важно понимать, что эта проблема кажется простой лишь на первый взгляд, а решить её со 100% точностью может и не получиться.
Читайте также: