理想情况下,我想避免使用宝石,因为我目前正在使用:pdf-reader
,combine-pdf
和origami
每颗宝石,如果遇到损坏的pdf,有时不会发送异常,但会停留在该处并且不执行任何操作。
因此,我想请您提供代码帮助我,以查看文件是否已损坏。
我注意到某些pdf文件没有十六进制(hex 25 50 44 46 | %PDF)
,但恐怕这不是通用解决方案。
除了所有这些宝石有时甚至在pdf正常工作时也会引发异常,但是至少如果我确定pdf正常工作,我就会知道该怎么做。
我可以从这里开始。如何使用红宝石读取十六进制?是检查pdf的唯一方法吗?
答案 0 :(得分:1)
在用ruby验证grub引导加载程序之前,我遇到过这种情况。我发现最简单的解决方案是对我知道应该存在的十六进制进行预检查。与此类似:
result = `hexdump pdf_file.pdf | head -n 1`
valid_pdf = result.split(" ")[1..2] == ["2550", "4446"]
随着时间的流逝,您可以扩展支票以提前查找其他不良的pdf。
一种避免使用pdf挂起的锁的好方法是使用Timeout
functionality in ruby,这样您就可以正确退出而不必强行关闭程序。
答案 1 :(得分:-1)
result = IO.binread('file.pdf', 4).unpack("H*").first
valid_pdf = result == '25504446'
将对前4个字节进行比较