2

Я пытаюсь извлечь текст из pdf-книги и продолжить выполнение проблемы, когда разделы скопированного текста не сохраняют правильные свойства капитализации при вставке в текстовый документ. У меня есть права на воспроизведение книги, а также лицензию на использование всех необходимых шрифтов. Сначала я думал, что проблема связана с тем, что шрифты не встроены, но я проверил, и все шрифты, похоже, встроены в подмножество. В PDF есть более 100 шрифты, используемые, которые имеют одно из следующих свойств:Проблема с извлечением текста в формате PDF - несоответствия шрифта/капитализации

TrueType Кодирование: Анси TrueType (ИДС) Кодирование: Идентичность-Н Тип 1 (ИДС) Кодирование: Идентичность-Н Тип 1 Кодировка : Пользовательский

Языки в пределах книги включают английский, немецкий, испанский и итальянский языки. В Германии капитализация абсолютно важна. Он имеет тенденцию потерять свойства верхнего регистра больше, чем нижние.

Пример ошибки будет: WELD -> приварку

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

Что может быть причиной этой проблемы? Является ли это, что шрифты являются подмножествами по сравнению с полностью встроенными? Есть ли лучший способ сохранить собственный файл (InDesign) в формате pdf, что позволит лучше извлечь шрифт? Имеет ли это отношение к шрифтам, отличным от unicode, и если есть ли альтернатива, которая не требует от владельца выбора разных шрифтов?

Любая помощь очень ценится.

+0

К сожалению, вы не говорите, какой инструмент вы используете для извлечения текста, и вы не предоставите образец PDF, чтобы проиллюстрировать проблему. Обычно ошибки в извлечении текста могут быть вызваны неполной или неправильной информацией в шрифтах. Но есть также шрифт caps/smallcaps, который может быть реализован только зашифрованием заглавных букв, а затем отображением их разных размеров. У каждого встроенного письма есть только одно значение ToUnicode, хотя ... – mkl

ответ

2

Это действительно смешно. Пример PDF, предоставленный OP, действительно явно содержит символы верхнего регистра, некоторые из них в верхнем регистре только строки, некоторые в смешанных строках case, которые Adobe Reader извлекаются как символы нижнего регистра.

Вы задаетесь

Что может быть причиной этой проблемы?

В качестве примера, как это происходит, давайте посмотрим на Pelle Più bella

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

/T1_0 1 Tf 
-0.025 Tc 12 0 0 12 379.5354 554.8809 Tm 
(PELLE PI\331 BELLA)Tj 

Глядя на используемый шрифт T1_0 (подмножество DIN-Bold) мы видим, что он утверждает, что использует WinAnsiEncoding, который также указывает на интерпретацию этих кодов символов в потоке страниц, поскольку c Капитал Закрытие письма

Но шрифт также имеет ToUnicode отображение, и это отображение карты

<41> <0061> — 'A' → a 
<42> <0062> — 'B' → b 
<43> <0043> — 'C' → C 
<44> <0044> — 'D' → D 
<45> <0065> — 'E' → e 
<49> <0069> — 'I' → i 
<4C> <006C> — 'L' → l 
<4D> <004D> — 'M' → M 
<4E> <006E> — 'N' → n 
<50> <0050> — 'P' → P 
<52> <0072> — 'R' → r 
<53> <0053> — 'S' → S 
<54> <0074> — 'T' → t 
<D9> <00F9> — 'Ù' → ù 

(я только извлекали отображения из символьных кодов, которые в WinAnsiEncoding представляют собой заглавные буквы.)

Есть ли лучший способ сохранить собственный файл (InDesign) в формате pdf, который позволит улучшить извлечение шрифта?

Извините, я не вдаваюсь в InDesign. Но это программное обеспечение из Adobe I было бы удивительно, если бы это было ошибкой InDesign или его экспорта в PDF. Возможно ли это в том, что в файле InDesign есть некоторая информация, которая содержит теги PELLE PI' BELLA как Pelle Più bella, который InDesign затем в экспорте PDF переводит на это отображение ToUnicode?

Имеет ли это отношение к шрифтам, отличным от юникода, и если да, есть ли альтернатива, которая не требует от владельца выбора разных шрифтов?

В случае Вашего образца документа есть три шрифтов, все из них с Encoding записи WinAnsiEncoding, все из них вложенной подмножество, но только две таких смешных ToUnicode отображения, DIN -Medium и DIN-Bold, в то время как у Helvetica нет ToUnicode картирование. Так что это как-то связано с шрифтом. Как точно я не могу сказать.

Обходной в случае Вашего образца документа будет удалить в ToUnicode отображение из шрифтов словарей.

Например с помощью Java и библиотеки IText вы можете сделать это так:

PdfReader reader = new PdfReader(INPUT); 
for (int i = 1; i <= reader.getXrefSize(); i++) 
{ 
    PdfObject obj = reader.getPdfObject(i); 
    if (obj != null && obj.isDictionary()) 
    { 
     PdfDictionary dic = (PdfDictionary) obj; 
     if (PdfName.FONT.equals(dic.getAsName(PdfName.TYPE))) 
     { 
      dic.remove(PdfName.TOUNICODE); 
     } 
    } 
} 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(OUTPUT)); 
stamper.close(); 
reader.close(); 

После этой манипуляции Adobe Reader результаты извлечения текста в

PELLE PIÙ BELLA 

Это, очевидно, работает только в тех ситуациях, как и один в вашем образце документа.

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

+0

Спасибо, что это очень полезная информация. У вас есть какие-либо советы по наилучшему кодированию pdf-файлов для извлечения шрифтов? Похоже, существует так много типов кодирования. Я понимаю, что кодировка зависит от типа шрифта. Будет ли файл .ps работать лучше, чем PDF? Позволит ли дистиллятор диктовать, как кодировать встроенные шрифты? – Kremlito

+0

Кроме того, какой инструмент вы использовали для получения этой информации? Я использовал несколько скриптов, но не смог собрать ту же информацию. Я очень ценю вашу помощь с этим. – Kremlito

+1

* любые советы по наилучшему способу кодирования pdf-файлов для извлечения шрифтов * - ну, я бы ожидал, что InDesign будет правильно экспортировать в PDF. Таким образом, вы должны сначала изучить, что делает InDesign экспортировать эти странные сопоставления. Инструмент, который я использовал, - это браузер объектов PDF, iText RUPS в моем случае. Очевидно, что некоторые знания о внутренних документах PDF также важны. – mkl

0

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

Есть ли лучший способ сохранить собственный файл (InDesign) в формате pdf, что позволит улучшить извлечение шрифтов?

Запросить поставщика файлов для экспорта RTF. Это сохранит все используемые шрифты и форматирование.

Проблема с WELD-сваркой может быть вызвана шрифтом (если он содержит как верхний, так и нижний регистр, сопоставленный с одним и тем же глифом), использование функции OpenType, такой как All Capitals, или даже что-то вроде плохо созданного текста, только поток внутри PDF.

+0

Пример проблемы можно найти http://goo.gl/ZGg1r – Kremlito

+0

Не больше? Просто, когда я получил пять минут, чтобы проверить это ... – usr2564301

+0

Ссылка должна работать сейчас. Я только что проверил его – Kremlito