从PDF流中提取图像

从PDF流中提取图像,pdf,Pdf,我有一个已解码的PDF流,没有其他内容,它包含两个不同的“部分”。第一部分是文本,我可以使用概述的解释对其进行解析。然而,第二部分基本上是一个长字符串和字母c,l,m。下面是一个小摘录: TJ ET BT 7.9701 0 0 7.9701 303.883 132.067 Tm /Ty18 1 Tf (1) Tj ET Q q /Cs1 cs 0 sc 217.8034 565.2423 m 216.5899 564.9437 215.4236 564.0896 214.8605 563.087

我有一个已解码的PDF流,没有其他内容,它包含两个不同的“部分”。第一部分是文本,我可以使用概述的解释对其进行解析。然而,第二部分基本上是一个长字符串和字母
c
l
m
。下面是一个小摘录:

TJ ET BT 7.9701 0 0 7.9701 303.883 132.067 Tm /Ty18 1 Tf (1) Tj ET Q q /Cs1 cs 0 sc 217.8034 565.2423 m 216.5899 564.9437 215.4236 564.0896 214.8605 563.0871

我不知道如何解析它。我的第一直觉是它可能是一个图像,但到目前为止我找到的文献让我认为它是一个二进制流。有没有办法找到它是什么?

这是一系列PDF操作。
cs
设置为颜色空间(在本例中为命名颜色CS1)
sc
设置为颜色,在本例中为0(实际含义取决于颜色空间),
m
移动到,
c
为曲线到,
l
为直线到,等等。

这是一系列PDF操作。
cs
设置为颜色空间(在本例中为命名颜色CS1)
sc
设置为颜色,在本例中设置为0(实际含义取决于颜色空间),
m
是移动到,
c
是曲线到,
l
是直线到,等等。

好的,有相关文档吗?我想建立一个解析器,这样我就可以把它翻译成实际的图像。或者我可以把它插入一个空白的pdf中吗?完整的pdf规范在线提供。你说的“翻译成图像”是什么意思"? 这是一系列绘制矢量图像的指令。你更大的目标是什么?你为什么要这样做?已经有很多PDF解析器了。@benwiggy,我一直在寻找,但没有找到这方面的文档。长话短说,我能够从损坏的pdf中提取流,我能够恢复文本,但现在尝试恢复图像,这是更大的目标。谷歌搜索“pdf规范”,最热门的是Adobe的pdf规范和pdf引用,其中包含所有操作符。内联图像操作符是BI/EI,图像数据位于BI和EI之间。引用的图像操作符是Do,它前面将有一个参数,该参数将是一个名称(例如/Im0)。然后需要查看页面字典资源字典,/Xobject键将有一个字典值,该值将包含图像名称。与该名称关联的值将是一个间接引用(例如10 0 R)。然后,您需要查看外部参照(这很复杂),并在对象10的文件中找到偏移量,生成编号为0。或者搜索10个obj。好的,太棒了,有相关文档吗?我想建立一个解析器,这样我就可以把它翻译成实际的图像。或者我可以在空白的pdf中插入它吗?完整的pdf规范可以在线获得。“把它翻译成图像”是什么意思?这是一系列绘制矢量图像的指令。你更大的目标是什么?你为什么要这样做?已经有很多PDF解析器了。@benwiggy,我一直在寻找,但没有找到这方面的文档。长话短说,我能够从损坏的pdf中提取流,我能够恢复文本,但现在尝试恢复图像,这是更大的目标。谷歌搜索“pdf规范”,最热门的是Adobe的pdf规范和pdf引用,其中包含所有操作符。内联图像操作符是BI/EI,图像数据位于BI和EI之间。引用的图像操作符是Do,它前面将有一个参数,该参数将是一个名称(例如/Im0)。然后需要查看页面字典资源字典,/Xobject键将有一个字典值,该值将包含图像名称。与该名称关联的值将是一个间接引用(例如10 0 R)。然后,您需要查看外部参照(这很复杂),并在对象10的文件中找到偏移量,生成编号为0。或者搜索10 0 obj。其中概述的解释有一个简化。除非你只处理非常简单的PDF文件,否则对你没有多大帮助。除非你只处理非常简单的PDF文件,否则它不会对你有多大帮助。