无法解压缩PDF规范的内容流

时间:2019-03-14 12:13:10

标签: c# pdf compression deflate

PDF Specification第一页的内容流包含单词stream,后跟CR LF,后跟字节:9A FC 2C 16 E1 DB 83 80 92 08 82 AD 7A A1 ...。过滤器为FlateDecode。流对象位于位置0x4312

我无法解码。我得到一些废话,然后抛出异常。我尝试过:

  • .NET的DeflateStream
  • DotNetZip的DeflateStream
  • DotNetZip的Zlib流
  • 我的LZW解码器(在其他地方测试)
  • 我的DeflateStream(在其他地方测试)
  • 跳过前2个字节,如其他地方建议的

PDF在Acrobat中打开。 Acrobat Preflight显示内容流以“ BT”开头。

2 个答案:

答案 0 :(得分:3)

该文档已加密,如您所见,如果您在文本编辑器中打开文档,并且在最后一行的第5行中包含/Encrypt 126988 0 R,这可能就是您胡说八道的原因。您必须先对其解密,然后才能进行解压缩。您可以在发布的同一文档中的7.6小节中阅读有关pdf加密的更多信息

答案 1 :(得分:0)

规范中的流对象说明如下: 在某些上下文中,字符串或流对象的内容(数据)在PDFDocEncoding或UTF-16字符集中被解释为字符代码。

我使用以下方法获取价值:

            string pattern = "begin=\"(?'begin'[^\"]+)";
            string stream = "stream<?xpacket begin=\"\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>";

            Match match = Regex.Match(stream, pattern);
            string begin = match.Groups["begin"].Value;
            byte[] beginBytes = Encoding.Unicode.GetBytes(begin);