You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

技术咨询:能否使用pdf-reader读取Zip压缩包内的PDF文件?

可以用pdf-reader读取Zip压缩包内的PDF文件!

你的代码没法正常运行的核心问题是:你传给PDF::Reader.new的entry.name只是压缩包内的文件名称,并不是文件的实际内容数据流——pdf-reader没法直接通过这个文件名找到并读取压缩包内部的文件。

修正后的代码示例

你需要通过Zip条目对象的get_input_stream方法获取文件的输入流,再把这个流传给PDF::Reader,这样就能正确读取压缩包里的PDF内容了:

require 'zip'
require 'pdf-reader'

Zip::File.open('/path/to/zipfile') do |zip_file|
  zip_file.each do |entry|
    next if entry.directory? || entry.symlink?

    # 只处理PDF文件,避免非PDF文件报错
    if entry.name.downcase.end_with?('.pdf') && entry.file?
      puts "#{entry.name} 是一个PDF文件,开始读取内容:"
      # 获取压缩包内文件的输入流
      entry.get_input_stream do |stream|
        reader = PDF::Reader.new(stream)
        reader.pages.each_with_index do |page, index|
          puts "--- 第 #{index + 1} 页内容 ---"
          puts page.text
        end
      end
    else
      puts "#{entry.name} 不是PDF文件,跳过处理"
    end
  end
end

关键改动说明

  • 新增了对PDF文件的判断(通过后缀名),避免尝试读取非PDF文件导致报错
  • 使用entry.get_input_stream获取文件的数据流,而不是直接用文件名
  • 用each_with_index来标注页码,让输出更清晰

额外提示

  1. 确保你已经安装了所需的gem:
    gem install zip pdf-reader
    
  2. 如果压缩包很大,这种流式读取的方式也能避免把整个文件加载到内存,性能更友好
  3. 可以考虑添加异常捕获(比如rescue PDF::Reader::MalformedPDFError),处理损坏的PDF文件情况

内容的提问来源于stack exchange,提问作者Tjax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:59:51