如何使用Ruby将二进制形式存储的PDF文件转换为可正常读取的PDF
Ruby实现DATA.TXT转可用PDF方案
核心问题说明
之前操作失败的核心原因通常是两类:一是读写二进制文件时未使用二进制模式,默认文本模式的编码转换、换行符自动处理破坏了PDF结构;二是DATA.TXT头尾存在非PDF格式的冗余字节,导致PDF解析器无法识别。
实现步骤
第一步:前置校验(可选)
先确认原始文件是否包含合法PDF标识,PDF规范要求文件必须以%PDF-开头,以%%EOF结尾:
File.open("DATA.TXT", "rb") do |f| header = f.read(10) puts "原始文件头:#{header}" puts "是否含合法PDF头:#{header.start_with?("%PDF-")}" end
第二步:完整转换代码
自动提取有效PDF二进制段并输出:
# 二进制读取原始文件全部内容 raw_content = File.binread("DATA.TXT") # 定位PDF有效内容起始位置 pdf_start_pos = raw_content.index("%PDF-") raise "原始文件未检测到PDF头,无有效PDF内容" unless pdf_start_pos # 定位PDF有效内容结束位置 pdf_end_pos = raw_content.rindex("%%EOF") raise "原始文件未检测到PDF结束标记,PDF内容不完整" unless pdf_end_pos # 截取完整PDF二进制内容(额外多取5字节兼容部分PDF末尾的冗余换行) valid_pdf = raw_content[pdf_start_pos..pdf_end_pos + 5] # 二进制写入输出PDF文件 File.binwrite("converted_result.pdf", valid_pdf) puts "转换完成,输出文件:converted_result.pdf"
结果校验
转换完成后可通过pdf-reader gem验证文件有效性:
require "pdf/reader" reader = PDF::Reader.new("converted_result.pdf") puts "PDF有效页数:#{reader.page_count}" puts "PDF元信息:#{reader.info.inspect}"
如果可正常输出页数,说明文件转换成功,若仍无法用Adobe Reader打开,可尝试更换其他PDF阅读器验证。
内容的提问来源于stack exchange,提问作者Sakhi Manti
相关产品推荐
相关产品推荐

