在PDF页面中,回车符前的ASCII字符代表什么?

时间:2018-12-23 14:18:34

标签: pdf encoding

这可能是一个相当基本的问题,但是我在弄清楚它时遇到了一些麻烦,这可能对将来的访问者有用。

我想获取PDF文件中的原始数据,并且我设法使用Python库PyPDF2和以下命令来解码页面:

import PyPDF2
with open('My PDF.pdf', 'rb') as infile:
    mypdf = PyPDF2.PdfFileReader(infile)
    raw_data = mypdf.getPage(1).getContents().getData()
    print(raw_data)

看看提供的原始数据,我开始怀疑回车符之前的ASCII字符很重要:我见过的每一个回车符都带有一个。似乎它们可能是某种令牌标识符。我已经发现/RelativeColorimetric与序列ri\r相关联。我目前正在浏览PDF 1.7 standard Adobe provides,并且我知道在那里有一个解释,但是在该文档的756页庞然大物中我还找不到它< / p>

1 个答案:

答案 0 :(得分:1)

这里定义的不是\r –只是插入而不是为了可读性的规则空间–而是ri 是运算符的事实。

>

PDF内容流使用基于堆栈的波兰语表示法语法:value1 value2 ... valuen operator

例如,第{127页}的表57中说明了ri的完整语法:

  

意图 ri (PDF 1.1)在图形状态下设置颜色呈现意图(请参见8.6.5.8,“呈现意图”)

并且想法是,它确实按此顺序出现在内容流中。 (...我试图找到一个正在使用的ri的适当示例,但找不到一个;甚至在您引用的ISO PDF本身中也找不到。)

其他地方的随机流摘要:

q
  /CS0 cs
  1 1 1 scn
  1.5 i
  /GS1 gs
  0 -85.0500031 -14.7640076 0 287.0200043 344.026001 cm
  BX
  /Sh0 sh
  EX
Q

(缩进来自我自己的PDF阅读器)显示操作数/CS01 1 11.5等),以及为了清楚起见,请在每行末尾添加csscni等)

7.8.2内容流中对此进行了解释:

  

...
  在使用任何指定的过滤器解码后,内容流应根据第7.2节“词汇约定”中所述的PDF语法规则进行解释。它由表示操作数和运算符的PDF对象组成。 运算符所需的操作数应在流中位于其前面。有关内容流的示例,请参见7.4中的示例4,“过滤器”。
  (我的重点)

7.2.2字符集指定在内容流中,空格字符(例如tab,换行符和回车符)就是这样的:分隔符,并且可以在任何位置以任何数字出现(> = 1)在操作数和运算符之间。它提到

  

注释此标准中的示例使用一种约定将令牌按行排列。但是,示例将空格用于缩进的目的仅仅是为了说明的清楚,在实际使用中不必包括在内。

–我可以添加 most 的PDF创建软件,实际上是试图用操作符-操作符序列和返回符来定界“行”。