ghostscript - PostScript 执行程序的用户交互

标签 ghostscript postscript user-interaction

我正在用 PostScript 构建一个应用程序,需要在提示时从用户处获取输入(我将使用 GhostScript 执行程序,并且文件不会发送到打印机)。我在 PostScript 语言引用手册中看不到任何表明这是可能的内容,而且我不想回到执行人员那里,那么这可能吗?

最佳答案

事情并没有那么绝望!但这也并不容易。除了 %stdin 之外,还有两个特殊文件可供您读取。 (%lineedit)(r)file dup bytesavailable string readstring pop 将从标准输入读取一行到字符串中。还有 (%statementedit) 文件,该文件将一直读取,直到键入语法上有效的后记片段(加上换行符)。这将匹配括号和花括号,但不匹配方括号。在阅读之前,您应该发出类似 (> )printlush 的提示。

还有一件事,您可以通过将所有这些包装在 stopped 上下文中来捕获 ^D。

{ %stopped
    (> )print flush
    (%lineedit)(r)file
    dup bytesavailable string readstring pop
} stopped not {
    (successfully read: )print
    print
}{
    (received EOF indication)print
}ifelse

您可以使用它来廉价地检测空输入行,而不是在读取字符串后弹出该 bool 值。另请注意,在 EOF 上触发的停止来自 file 中的错误(ghostscript 将其称为 /invalidfilename),但尽管定义了 file作为一个操作符,操作符应该在发出错误信号时将它们的参数推回到堆栈上,我注意到 Ghostscript 不一定会这样做(我忘记了它留下了什么,但它不是像你期望的那样 2 个字符串) ,因此您可能需要将 mark 放在前面,将 cleartomark pop 放在整个 block 后面。

特殊文件(%lineedit)(%statementedit)(如果可用)将成功处理退格键和control-U以及可能的其他控制。我相信真正的 Adob​​e 打印机会用某种状态消息响应 ^T。不过我没见过。

PS。 :!

我的 postscript debugger 中有一个更广泛的交互式后记示例。这是a better version of the debugger ,但作为示例可能不太有用。

关于ghostscript - PostScript 执行程序的用户交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7312814/

相关文章:

php - 如何从pdf中提取文本层和背景层?

linux - 想通过编程将doc转成ps格式

iOS 导航栏功能正常,但颜色错误

javascript - 交互js "hold"灵敏度

Java 直接打印到 Postscript 网络打印机

ios - 从 ios 中的另一个 View 禁用 UIview 元素

c# - 在服务器端 c# 打印 html 或 pdf

linux - Ghostscript 无效字体错误

pdf - 通过将 PDF 中的所有字体转换为轮廓形状来替换它们

python - 使用 python 的 win32print 模块打印 PDF 文档?