2013-10-09 4 views
2

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

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

Например, если мой pdf-файл имеет простую таблицу с тремя столбцами и двумя строками. (Значение строки заголовка является Имя, Адрес, Возраст) и значение первого ряда является (Arun, Hoskote, 22), и когда U запустить рубин следующего рубинового скрипта

receiver = PDF::Reader::RegisterReceiver.new 
reader = PDF::Reader.new("Arun.pdf") 
reader.pages.each do |page| 
    page.walk(receiver) 
    receiver.callbacks.each do |cb| 
     puts cb.inspect 
    end 
end 

Он печатает серию обратных вызовов, среди которых некоторые из интересные обратные вызовы show_text_with_positioning походили следующие

{:name=>:show_text_with_positioning, :args=>[["N", 5, "am", -4, "e"]]} 
{:name=>:show_text_with_positioning, :args=>[[" "]]} 
{:name=>:show_text_with_positioning, :args=>[["Ad", 6, "d", 3, "ress"]]} 
{:name=>:show_text_with_positioning, :args=>[[" "]]} 
{:name=>:show_text_with_positioning, :args=>[["Age"]]} 
{:name=>:show_text_with_positioning, :args=>[[" "]]} 
{:name=>:show_text_with_positioning, :args=>[["Ar", 4, "u", 3, "n"]]} 
{:name=>:show_text_with_positioning, :args=>[[" "]]} 
{:name=>:show_text_with_positioning, :args=>[["H", 3, "o", -5, "sk", 9, "o", -5,  "te"]]} 
{:name=>:show_text_with_positioning, :args=>[[" "]]} 
{:name=>:show_text_with_positioning, :args=>[["22"]]} 
{:name=>:show_text_with_positioning, :args=>[[" "]]} 

из приведенных выше обратных вызовов, что же арг представляют относительно PDF-файл? Если я хочу извлечь только одно имя, которое является «Arun» (здесь все может сюда приходить) или возрастное значение i, e '25' (любое значение может прийти сюда) здесь, в этом примере, как я могу это сделать в рубиновой программе? Есть ли какой-либо PDF-парсер API или Ruby API, чтобы получить только одно «интересное» значение (ы) из файла pdf?

Как я могу написать программу Ruby для доступа к определенному обратному сообщению, которое меня интересует, которое дает мне текст, который я хотел?

ответ

0

Если вы особенно хотите только текст, вы можете сделать что-то подобное (но, возможно, с использованием другого потока в качестве цели для текста):

receiver = PDF::Reader::TextReceiver.new($stdout) 
PDF::Reader.file("Arun.pdf", receiver) 

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

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