В Ruby Search PDF выделите найденный текст, экспортируйте JPG страницы - PullRequest
1 голос
/ 09 августа 2011

Я хотел посмотреть, сделал ли кто-нибудь это.

В ruby ​​я бы хотел открыть PDF-файл и найти там текст. Любой текст, который я нахожу, хотел бы выделить желтым цветом, а затем вернуть страницы, на которых я нашел текст в формате jpg. Кто-нибудь делал это раньше?

Спасибо, Craig

Ответы [ 2 ]

2 голосов
/ 10 августа 2011

Опция jruby или вызов jar через командную строку? В этом случае вы можете использовать библиотеку java iText и что-то вроде этих ответов

iText Search, Highlight, изображение результата

Можно ли найти положение текста с помощью iText

1 голос
/ 11 августа 2011

Если вы счастливы использовать c-extension, вы можете добиться этого с помощью привязок ruby-gnome2. Вам понадобятся гемы poppler и gdk_pixbuf2.

Документация по API для этих драгоценных камней немного скудна, но вы можете найти то, что есть в http://ruby -gnome2.sourceforge.jp /

require 'poppler'
require 'gdk_pixbuf2'

SCALE = 2

filename = "source.pdf"
doc = Poppler::Document.new(filename)
page = doc.get_page(0)

# render the page to an in-memory buffer
width, height = *page.size
buf = Gdk::Pixbuf.new(Gdk::Pixbuf::COLORSPACE_RGB, true, 8, width*SCALE, height*SCALE)
page.render(0, 0, width*SCALE, height*SCALE, SCALE, 0, buf)

# copy the rendered buffer into an pixmap for further editing
map = Gdk::Pixmap.new(nil, width*SCALE, height*SCALE, 24)
map.draw_pixbuf(nil, buf, 0, 0, 0, 0, -1, -1, Gdk::RGB::DITHER_NONE, 0, 0)

# setup highlight color and blend function
gc  = Gdk::GC.new(map) # graphics context
gc.rgb_fg_color = Gdk::Color.new(65535, 65535, 0)
gc.function = Gdk::GC::AND

# find each match and highlight it. The co-ordinate maths is ugly but
# necesary to convert from PDF co-ords to Pixmap co-ords
page.find_text("the").each do |match|
  matchx = match.x1 * SCALE
  matchy = (height - match.y2) * SCALE
  matchw = (match.x2-match.x1) * SCALE
  matchh = (match.y2-match.y1) * SCALE
  map.draw_rectangle(gc, true, matchx, matchy, matchw, matchh)
end

# save the buffer to a JPG
newbuf = Gdk::Pixbuf.from_drawable(nil, map, 0, 0, width*SCALE, height*SCALE)
newbuf.save("foo.jpg", "jpeg")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...