微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试从pdf解压缩外部参照流-收到“错误不正确的标头检查”

如何解决尝试从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 举报,一经查实,本站将立刻删除。