执行以下代码
%!PS-Adobe-2.0
%
/bdf { bind def } bind def
/ldf { load def } bdf
%
/cm { 28.3464566929134 mul } bdf
/icm { 28.3464566929134 div } bdf
%
/Helvetica findfont 20 scalefont setfont
%
/filespec (C:\\test1\\test2\\test3\\logo.eps) def
%
filespec status
{
4{pop}repeat (EXISTS! \n) print
gsave
2.0 cm 25.0 cm translate
0 0 moveto
{filespec (r) file}stopped{
(UPS!? DOES NOT EXIT! \n)print
}{
dup cvx exec
closefile
}ifelse
grestore
}{
(DOES NOT EXIT! \n)print
}ifelse
stroke
showpage
我接受了这个:
GPL Ghostscript 9.06 (2012-08-08)
Copyright (C) 2012 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Displaying non DSC file C:/__EDB__/test/zwi.ps
Loading NimbusSanL-Regu font from %rom%Resource/Font/NimbusSanL-Regu... 3486280 2151039 3424632 2124503 2 done.
EXITS!
UPS!? DOES NOT EXIT!?
好的,我做了一些更深入的调查:
使用“ GSview 5.0 2012-01-17 ”它失败了(双击zwi.ps)。
使用“ GPL Ghostscript 9.06(2012-08-08) ”是可以的;我得到了我的徽标(命令行)。
我正在使用64位Windows 7。
感谢所有人。
答案 0 :(得分:1)
我假设这是因为文件规范使用Windows,但Ghostscript不需要-dNOSAFER,除非在非常特殊的情况下。
NOSAFER只是阻止了SAFER的应用,NOSAFER旨在用于Ghostscript自己的启动例程,以允许它访问自己的文件(否则无法启动)。一般来说,你永远不应该使用NOSAFER。
我不明白为什么你的反向通道输出不与其他Ghostscript输出内联,你是从命令行还是从应用程序内部执行Ghostscript?
真正的问题是因为'file'返回错误,所以假设文件不存在。这是荒谬的。该文件可能存在,但权限可能会阻止Ghostscript打开文件进行读取。该文件可能具有阻止此操作的权限,或者可能是操作系统文件,或者该文件可能在另一个拒绝共享的应用程序中打开。
您可以使用上面的luser droog提供的代码来显示发生了哪个错误,或者只是在停止的上下文中不执行'file',以便恢复错误。而不是'undefinedfilename'(由文件不存在引起),我希望你会得到'invalidfileaccess'。
请注意,如果文件不存在,则PostScript程序会出错:
filespec status
{
...
}{
pop
(DOES NOT EXIT! \n)print
}ifelse
如果文件不存在,则status在堆栈上返回一个布尔值,值为'false',由ifelse使用。这意味着堆栈为空,当'else'子句执行'pop'时,您将收到stackunderflow错误。
答案 1 :(得分:0)
您可能需要为ghostscript指定选项-dNOSAFER
以启用文件操作。
为了支持在您的计算机上运行postcript文档(尽管它是代码)是“安全”的概念,许多解释器隐式禁止对OS文件执行所有操作(包含该程序的currentfile
除外)流,%stdin
,%stdout
和%stderr
。
您可以(我认为)通过检查status
是否引发错误来验证是否存在这种情况。
请将您的电话打包到status
:
{ status } stopped { (status threw ) print $error /errorname get =} if