2013-04-23 2 views
-1

У меня есть набор pdf-файлов, из которых я хочу обрабатывать (VB.NET) только те, которые не доступны для текста, не могли бы вы рассказать мне, как это сделать?Как определить, является ли PDF доступным для текста или не текстовым, доступным для поиска?

+2

Что вы пробовали? Люди с большей вероятностью окажут помощь, если вы продемонстрируете некоторые усилия либо исследования/кода, либо еще лучшего, но оба. – jordanhill123

+0

Некоторые люди говорили о проверке свойства имени шрифта pdf-файла, но он кажется таким же, как для поиска, так и для нетекстового поиска. – Trupti

ответ

0

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

Вы можете проверить эту ссылку:

http://www.codeguru.com/columns/vb/manipulating-pdf-files-with-itextsharp-and-vb.net-2012.htm 

Вы должны прочитать свойства производителей сразу же после его исходили. Это всего лишь пример. Но мой совет, пожалуйста, укажите здесь свой код, чтобы мы могли попытаться помочь вам. Bless you

+0

Это огромная, но полезная, я пройду через нее. Благодарю. – Trupti

2

Вообще говоря, способ сделать это - открыть каждую страницу и разорвать поток контента и посмотреть, выполняются ли какие-либо текстовые операторы, размещающие текст на странице.

Позвольте мне объяснить, что это означает - PDF-документ - это небольшой язык RPN, который содержит операции, которые каким-либо образом отмечают страницу. Например, вы можете увидеть что-то вроде этого:

BT 72 400 Td /F0 12 Tf (Throatwarbler Mangrove) Tj ET 

Что означает:

  1. Начните текстовую область
  2. Установите положение текста базовой линии до (72, 400) в формате PDF единиц
  3. Установите шрифт ресурса с именем F0 от текущей страницы словаря ресурсов шрифта
  4. Draw текст «Throatwarbler Mangrove»
  5. Конец текстовой области

Таким образом, вы можете попробовать короткие порезы

  1. ли моя страница словаря ресурс содержит шрифты?

В некоторых случаях это не удастся, поскольку некоторые инструменты генерации PDF помещают шрифты в словарь и не используют их (ложноположительно). Он также будет терпеть неудачу, если содержимое страницы содержит объект формы XObject, который содержит текст (false negative).

  1. В потоковом потоке моей страницы есть операторы BT/ET?

Это поможет вам приблизиться, но не удастся, если в них нет содержания (ложно положительный), или если они отсутствуют, но есть объект формы XObject, который содержит текст (false negative).

Итак, нужно сделать весь поток контента всей страницы, включая рекурсию на всех XObject для поиска текстовых операторов.

Теперь есть другой подход, который вы можете использовать с помощью моего программного обеспечения Atalasoft (отказ от ответственности, я работаю для Atalasoft и написал большую часть кода обработки PDF, я также работал над версиями Acrobat 1-4). Вместо того, чтобы спрашивать, содержит ли эта страница какой-либо текст, вы можете спросить: «содержит ли эта страница только одно изображение?"

bool allPagesImages = true; 
using (Document doc = new Document(inputStream)) 
{ 
    foreach (Page p in doc.Pages) 
    { 
     if (!p.SingleImageOnly) 
     { 
      allPagesImages = false; 
      break; 
     } 
    } 
} 

Который оставит allPagesImages с довольно приличной признак того, что каждая страница имеет все изображения, которые, если вы хотите, чтобы OCR является не для поиска документов, вероятно, что вы действительно хотите.

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

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

Смежные вопросы