Ruby on rails 使用docsplit从内存中的文档中提取文本

Ruby on rails 使用docsplit从内存中的文档中提取文本,ruby-on-rails,ruby,attachment-fu,docsplit,Ruby On Rails,Ruby,Attachment Fu,Docsplit,使用gem,我可以从PDF或任何其他文件类型中提取文本。例如,使用以下行: Docsplit.extract_pages('doc.pdf') 我可以拥有PDF文件的文本内容 我目前正在使用Rails,PDF通过请求发送并保存在内存中。查看API和源代码,我找不到从内存中提取文本的方法,只能从文件中提取 是否有一种方法可以获取此PDF的文本,从而避免创建临时文件 我正在使用attachment\u fu如果有关系。如果内容是字符串,请使用创建一个类似文件的对象,IO可以读取。在StringI

使用gem,我可以从PDF或任何其他文件类型中提取文本。例如,使用以下行:

 Docsplit.extract_pages('doc.pdf')
我可以拥有PDF文件的文本内容

我目前正在使用Rails,PDF通过请求发送并保存在内存中。查看API和源代码,我找不到从内存中提取文本的方法,只能从文件中提取

是否有一种方法可以获取此PDF的文本,从而避免创建临时文件


我正在使用
attachment\u fu
如果有关系。

如果内容是字符串,请使用创建一个类似文件的对象,IO可以读取。在StringIO中,无论内容是真文本还是二进制,都是一样的

请看以下任一项:

new(string=""[, mode]) Creates new StringIO instance from with string and mode. open(string=""[, mode]) {|strio| ...} Equivalent to ::new except that when it is called with a block, it yields with the new instance and closes it, and returns the result which returned from the block. 新建(字符串=”“[,模式]) 使用字符串和模式从创建新的StringIO实例。 打开(字符串=”[,模式]{strio} 与::new等效,不同的是,当使用块调用它时,它将使用新实例生成并关闭它,然后返回从块返回的结果。
使用临时目录:

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')

其实这不是我想要的。Docspit需要一个文件路径作为输入,我不能从stringio获得它。输出也是一样。如果需要文件路径,则必须将其写入磁盘。Tempfile可以工作,或者是一个普通的
文件。写入
,然后是
文件。删除