此代码适用于我,但我的所有文件都在网络驱动器上。在下面的示例中,代码仅在文件位于根目录(c:\
)中时才起作用。
我是否必须使用input.pdf
之类的内容替换d:\hello space folder\filefolder\input.pdf
?我试过这个,但得到了一些错误,说找不到目录。我试图做netuse并映射网络主驱动器文件夹,但那也没有用。
gswin32c ^
-q ^
-dNODISPLAY ^
-c "(input.pdf) (r) file runpdfbegin pdfpagecount = quit"
答案 0 :(得分:0)
您不能在PostScript字符串中使用单个反斜杠,因为它是转义字符。对于路径分隔符,您需要使用两个反斜杠\\
来逃避转义,或者使用正斜杠/
。
答案 1 :(得分:0)
请注意,自GhostScript 9.50起,默认情况下已将SAFER模式打开,从而导致/invalidfileaccess
这样的错误,只要确保您路径中的所有目录分隔符都为/
就不会消失斜线,摆弄当前路径等。
今天这花了我很多时间和几个小时,但是到2020年之后,您需要执行以下操作:
--permit-file-read=<path>
将源路径添加到接受列表,以使/invalidfileaccess
消失gs -q --permit-file-read=d:/ -dNODISPLAY -c "(d:/test.pdf) (r) file runpdfbegin pdfpagecount = quit"
即确保在PostScript命令/脚本中正在加载的PDF的路径在批准列表(也称为权限列表,using one of the --permit-file-xyz
commandline arguments)中。
-I<path>
快速破解,使/invalidfileaccess
消失gs -q -Id:/ -dNODISPLAY -c "(d:/test.pdf) (r) file runpdfbegin pdfpagecount = quit"
即确保在PostScript命令/脚本中正在加载的PDF的路径在批准列表(也称为权限列表)中。
在给定from the official documentation的情况下,以上示例中的-Id:/
只是一种快速的技巧,可以确保您的路径的源路径在该列表中:
最后,将命令行中提供的路径(例如-I,-sFONTPATH参数中的路径)添加到允许的读取列表中。同样,初始化期间从Fontmap,cidfmap和特定于平台的字体文件枚举(例如Unix系统上的fontconfig)读取的路径会自动添加到允许读取列表中。
-I
这样的期望外:另一个令我惊讶的是
gs -q -I d:/ -dNODISPLAY -c "(test.pdf) (r) file runpdfbegin pdfpagecount = quit"
即在-I
包含集中指定PDF的源路径,然后在PostScript命令中省略它, still 给了我/invalidfileaccess
,因此请确保为要加载的PDF指定正确的绝对路径。
-f
命令行仅在-c
PostScript命令内部加载文件时出现此问题,而在使用-f <file>
的命令行中直接指定PDF / PS源文件时,不是。
-I<path>
或--permit-file-read=<path>
的情况下尝试相同的操作:错误返回了吗?如果是,那么宾果游戏!在此命令行中(请注意缺少的-Id:/
或--permit-file-read=d:/
是唯一的更改):
gs -q -dNODISPLAY -c "(d:/test.pdf) (r) file runpdfbegin pdfpagecount = quit"
为您提供“无效的文件访问”错误,如下所示:
Error: /invalidfileaccess in --file--
Operand stack:
(d:/test.pdf) (r)
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval--
Dictionary stack:
--dict:737/1123(ro)(G)-- --dict:0/20(G)-- --dict:75/200(L)--
Current allocation mode is local
Last OS error: Permission denied
GPL Ghostscript 9.52: Unrecoverable error, exit code 1
您很有可能拥有a -dSAFER
problem,该问题已通过将上述 PDF源目录添加到接受的路径列表中来解决(另请参见the GhostScript documentation at 'NOSAFER'及以后的部分)关于--permit-file-read=pathlist
等。
-dNOSAFER
运行时问题是否消失了?如果是,那么宾果游戏!此命令行时:
gs -q -dNOSAFER -dNODISPLAY -c "(d:/test.pdf) (r) file runpdfbegin pdfpagecount = quit"
可以,那么可以肯定的是,您需要上述两种解决方案来摆脱/invalidfileaccess
错误。
我在SO和其他地方都讨论了很多讨论,包括各种bug跟踪器,但似乎所有地方都没有提到这一点,因为所有这些页面/条目都来自GhostScript 9.50和2019AD之前的版本。
文件访问控制功能(通过
-dSAFER
启用)已被完全重写,并重新设计。有关更多详细信息,请参阅:SAFER。请注意,
-dSAFER
现在仅启用文件访问控制,并且不再对标准Postscript功能施加限制(特别是对setpagedevice
的限制)。如果您的应用程序依赖于这些Postscript限制,请参见OLDSAFER
,并与我们取得联系,因为我们确实打算删除这些Postscript限制,除非我们有理由不这样做。重要:默认情况下,文件访问控制已启用。为了在没有这些控件的情况下运行Ghostscript,请参见
NOSAFER
Windows用户重要提示:请参见下文Incompatible Changes
SAFER
的更改从2019-09-30(版本9.50)开始