stream
{ 360 mul sin
2 div
exch 360 mul sin
2 div
add
}
endstream
有人可以向我解释一下这个语法吗?
这在我看来不像 PDF:
stream
并且endstream
是PDF关键字,是的。
但其余的看起来更像 PostScript。
因此stream
,endstream
也可以是 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 是一种基于堆栈的语言,通过考虑使用“逆波兰表示法”约定的袖珍计算器来理解其代码将有助于您围绕这个主题展开思考......
它是一个后记程序,它在原始数据上执行以提供最终值。您将需要一个 Postscript 解析器来处理它