Adobe reader невозможно извлечь встроенный шрифт

Обновлено: 07.07.2024

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

Несколько символов меняются или даже исчезают.

Используя Adobe Acrobat, я могу проверить, какие именно шрифты встроены.

  • Будет ли установка таких шрифтов в Microsoft Word работать?
  • Если да, где я могу получить или даже создать те подмножества шрифтов, которые мне нужны?
  • Если нет, как я могу решить эту проблему?

Сначала вы должны проверить шрифты PDF-документа с помощью утилиты pdffonts . Это часть пакета XPDF для Windows и может использоваться без установки, только из окна DOS.

Чтобы успешно извлечь текст (или скопировать его) из PDF, шрифт должен либо использовать стандартную кодировку (а не Custom ), и она должна иметь таблицу /ToUnicode связанную с ней внутри PDF.

pdffonts возвращает несколько основных информационных элементов о шрифтах, используемых вашим PDF- pdffonts .

Пример вывода:

В приведенной выше команде были запрошены шрифты, используемые в диапазоне страниц 3 (сначала для проверки) до 5 (последняя страница для проверки).

В приведенном выше случае, оба используемые шрифты встраиваются как подмножества (обозначается XYZABC+ -prefixes, чтобы их имена, а также по yes в emb и sub столбцов).

Шрифт SSKFGJ+ArialMT использует настраиваемую кодировку, но PDF не имеет /ToUnicode для этого шрифта, о чем свидетельствует запись no для столбца, возглавляемого uni .

  • Будет ли установка таких шрифтов в Microsoft Word работать?
  • Очень вероятно: нет. (Я не могу дать однозначный ответ, не имея доступа к рассматриваемому PDF файлу).
  • Если да, где я могу получить или даже создать те подмножества шрифтов, которые мне нужны?
  • Нет другого решения, кроме как сделать это вручную.

Обновить

  • имена шрифтов,
  • информацию подмножества (но не префиксы, используемые для подмножеств шрифтов),
  • кодирование и
  • тип шрифта.

Но вы не получаете информацию о наличии таблицы /ToUnicode .

Будет ли установка таких шрифтов в Microsoft Word работать?

Не обязательно, это потому, что многие временами информация о шрифте отсутствует внутри pdf. Другими словами, хотя читатель может отличить его от двоичного файла, эквивалент ascii (возможно, если имеются данные шрифта) недоступен.

Если нет, как я могу решить эту проблему?

Поскольку проблема заключается в двусмысленном стандарте pdf (который позволяет удалить информацию о шрифтах), одной из лучших практик будет OCR.

При открытии pdf-a Акробат жалуется:

Невозможно извлечь встроенный шрифт MEDLMS+Arial,BoldItalic

поисковики на эти слова отвечат, что они "не в курсе".

Собственно вопрос: как это лечится?


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)

Исправлено: PaulWist, 21.06.10 11:16

Прочитал название темы, испугался, что у тебя что-то где-то застряло!
Не ленитесь писать более понятные названия


------------------
«Не причиняй зла никому и делай добро всем людям, хотя бы только потому, что это люди.»
(Марк Туллий Цицерон)
------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет) В новых версиях Акробата (начиная с 3.0 и выше) невозможно извлечь и сохранить встроенные в документ шрифты. Это сделано, чтобы не нарушать авторские права на шрифты.
------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери) Crispy
И тут же как всегда: а какая собссно версия акробата? И что это за акробат - то ли просто читатель, то ли версия про? В любом случае желательно поставить посвежее - 9.3 вроде был, или может уже и еще добавили, давно не смотрел у них.

------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)

Сам файл так и не увидим?


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку". "(с)

Ошибка выглядит так

[attachment 10176 ErrorPDF.jpg]


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)

Исправлено: PaulWist, 21.06.10 12:51

А возможно конкретно этого самого шрифта MEDLMS+Arial "внутри" файла и нет. Может быть, это какой-то стиль, созданный на основе Arial. Тогда, если непосредственно этот файл так уж важен - проще всего видимо распаковать его и подменить описание шрифта на стандартный Arial.


