如何在c#中解码扁平解码流

本文关键字:解码 | 更新日期: 2023-09-27 18:04:03

嗨,我正在尝试解码pdf文件的flatedecode流。我如何在c#中做到这一点?谢谢你的回答。

我要做的是解码,例如像这样的流:

    <</Filter[/FlateDecode]/Length 18446>>
stream
xœíÜ=K[aÇáã‹/qE8YÐÅ‚]¤‘b'‡
qn]ܺ6ÁFJ÷
u'+ˆ[>@¶Ìš€Ål]„‚C&%ÖóNä¾®éÿóÍï~r×:Lþi”—^ž½H   €!×è~y~”×ï?ì    Ãnwfz<=
<|œßÈ{   ¹ïëoŠéû¯ŸÇó   d®ÔïUÒ[@{Ðœ­æ½   È'G0    B   €X    Á    F0    b   €X    –Ò—?§b¡Ñ{5ù®5:—l®ü˜,ußn½®ý®Í$ ðßÜþÚ¾¸YÜûyµzº~pÿw9ïA  Õ»j   Šš    Ä¢&    ±”ú½Jzhš³Õ¼×    ™ë   @(‚   ‹`    Ä"    Á   @,‚   ‹`    ÄrÜï5žO•öàzj"  Z#ë—­µ'ç>Q
endstream

如何在c#中解码扁平解码流

如果您有剪切的流(作为18446二进制字节,而不是上面看到的文本),那么将剪切的文件通过zlib- flatate传递。

qpdf-11.3.0-msvc32'bin'zlib-flate.exe -uncompress <fonts_woff.flate

不同但典型的"结果";在控制台,持续了很长时间:-)

/GSa gs /CSp cs /CSp CS
0.750000000 0 0 -0.750000000 9.75000000 832.250000 cm
q q
Q
Q q
q
Q
q
0.960000000 0 0 0.960000000 0 0 cm
/CSp cs 0 0 0 scn
/GSa gs
0 0 0 SCN
1 w 0 J 2 M 0 j []0  d
Q
Q q
0 0 m
766.080006 0 l
766.080006 1095.71724 l
...

保存为文件

zlib-flate.exe -uncompress <fonts_woff.flate>inflated.txt

要在上下文中看到这样的流,可以使用一个标准的平减/膨胀器

  • MuPDF Mutools(非自由/开源软件,用于私人使用或许可)
  • PDFtk(特别低成本的服务器商业版本)
  • qpdf包含以上zlib-flate(可用于商业项目的自由/开源软件)