我试图访问http://www.orimi.com/pdf-test.pdf来测试是否存在"PDF“。
这是我的密码:
it 'pdf test' do
visit 'http://www.orimi.com/pdf-test.pdf'
puts page.title
sleep 5
convert_pdf_to_page
expect(page).to have_content 'PDF Test File'
end
def convert_pdf_to_page
temp_pdf = Tempfile.new('pdf')
temp_pdf << page.source.force_encoding('UTF-8')
reader = PDF::Reader.new(temp_pdf)
pdf_text = reader.pages.map(&:text)
temp_pdf.close
page.driver.response.instance_variable_set('@body', pdf_text)
end但我得到了:
PDF::Reader::MalformedPDFError: PDF does not contain EOF marker我搜索了一下,发现问题可能是PDF文件。我检查了temp_pdf变量,只有一个空体的HTML。
我的代码有什么问题吗?
发布于 2020-01-06 15:34:48
PDF是一种棘手的格式,不同的读者对PDF文件中的意外内容有不同的反应。有些人会崩溃,有些人会假设不会崩溃。
我猜这就是这里发生的事。当您在browser/pdf阅读器中打开文件时,它可以工作,但是PDF::Reader不能处理任何不符合标准的内容。
尝试使用不同的宝石,折纸似乎有很好的意见。我用你的档案试过了,看起来很管用:
> require 'origami'
> pdf = Origami::PDF.read '/tmp/pdf-test.pdf'
> pdf.grep(/Not existing/).any?
=> false
> pdf.grep(/PDF Test File/).any?
=> true供参考(我是如何想出这个答案的):
我在谷歌上搜索了PDF::Reader::MalformedPDFError: PDF does not contain EOF marker并找到了这条线,这表明这是“工作”PDF的一个更常见的问题。最后一条消息建议使用折纸,它(在检查后)似乎能够处理有关的PDF。
https://stackoverflow.com/questions/59585872
复制相似问题