用python解压并保存PDF格式的zlib数据
我们每天都会收到PDF文件,我们需要把图像拿出来。例如,我想做的是使用python将图像从中恢复。我们得到的大多数pdf文件都是多页的,我们希望将每个嵌入的图像导出到单独的文件中。大多数都有jpeg文件,但他的一个没有 对象5作为zlib压缩流嵌入。我很确定它是zlib压缩的,因为它被标记为FlateCode,流的开始是\x78\x9c,这是zlib的典型特征。你可以看到(部分) 问题是,如何“放气”并保存生成的文件用python解压并保存PDF格式的zlib数据,python,pdf,zlib,Python,Pdf,Zlib,我们每天都会收到PDF文件,我们需要把图像拿出来。例如,我想做的是使用python将图像从中恢复。我们得到的大多数pdf文件都是多页的,我们希望将每个嵌入的图像导出到单独的文件中。大多数都有jpeg文件,但他的一个没有 对象5作为zlib压缩流嵌入。我很确定它是zlib压缩的,因为它被标记为FlateCode,流的开始是\x78\x9c,这是zlib的典型特征。你可以看到(部分) 问题是,如何“放气”并保存生成的文件 谢谢你分享你的智慧。我到处找,尝试了很多东西,但都没能找到工作。我设法像这样解
谢谢你分享你的智慧。我到处找,尝试了很多东西,但都没能找到工作。我设法像这样解压数据:
import zlib
with open("MDL1703140088.pdf", "rb") as f:
pdf = f.read()
image = zlib.decompress(pdf[640:69307])
640是zlib页眉(b'x\x9c'
)位置,69307是类似pdf规范页脚的位置。b'\nendstream\n'
在那里。详细信息见,可以找到一些有用的问答。但在这种情况下可以省略结束位置,因为它似乎忽略了以下非压缩数据。您可以通过以下方式对此进行验证:
decomp = zlib.decompressobj()
image = decomp.decompress(pdf[640:])
print(decomp.unused_data) # starts from b'\nendstream\n
到目前为止还不错。但是,当我将图像
写入PNG文件时,任何图像查看器都无法读取该文件。实际上,解压后的数据到处都是空的。我附加了一些PNG标题,但没有运气。嘿,太多了
正如我之前所说(奇怪的是,我的评论被人删除了),你最好使用一些其他现有的工具。如果Acrobat不是你的选择,那怎么办
pdftopng MDL1703140088.pdf。
完美地为我提供了一个有效的PNG文件。显然,您可能知道,命令行工具可以在Python中执行。是的,我们每天都会收到几十个pdf文件,其中至少有四页。我们需要自动提取,相信我,你检查过了吗?是的,当我尝试使用wand(最简单的)时,我的整个macbook无缘无故地崩溃了。而且,我也不允许在服务器上安装额外的库,因为它将被部署到服务器上。所以,我用它来提取jpg文件,但是带有“\x78\x9c”的图像我不知道该怎么做。服务器有inkscape吗?它可以在命令行模式下运行。不,它不能,我也不能安装iet:(使用pdftopng是一个好主意。当然。但是(总是有一个但不存在;D)我不能在它将运行的服务器上添加库或工具。服务器不是我们的:(