无法解压缩 PDF 规范的内容流
Cannot decompress content stream of PDF specifications
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'.
开头
该文档已加密,如果您在文本编辑器中打开,您会看到它在最后 5 行包含 /Encrypt 126988 0 R
,这可能就是您得到这些废话的原因。你必须先解密它,然后才能解压。您可以在第 7.6
节中发布的同一文档中阅读有关 pdf 加密的更多信息
规范中的流对象说明如下:
在某些上下文中,字符串或流对象的内容(数据)被解释为 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);
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'.
开头该文档已加密,如果您在文本编辑器中打开,您会看到它在最后 5 行包含 /Encrypt 126988 0 R
,这可能就是您得到这些废话的原因。你必须先解密它,然后才能解压。您可以在第 7.6
规范中的流对象说明如下: 在某些上下文中,字符串或流对象的内容(数据)被解释为 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);