是否有可能通过 pdf 阅读器读取 rubyzip 中的 pdf 文件?



可以通过pdf阅读器读取zip文件中的PDF文件吗?我尝试了这段代码,但它不起作用。

require 'zip'
Zip::File.open('/path/to/zipfile') do |zip_file|
zip_file.each do |entry|
if entry.directory?
puts "#{entry.name} is a folder!"
elsif entry.symlink?
puts "#{entry.name} is a symlink!"
elsif entry.file?
puts "#{entry.name} is a regular file!"
reader = PDF::Reader.new("#{entry.name}")
page = reader.pages.each do |page|
puts page.text
end
else
puts "#{entry.name} is something unknown"
end
end
end

谢谢

>PDF::Reader根据 2 个条件验证输入是"类似 IO 的对象或文件名"。

  • 根据响应seekread的对象确定它是否"类似 IO">
  • 根据File.file?确定它是否为File

摘录来源:

def extract_io_from(input)
if input.respond_to?(:seek) && input.respond_to?(:read)
input
elsif File.file?(input.to_s)
StringIO.new read_as_binary(input)
else
raise ArgumentError, "input must be an IO-like object or a filename"
end
end

不幸的是,虽然Zip::InputStream很好地模拟了IO对象,但它没有定义seek因此它没有通过上面的验证。您可以做的是从Zip::InputStream的内容创建一个新StringIO

StringIO.new(entry.get_input_stream.read)

这将保证PDF::Reader将其视为"类似 IO 的对象"并对其进行适当处理。

相关内容

  • 没有找到相关文章

最新更新