如何向PostScript脚本传递参数?GhostScript新手求助
给PostScript脚本传递参数的几种实用方法
嘿,刚接触PostScript和Ghostscript确实会有点摸不着头脑,我来给你分享几个不用把整个脚本塞进命令行的靠谱方法,轻松把PowerShell里的$par1传给你的pdfProc.ps~
方法1:用Ghostscript的-d/-s参数定义全局变量
这是最常用也最直观的方式,Ghostscript允许你通过-d(传递数值)或-s(传递字符串)参数,在PostScript的系统字典里定义变量,脚本里直接就能调用。
操作步骤:
- 修改PowerShell命令,在调用Ghostscript时追加参数:
- 如果
$par1是数值:gswin64c.exe -o "result.pdf" -sDEVICE=pdfwrite -dPar1=$par1 pdfProc.ps -f "input.pdf" - 如果
$par1是字符串(比如带空格的文本):gswin64c.exe -o "result.pdf" -sDEVICE=pdfwrite -sPar1="$par1" pdfProc.ps -f "input.pdf"
- 如果
- 在pdfProc.ps里使用参数:
直接通过变量名调用即可,比如:% pdfProc.ps % 可选:把全局变量存到本地变量,方便后续复用 /myParameter Par1 def % 示例:将参数打印到Ghostscript控制台 myParameter == % 接下来就可以用这个参数做你需要的处理,比如修改PDF内容、计算等
方法2:通过命令行位置参数传递
如果你不想用-d/-s,也可以把参数直接放在PostScript文件名后面,然后在脚本里通过argc(参数个数)和argv(参数数组)来获取。
操作步骤:
- 修改PowerShell命令:
注意:参数要放在gswin64c.exe -o "result.pdf" -sDEVICE=pdfwrite pdfProc.ps "$par1" -f "input.pdf"pdfProc.ps之后、-f input.pdf之前。 - 在pdfProc.ps里获取参数:
% pdfProc.ps % 先检查参数是否符合预期(argc包含Ghostscript程序名、脚本名和你的参数,所以预期值为3) argc 3 ne { (Error: 请传递一个参数!) == quit } if % 获取你传递的参数(argv[0]是程序名,argv[1]是脚本名,argv[2]是$par1) /myParameter argv 2 get def % 使用参数 myParameter ==
方法3:通过环境变量传递
还有一种灵活的方式,先在PowerShell里把$par1设为环境变量,再在PostScript脚本里读取它。
操作步骤:
- 在PowerShell里设置环境变量:
$env:MY_CUSTOM_PARAM = $par1 gswin64c.exe -o "result.pdf" -sDEVICE=pdfwrite pdfProc.ps -f "input.pdf" - 在pdfProc.ps里读取环境变量:
% pdfProc.ps % 读取环境变量 /MY_CUSTOM_PARAM getenv /myParameter def % 检查是否成功读取(环境变量不存在会返回null) myParameter null eq { (Error: 未找到环境变量MY_CUSTOM_PARAM) == quit } if % 使用参数 myParameter ==
小提示
- 如果参数里有空格、特殊字符,记得在PowerShell里用双引号把参数包起来,避免被拆分。
- 优先推荐方法1,因为它逻辑清晰,脚本里的变量名一目了然,不容易出错。
内容的提问来源于stack exchange,提问作者JIemON
相关产品推荐
相关产品推荐

