Ruby-如何将EOF标记添加到PDF文件中或绕过PDF::Reader::MalformedPDFError:PDF不包含EOF标记

Ruby-如何将EOF标记添加到PDF文件中或绕过PDF::Reader::MalformedPDFError:PDF不包含EOF标记,ruby,file,pdf,mechanize,pdf-reader,Ruby,File,Pdf,Mechanize,Pdf Reader,我正在使用Mechanizeruby gem单击web上的按钮下载PDF文件并将其保存到本地文件系统 URL = "www.my-site.com" agent = Mechanize.new agent.pluggable_parser.pdf = Mechanize::File # FYI I have also tried Mechanize::FileSaver and Mechanize::Download here page = agent.get(URL) form = page

我正在使用
Mechanize
ruby gem单击web上的按钮下载PDF文件并将其保存到本地文件系统

URL = "www.my-site.com"
agent = Mechanize.new
agent.pluggable_parser.pdf = Mechanize::File # FYI I have also tried Mechanize::FileSaver and Mechanize::Download here

page = agent.get(URL)
form = page.forms.first
button = page.form.button_with(:value => "Some Button Text")

local_file = "path/to/file.pdf"
response = agent.submit(form, button)
response.save_as(local_file)
但是,当我尝试使用
PDF::Reader
gem读取此PDF文件时,我得到一个错误“PDF不包含EOF标记”

我可以在本地保存PDF并查看它,它看起来很好,但是
PDF::Reader
gem抱怨它缺少EOF标记

所以我的问题是:有没有一种方法可以在PDF中添加一个EOF标记,或者其他什么方法来绕过这个错误,这样我就可以解析PDF了

谢谢

相关(未回答)问题:

相关文件:

编辑:

我在下载的文件内容中间找到了EOF标记,后面是一些看起来很难理解的HTML文档。我想隔离PDF内容,然后对其进行解析,但仍然会遇到问题。以下是我正在使用的完整脚本:

问题似乎与您访问的网站有关:

在响应的末尾添加HTML数据

但是,您可以通过搜索第一个子字符串
%EOF
并删除之后的所有数据来截断响应

i、 e:

pdf\u data=result.body
pdf_data.slice!(0,pdf_数据索引(“%EOL”)。至_i+4)

如果(pdf_data.length)您尝试过在文档末尾添加EOF吗?怎么做?最好的方法是重新考虑正在保存的内容(
response.save(local_file)
)…但您可以尝试使用不同的Ruby阅读器(即CombinePDF或基于pdftk的阅读器)打开pdf然后看看他们是否能克服错误…虽然没有错误总比随时动态修复好。我得到了
ArgumentError:string包含空字节
。你能根据我的要点共享一个工作脚本吗?@s2t2我现在不在我的计算机旁,但这个问题听起来像是字符串编码问题。也许可以试试ch在操作字符串内容之前将其更改为二进制编码?
reader = PDF::Reader.new(local_file) # this also happens if I try to use PDF::Reader.new(response.body) and PDF::Reader.new(response.body_io) depending on the different pluggable_parser configurations mentioned above
#> PDF::Reader::MalformedPDFError: PDF does not contain EOF marker
pdf_data = result.body
pdf_data.slice!(0, pdf_data.index("%EOL").to_i + 4)
if(pdf_data.length <= 4)
   # handle error
else
   # save/send pdf_data
end