------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери) Crispy
А возможно конкретно этого самого шрифта MEDLMS+Arial "внутри" файла и нет. Может быть, это какой-то стиль, созданный на основе Arial. Тогда, если непосредственно этот файл так уж важен - проще всего видимо распаковать его и подменить описание шрифта на стандартный Arial.

Скорее всего так, только где подменять-то на Arial?


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет) PaulWist
Пристегнул.
Ошибка выглядит так

Так он вроде же пустой как бы. Открывается чистый лист - даже в редакторе.


------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери)

А нет, это в Foxit. В PDF-XChange Viewer видно слово типа: "fifl fl" - которое когда копирую, сюда вставляется почему-то по-другому, а именно: "Заказ".


------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери)

А-а-а, получается, что файл битый?

Возможно, возможно, только его размер 32К вызывет сомнение.


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку". "(с)

Хе, что это за документ со шрифтом размером 32к? Где вы такие шрифты видели?


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.

Заглянул внутрь - там xml-подобная запись трех видов шрифтов: 1) WINDHK+Arial,Bold, 2) MEDLMS+Arial,BoldItalic, 3) LRMSER+Arial, похоже юникодовских, но лишь в одной есть какое-то распознаваемое значение (видимо это самое "Заказ"), поэтому на другие в акробате и не ругается. Но если сделать подмену на два других - ругается уже на них.
Возможно когда его сохраняли, не внедрили эти шрифты?
Причем чуть дальше - как показалось rtf-кодировка-список (?) каких-то ну очень юникодовских (возможно китайских) символов.
Похоже на винде не хватает каких-то юникодовских, но не ttf(!), а именно адобевских шрифтов. У них другое расширение и характеристики (в частности они более гладкие на печати).

К примеру загляни в папку c:\Program Files\ABBYY FineReader 9.0\Resource\Font\


------------------
В действительности все иначе, чем на самом деле.
(Антуан де Сент-Экзюпери)

Исправлено: Crispy, 21.06.10 13:30

В Font нет такого фонта, а вот про китайские - сейчас поставлю их, может отправитель как раз их использовал.

Из не поставленных остались - китайские простые японские и корейские


------------------
Есть многое на свете, друг Горацио.
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)

Исправлено: PaulWist, 21.06.10 13:45

Извлечение шрифтов (fonts) из PDF-файлов под *nix:
init.sh


------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку". "(с) If I owned the rights to a set of font outlines, and I really wanted
to control the use of those font outlines, then I would definitely
not ever put those font outlines into a PDF file.
------------------
"Вы поступили правильно, мой друг, но, боюсь, совершили ошибку". "(с)

Разработчику отправил письмо, что бы прислал папочку Font как рекомендовал Crispy

Мне известна pdftk.exe утилита, которая может указывать, какие шрифты используются в PDF-файле, и являются ли они встроенными или нет.

Теперь проблема: учитывая, что у меня были PDF-файлы со встроенными шрифтами - как я могу извлечь эти шрифты таким образом, чтобы их можно было повторно использовать как обычные файлы шрифтов? Есть ли (желательно бесплатные) инструменты, которые могут это сделать? Также: можно ли это сделать программно, скажем, с помощью iText?

У вас есть несколько вариантов. Все эти методы работают как в Linux, так и в Windows или Mac OS X. Однако имейте в виду, что большинство PDF-файлов не включают в себя полный и полный шрифт, когда в них встроен шрифт. В основном они включают только подмножество глифов, используемых в документе.

С помощью pdftops

