2015-02-01 4 views
0

Я пытаюсь извлечь заголовки из pdf-файлов. До сих пор я пытался прочитать простой текст и взять первую строку (которая не сработала, потому что в текстовом виде заголовки не были в начале) и просто прочитал текст из региона (который не работал, потому что регионы не всегда одинаковы).Извлечь текст из pdf в формате

Самый простой способ сделать это, на мой взгляд, читать только текст со специальным форматом (шрифтом, шрифтом и т. Д.). Есть ли способ сделать это?

+2

Вы не сообщаете нам, как вы пытаетесь извлечь текст из PDF. Если вы используете iTextSharp, этот вопрос является возможным дубликатом [Можно ли использовать стратегию извлечения текста после применения стратегии удаления местоположения в itextpdf?] (Http://stackoverflow.com/questions/24506830/can-we-use-text- экстракция-стратегия-после-нанесения-расположения-экстракционной-стратегия). В этом вопросе кто-то добавляет дополнительную стратегию экстракции, которая проверяет шрифт текста, который извлекается, чтобы фильтровать определенный текст из PDF. –

+0

* Есть ли способ сделать это? * - вы должны указать свою библиотеку PDF по выбору. Любая библиотека PDF, позволяющая извлекать текст, также должна позволять извлекать текст шрифтом или размером. – mkl

+0

Я не говорю, как я это делаю, потому что это не очень важно для решения. В этом случае я не против изменять используемую библиотеку. (Я использовал PdfSharp и PDFBox. У обоих вроде бы нет таких возможностей ...) – derBasti

ответ

1

Вы можете перечислить все текстовые объекты на странице PDF с помощью Docotic.Pdf library. Для каждого текстового объекта доступна информация о шрифте и размере объекта. Ниже приведен пример

public static void listTextObjects(string inputPdf) 
{ 
    using (PdfDocument pdf = new PdfDocument(inputPdf)) 
    { 
     string format = "{0}\n{1}, {2}px at {3}"; 

     foreach (PdfPage page in pdf.Pages) 
     { 
      foreach (PdfPageObject obj in page.GetObjects()) 
      { 
       if (obj.Type != PdfPageObjectType.Text) 
        continue; 

       PdfTextData text = (PdfTextData)obj; 

       string message = string.Format(format, text.Text, text.Font.Name, 
        text.Size.Height, text.Position); 
       Console.WriteLine(message); 
      } 
     } 
    } 
} 

код будет выводить строки, как следующее для каждого текстового объекта на каждой странице входного файла PDF.

FACTUUR 
Helvetica-BoldOblique, 19.04px at { X=51.12; Y=45.54 } 

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

Если ваш PDF гарантированно имеет заголовок в качестве верхнего текста на странице, чем вы можете использовать более простой подход

public static void printText(string inputPdf) 
{ 
    using (PdfDocument pdf = new PdfDocument(inputPdf)) 
    { 
     foreach (PdfPage page in pdf.Pages) 
     { 
      string text = page.GetTextWithFormatting(); 
      Console.WriteLine(text); 
     } 
    } 
} 

Метод GetTextWithFormatting возвращает текст в порядке чтения (т.е. от верхнего левого до правой нижней части должность).

Отказ от ответственности: Я являюсь разработчиком библиотеки.

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