无法理解PDF函数(类型4)流语法

时间:2012-09-25 12:42:29

标签: pdf

stream
{ 360 mul sin
2 div
exch 360 mul sin
2 div
add
}
endstream

有人可以向我解释这个语法吗?

2 个答案:

答案 0 :(得分:2)

这对我来说不像PDF:

  • streamendstream是PDF关键字,是的。

  • 但其余部分看起来像PostScript。

所以streamendstream也可以是PostScript变量或函数,在同一代码的其他地方(之前)定义...


作为PostScript,代码意味着:

  • {}只是将代码结构化为块
  • 的分隔符
  • 360 mul sin:乘以360(乘以什么? =>堆栈中最顶层的值),计算结果的正弦值,并将其作为最上面的值叠加。
  • 2 div:将堆栈的最高值除以2.
  • exch 360 mul sin:交换堆栈中最顶层的2个项目,将现在最顶层的项目乘以360,计算它的正弦值并将其放回堆栈。
  • 2 div:将堆栈的最高值除以2.
  • add:在堆栈上添加2个最顶层的值。

<强>更新

哎哟!

我完全忘记了PDF规范在PDF文档中允许的(非常有限的)PostScript 函数对象的细节。这些代表了自包含和静态的数值转换。

所以我对PostScript代码作为计算器函数的上述解释仍然有效,在我看来,它描述了半色调网屏的“点函数”。 (但是,在此上下文中streamendstream当然会将其原始含义保留为PDF关键字,并且花括号{} 必需包含函数定义。)

由于这些PostScript函数对象的PDF规范不允许使用数组变量名称字符串< / em>,但只有整数 reals 布尔作为值,这些代码段的处理不需要完全成熟的PostScript解释器,以及规范中的这句话:

  

“PDF不是编程语言,PDF文件不是程序。”

仍然适用,并且使PDF语言与PostScript(这是编程语言,PS文件程序)非常不同。

请记住,PostScript是一种基于堆栈的语言,通过考虑使用'reverse Polish notation'约定的袖珍计算器来理解其代码,这将有助于您围绕这一主题进行思考......

答案 1 :(得分:2)

它是一个postscript程序,它对原始数据执行以提供结束值。你需要一个Postscript解析器来处理它