2

我有最新的 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

它基本上说要编辑Ghostscriptgssetgs.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"%

它是正确的语法吗?

我还将tmpandtemp变量放在了我的Environment variables中。

更新

A. 使用ps2pdf,这是我在 Win 7 机器上将 a 转换PSPDF文件的方法,但出现错误:

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 机器上将a 转换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 日)

这就是我按照肯建议的最后两行时得到结果:

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" 

谢谢。

4

1 回答 1

2

比临时文件问题更可能是您尝试写入目标文件的目录的权限。您引用的错误消息在使用任何临时文件之前很久就出现了,但是如果您尝试写入不存在的目录或进程没有写入权限的目录,则这是一个非常常见的错误。

首先要做的是发布您正在使用的实际 gswin32 命令行。

您查询的语法不正确。%value% 是一个 Windows 脚本操作,它表示“用命名值替换 % 符号之间的内容”。所以如果我声明'set VAL=c:/temp' 然后我可以说'set NEWVAL=%VAL%/New' 这将使NEWVAL 'c:/temp/new'。您可以在 Windows 帮助中或通过快速 Google 找到有关 Windows 脚本的更多信息。

鉴于在您的 Windows 7 机器上找不到“ps2pdf”(这是一个 Windows 脚本)(至少我认为这就是您所说的“不被识别为有效的 ps2pdf 命令”的意思),它似乎确实需要将 Ghostscript 路径添加到您的环境中。简单地自行更改 gssetgs.bat 不会有任何效果,您需要确保从您的 autoexec.bat 脚本调用此脚本文件,以便应用其他环境设置。

如果您不确定 autoexec.bat 是什么或如何修改它,那么 Google 应该会很快为您提供帮助。

你真的安装了 Ghostscript,还是简单地复制它?

鉴于 Ghostscript 工作正常,问题一定出在 shell 脚本“ps2pdf”中,或者更准确地说,Windows 7 中的某些更改导致旧脚本无法工作。

这个脚本(不幸的是)比我想要的要复杂得多(我没有写它)。它实际上使用大约三个不同的脚本来完成这项工作。您确实需要找出发送给 GS 的内容。

可能最简单的方法是编辑“ps2pdfxx.bat”。在 :end 标签上,您会看到“rem Clean up”,后跟两行以“如果存在”开头。把rem放在那两个前面。添加一行“回显避免清理”文件的末尾应如下所示:

:end rem 清理。rem 如果存在 "%TEMP%_.at" 擦除 "%TEMP%_.at" rem 如果存在 "%TEMP%_.at"2 擦除 "%TEMP%_.at"2 echo 避免清理

现在运行你的命令行(顺便说一下,使用 ps2pdf 时你真的不需要放 -sDEVICE= .....)

在您的 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 脚本所做的几乎所有事情都被您的命令行覆盖,或者一开始就不需要。

于 2012-04-30T07:15:35.763 回答