此 PDF 是否包含 PostScript?

Does this PDF contain PostScript?

使用 PyPDF2 读取带有一些线条图的 pdf 文件,使用如下代码

from PyPDF2 import PdfFileReader

with open('temp.pdf','rb') as f:
    pdf = PdfFileReader(f)
    for page in pdf.pages:
        print page['/Contents'].getData()

我看到的页面内容是这样的:

q 0.24 0 0 0.24 0 0 cm
/R7 gs
8.5 w
1 J
1 j
0 0 0 RG
2361 118.961 m
2361 3388.96 l
S
2361 3388.96 m
118 3388.96 l
S
...

对我来说这看起来像 PostScript,使用运算符的别名(如果我错了请纠正我)。

其中一些别名我相信我可以破译,例如mlS 在我看来分别像 newpath movetolinetostroke。但是,如果我可以查看别名定义 (bind def),我认为它必须存在于文件开头的某处,那将是一个很大的帮助。

我想这应该不难,如果你知道怎么做,但我无法找到如何使用 PyPDF2 访问此后记 header 信息(尽管阅读了文档和搜索网络,包括 Whosebug)。

有人可以告诉我吗?还是我完全走错了路?

我觉得这不像 PostScript,它看起来像 PDF。由于您正在阅读 PDF 文件,这不足为奇! :-)

由于它不是 PostScript,因此不会有带有过程定义的序言。

您可以在 PDF 参考手册中找到运算符定义,该手册可以通过 Google 搜索找到。不要阅读 ISO 规范(无论如何你都不应该得到它,因为它有版权并且必须付费),而是阅读 Adob​​e 规范,它更容易。

FWIW q 是 gsave(Q 是 grestore)而 cm 是 concat 矩阵(即 concat)。 RG 是 setrgbcolor。 w、j 和 J 在图形状态中为 linewidth、linecap 和 linejoin 设置条目,gs 设置为扩展图形状态,实际上没有 PostScript 等效项。