Один из наиболее часто используемых методов для этого в системах * nix состоит из следующих шагов:

  1. Конвертируйте PDF в PostScript, например, используя XPDF pdftops(в Windows: pdftops.exe вспомогательная программа.
  2. Теперь шрифты будут встроены в .pfa (PostScript) формат + вы можете извлечь их с помощью текстового редактора .
  3. Возможно, вам придется преобразовать .pfa (ASCII) в .pfb (двоичный) файл, используя t1utils и pfa2pfb .
  4. В PDF-файлы никогда не .pfm вставляются .afm файлы или файлы (файлы метрики шрифта) (поскольку программа просмотра PDF обладает внутренними знаниями об этом). Без них файлы шрифтов вряд ли можно использовать визуально приятным способом.

С помощью fontforge

Другой способ - использовать бесплатный редактор шрифтов FontForge :

  1. Используйте диалоговое окно «Открыть шрифт», используемое при открытии файлов.
  2. Затем выберите «Извлечь из PDF» в разделе фильтра диалогового окна.
  3. Выберите файл PDF с шрифтом для извлечения.
  4. «Выберите шрифт» 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-файлов, которые находятся в свободном доступе, в любом случае не содержат полный шрифт, а только подмножества. Извлечение подмножества шрифта полезно только в очень ограниченной области, если вообще.

Пожалуйста, прочитайте также о плюсах и минусах относительно извлечения шрифтов:

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он был по теме переполнения стека.

Закрыто 5 лет назад .

Кто-нибудь может порекомендовать библиотеку / API для извлечения текста и изображений из PDF? Нам нужно иметь возможность получить доступ к тексту, который содержится в заранее известных областях документа, поэтому API должен будет предоставить нам информацию о местоположении каждого элемента на странице.

Мы хотели бы, чтобы эти данные были выведены в xml или json отформатированы. В настоящее время мы смотрим на PdfTextStream который кажется довольно хорошим, но хотел бы услышать опыт и предложения других людей.

Существуют ли альтернативы (коммерческие или бесплатные) для извлечения текста из pdf программно?

Для тех , кто нуждается что - то очень простое (нет информации позиции), это Perl регулярное выражение может быть достаточно: /^\s*\[?\((.*?)\)\]?\s*T[Jj]/mg . Он просто ищет оператор Tj / TJ, который обозначает весь обычный текст в PDF. используйте библиотеку TomRoush PdfBox, это хорошо работает на Android

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

gswin64c -sDEVICE=txtwrite -o output.txt input.pdf

Выходной файл был разбит на страницы с заголовками и т. Д., Но тогда было легко написать приложение для удаления пустых строк и т. Д. И впитать все 30 000 записей. -dSIMPLE и -dCOMPLEX не имеет никакого значения в этом случае.

На Linux и Cygwin команда gs вместо gswin64c . Работает отлично. Нет запатентованного платного дерьма. Это просто работает. Да, отлично работает! Теперь я могу безнаказанно использовать «grep» в моих файлах pdf. Поскольку я могу читать лучше, чем читать, это победа! (:-) Upvote. Единственная проблема, с которой я столкнулся, заключалась в использовании его в PDF-файлах со встроенными «старыми» шрифтами. Прекрасно работает для локально сгенерированных PDF-файлов, но сложнее с неизвестными источниками. В остальном отличный скриптлет. что делает -sDEVICE=txtwrite ? Я не очень понимаю после прочтения Как использовать Ghostscript | Выбор устройства вывода

Первое воплощение TET - это библиотека . Это, вероятно, может сделать все, что хотел Budda006, включая информацию о местоположении каждого элемента на странице. Да, и он также может извлекать изображения. Он объединяет изображения, которые фрагментированы на куски.

И это действительно мощно. Это лучше, чем собственное извлечение текста Adobe. Он извлек текст для меня, где другие инструменты (в том числе Adobe) выплескивают только мусор.

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

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

ТЕТ просто потрясающе. Он обнаруживает таблицы. Внутри таблиц он идентифицирует ячейки, охватывающие несколько столбцов. Он определяет строки таблицы и содержимое каждой ячейки таблицы отдельно. Он очень хорошо справляется с переносами слов: он удаляет дефисы и восстанавливает полные слова. Он поддерживает не-ASCII языки (включая CJK, арабский и иврит). При встрече с лигатурами восстанавливаются оригинальные символы .

Читайте также: