如何解决尝试从pdf解压缩外部参照流-收到“错误不正确的标头检查”
我正在尝试用JavaScript解析PDF中的外部参照流。我成功地隔离了流本身(我通过在调试模式下将其与PDF中的 steram 。和 endstream 标签之间的值进行比较来检查它是否还可以。
但是,当我尝试使用pako lib对其进行充气时,出现错误消息:错误的标头检查错误。
压缩方法是 FlateDecode ,可以从字典中看到。
这是有问题的代码:
const dict = pdfStr.slice(pdf.startXRef);
const xrefStreamStart = this.getSubstringIndex(dict,'stream',1) + 'stream'.length + 2;
const xrefStreamEnd = this.getSubstringIndex(dict,'endstream',1) + 1;
const xrefStream = dict.slice(xrefStreamStart,xrefStreamEnd);
const inflatedXrefStream = pako.inflate(this.str2ab(xrefStream),{ to: 'string' });
pdfStr is the whole PDF read as a string,while *pdf.startXRef* holds the value of the position of the xref stream object.
如果有人想看一下,这里是完整的PDF:https://easyupload.io/lzf9he
编辑:正如 mcernak 所建议的那样,我在流中包含/ r和/ n时遇到了问题。但是,现在我更正了代码,却遇到了另一个错误:无效距离太远了
解决方法
流内容位于stream\r\n
和\r\nendstream
之间。
您需要在开头和结尾都考虑到这两个附加字符(\r\n
),以读取正确的数据:
const dict = pdfStr.slice(pdf.startXRef);
const xrefStreamStart = this.getSubstringIndex(dict,'stream',1) + 'stream'.length + 2;
const xrefStreamEnd = this.getSubstringIndex(dict,'endstream',1) - 2;
const xrefStream = dict.slice(xrefStreamStart,xrefStreamEnd);
const inflatedXrefStream = pako.inflate(this.str2ab(xrefStream),{ to: 'string' });
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。