该PDF是否包含PostScript?

时间:2018-09-03 12:23:35

标签: python pdf postscript pypdf2

使用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访问此后记标题信息的方法(尽管阅读了文档并在网上进行了搜索,包括StackOverflow )。

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

1 个答案:

答案 0 :(得分:2)

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

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

您可以在《 PDF参考手册》中找到操作员定义,该参考可以通过Google搜索找到。不要阅读ISO规范(无论如何,您都无法获得它,因为它已受版权保护并且必须付费),而应该阅读Adobe规范,它更容易。

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