可以通过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 的对象或文件名"。
- 根据响应
seek
和read
的对象确定它是否"类似 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 的对象"并对其进行适当处理。