我有最新的GPL Ghostscript v9.05,我在Win 32位系统上运行它。在我的XP机器上,两个命令
ps2pdf -v -
和
rungs -v (used internally by TeXLive)
Ghostscript 9.05的报告如下:
GPL Ghostscript 9.05 (2012-02-08)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
在另一台Win 7计算机上,命令
ps2pdf -v -
在命令行中不被识别为有效的ps2pdf
语法,但rungs -v
正常工作。
我已经在互联网上阅读了关于为Ghostscript设置临时目录的信息:
http://schlingel.bplaced.net/?p=54
它基本上是要编辑Ghostscript的gssetgs.bat
文件夹中的lib
文件并添加以下行:
set path=%ProgramFiles%\gs\gs9.02\lib;%ProgramFiles%\gs\gs9.02\bin;%windir%\SysWOW64
set TMP=%YOUR_TEMP%
set TEMP=%TMP%
在我的情况下,需要通过将 9.02 替换为 9.05 来适当修改。现在在Win 7上,关于临时文件夹的最后两行怎么办?我可以Set TMP
如下:
set TMP=%"C:\Users\hihi\AppData\Local\Temp"%
这是正确的语法吗?
我还将tmp
和temp
变量放在我的环境变量中。
更新
一个。使用ps2pdf
,以下是我在Win 7计算机上将PS
转换为PDF
文件的方法,我收到错误消息:
C:\work\misc>ps2pdf -dNOSAFER -sDEVICE=pdfwrite -r720 -dCompatibilityLevel=1.5 -dUseFlateCompression=true -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dEPSCrop "%1.ps" "%1.pdf"
Unknown device:
Unrecoverable error: undefined in .uninstallpagedevice
Operand stack:
defaultdevice
注意:上面的命令在我的Win XP机器上运行正常!
B中。使用gswin32c
这里是我如何在Win 7计算机上将PS
转换为PDF
文件,而正常工作:
C:\work\misc>gswin32c.exe -o "%1.pdf" -dNOSAFER -sDEVICE=pdfwrite -r720 dCompatibilityLevel=1.5 -dUseFlateCompression=true -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dNumRenderingThreads=2 -c "60000000 setvmthreshold" -f -dEPSCrop "%1.ps"
GPL Ghostscript 9.05 (2012-02-08)
Copyright (C) 2010 Artifex Software, Inc. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Loading NimbusSanL-Regu font from %rom%Resource/Font/NimbusSanL-Regu... 2837152
1454727 4413848 3026018 1 done.
Loading Dingbats font from %rom%Resource/Font/Dingbats... 2837152 1510862 457461
6 3180865 1 done.
Loading NimbusSanL-Bold font from %rom%Resource/Font/NimbusSanL-Bold... 2857248
1553499 4655000 3251960 1 done.
注意:上述命令在我的Win XP机器上也能正常工作
总结:我的Win 7计算机上的ps2pdf
出现问题。
新(2012年5月9日)
这是我在 rem 最后两行时得到的结果:
C:\work\misc>ps2pdf -dNOSAFER -r720 -dCompatibilityLevel=1.5 -dUseFlateCompression=true -dMaxSubsetPct=100 -dSubsetFonts=true -dEmbedAllFonts=true -dEPSCrop "%1.ps" "%1.pdf"
Unrecoverable error: typecheck in .putdeviceprops
avoiding clean up
temp 文件夹包含您提到的那些临时文件。
_.at
的内容:
-dCompatibilityLevel#1.4
-dNOSAFER
-r720
-dCompatibilityLevel
_.at2
的内容:
-q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite
-sOutputFile#-dUseFlateCompression
-dCompatibilityLevel#1.4
-dNOSAFER
-r720
-dCompatibilityLevel
-c .setpdfwrite -f1.5
5月11日更新
注意:现在我的win 7机器正常运行
C:\work\misc>ps2pdf -dNOSAFER -r720 -dCompatibilityLevel#1.5 -dUseFlateCompression#true -dMaxSubsetPct#100 -dSubsetFonts#true -dEmbedAllFonts#true -dEPSCrop "defense.ps" "defense.pdf"
avoiding clean up
_.at
的内容:
-dCompatibilityLevel#1.4
-dNOSAFER
-r720
-dCompatibilityLevel#1.5
-dUseFlateCompression#true
-dMaxSubsetPct#100
-dSubsetFonts#true
-dEmbedAllFonts#true
-dEPSCrop
_.at2
的内容:
-q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite
-sOutputFile#"defense.pdf"
-dCompatibilityLevel#1.4
-dNOSAFER
-r720
-dCompatibilityLevel#1.5
-dUseFlateCompression#true
-dMaxSubsetPct#100
-dSubsetFonts#true
-dEmbedAllFonts#true
-dEPSCrop
-c .setpdfwrite -f"defense.ps"
感谢。
答案 0 :(得分:2)
临时文件问题的可能性远远大于您尝试编写目标文件的目录的权限。您引用的错误消息发生在使用任何临时文件之前很久,但如果您尝试写入不存在的目录,或者该进程没有写入权限,则这是一个非常常见的错误。
要做的第一件事就是发布您正在使用的实际gswin32命令行。
您要查询的语法不正确。 %value%是一个Windows脚本操作,它表示“用命名值替换%符号之间的东西”。所以,如果我声明'set VAL = c:/ temp'那么我可以说'set NEWVAL =%VAL%/ New'这将使NEWVAL'c:/ temp / new'。您可以在Windows帮助中找到有关Windows脚本编写的更多信息,也可以通过快速的Google找到。
鉴于在你的Windows 7机器上找不到'ps2pdf'(这是一个Windows脚本)(至少我认为你的意思是'不被认为是一个有效的ps2pdf命令')它看起来似乎就像你需要将Ghostscript路径添加到您的环境中一样。简单地改变gssetgs.bat本身就无能为力,您需要确保从autoexec.bat脚本调用此脚本文件,以便应用其他环境设置。
如果您不确定autoexec.bat是什么,或者如何修改它,那么谷歌应该会很快帮助您。
您实际安装了Ghostscript,还是只是复制它?
鉴于Ghostscript正常工作,问题必须在shell脚本'ps2pdf'中,或者更确切地说,Windows 7中的某些更改导致旧脚本无法正常工作。
这个脚本(不幸的是)比我想要的复杂得多(我没写过)。它实际上使用了大约三个不同的脚本来完成工作。你真的需要找出发送给GS的内容。
可能最简单的方法是编辑'ps2pdfxx.bat'。在:end标签处,您将看到'rem Clean up',然后是两行开头'if exist'。把rem放在那两个面前。添加一行“echo avoid clean up”文件的末尾应如下所示:
:端 rem清理。 rem如果存在“%TEMP%_。at”擦除“%TEMP%_。at” rem如果存在“%TEMP%_。at”2擦除“%TEMP%_。at”2 回声避免清理
现在运行命令行(顺便说一句
在TEMP目录中,您应该有名为_.at且可能是_.at2的文件,其中包含发送给GS的实际命令。
确定将文件_.at复制到文件 .at2中,然后 .at2用作Ghostscript的参数列表。评论你得到的文件:
---此行由批处理文件ps2pdfxx.bat添加 -q -P- -dSAFER -dNOPAUSE -dBATCH -sDEVICE#pdfwrite
---这些行来自_.at -sOutputFile#-dUseFlateCompression -dCompatibilityLevel#1.4 -dNOSAFER -r720 -dCompatibilityLevel
- 此行由批处理文件ps2pdfxx.bat添加 -c .setpdfwrite -f1.5
这有很多问题:
-sOutputFile#-dUseFlateCompression
这实际上将输出文件设置为'-dUseFlateCompression'
-c .setpdfwrite -f1.5
我不完全确定这会做什么。它将正确处理-f并终止PostScript输入,或者将其忽略为无法识别的开关(可能是后者)。 '1.5'应该作为输入文件名,没有Ghostscript不知道要使用哪个文件.....即使它确实如此,它也会尝试将输出写入伪造的文件名
老实说,我建议如果你想设置所有这些开关,你只需直接调用Ghostscript而不是尝试使用该脚本。事实上我建议无论如何,每当我看这些剧本时,我都会发抖。
几乎所有ps2pdf脚本正在执行的操作都被命令行覆盖,或者首先不需要。