Извлечение текста из документа в память с помощью docsplit

С помощью docsplit gem я могу извлечь текст из PDF или любого другого типа файла. Например, со строкой:

 Docsplit.extract_pages('doc.pdf')

Я могу иметь текстовое содержимое файла PDF.

В настоящее время я использую Rails, и PDF отправляется через запрос и живет в памяти. Глядя в API и в исходном коде, я не мог найти способ извлечь текст из памяти, только из файла.

Есть ли способ получить текст этого PDF, избегая создания временного файла?

я использую attachment_fu если это имеет значение.

2 ответа

Используйте временный каталог:

require 'docsplit'

def pdf_to_text(pdf_filename)
  Docsplit.extract_text([pdf_filename], ocr: false, output: Dir.tmpdir)

  txt_file = File.basename(pdf_filename, File.extname(pdf_filename)) + '.txt'
  txt_filename = Dir.tmpdir + '/' + txt_file

  extracted_text = File.read(txt_filename)
  File.delete(txt_filename)

  extracted_text
end

pdf_to_text('doc.pdf')

Если у вас есть содержимое в строке, используйте StringIO, чтобы создать подобный Файлу объект, который IO может прочитать. В StringIO не имеет значения, является ли содержимое истинным текстом или двоичным, все одинаково.

Посмотрите на любой из:

новый (string=""[, mode])
Создает новый экземпляр StringIO со строкой и режимом.

open(string=""[, mode]) {|strio| ...}
Эквивалентен::new за исключением того, что когда он вызывается с блоком, он возвращает новый экземпляр, закрывает его и возвращает результат, возвращенный из блока.
Другие вопросы по тегам