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

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

4

2 回答 2

2

这在我看来不像 PDF:

  • stream并且endstream是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 代码的解释仍然有效,在我看来,它就像描述半色调屏幕的“点函数”。(但是,stream在这种情况下,当然要保留它们作为 PDF 关键字的原始含义,并且需要endstream大括号{}来包含函数定义。)

由于这些 PostScript 函数对象的 PDF 规范不允许使用数组变量名称字符串,而只允许使用整数实数布尔值作为值,因此这些代码段的处理不需要完全成熟的 PostScript 解释器,并且规范中的此声明:

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

仍然适用,并且仍然使 PDF 语言与 PostScript(一种编程语言,PS 文件程序)有很大不同。

请记住,PostScript 是一种基于堆栈的语言,通过考虑使用“逆波兰表示法”约定的袖珍计算器来理解其代码将有助于您围绕这个主题展开思考......

于 2012-09-25T12:47:08.247 回答
2

它是一个后记程序,它在原始数据上执行以提供最终值。您将需要一个 Postscript 解析器来处理它

于 2012-09-25T13:41:35.190 回答