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 -

コマンド ラインで有効な構文として認識されませんが、正常に動作しますps2pdfrungs -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.029.05に置き換えて、これを適切に変更する必要があります。Win 7 では、一時フォルダーに関する最後の 2 行はどうすればよいですか? 次のようにできますかSet TMP

set TMP=%"C:\Users\hihi\AppData\Local\Temp"%

それは正しい構文ですか?

また、環境変数tmpに変数とtemp変数を入れました。

アップデート

A. を使用して、Win 7 マシンで をファイルに変換する方法を次に示します。エラーが発生しますps2pdfPSPDF

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.ここでは、Win 7 マシンでa をファイルgswin32cに変換する方法を示します。これは機能します。PSPDF

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 マシンでも正常に動作します。

要約ps2pdfすると、Win 7 マシンで問題が発生しました。

新規 (2012 年 5 月 9 日)

Ken が提案したように、最後の 2 行を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

一時フォルダーには、あなたが言及した一時ファイルがあります。

の内容_.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 スクリプトの詳細を見つけることができます。

「ps2pdf」(Windowsスクリプト)がWindows 7マシンで見つからない場合(少なくとも、「有効なps2pdfコマンドとして認識されない」という意味だと思います)、必要なようです環境に Ghostscript パスを追加します。gssetgs.bat を変更するだけでは何も起こりません。追加の環境設定が適用されるように、このスクリプト ファイルが autoexec.bat スクリプトから呼び出されるようにする必要があります。

autoexec.bat とは何か、またはその変更方法がわからない場合は、Google がすぐに役立つはずです。

実際に Ghostscript をインストールしましたか、それとも単純にコピーしましたか?

Ghostscript が正常に動作することを考えると、問題はシェル スクリプト 'ps2pdf' にあるに違いありません。より正確には、Windows 7 の何らかの変更により、古いスクリプトが動作しなくなります。

このスクリプトは (残念ながら) 思ったよりかなり複雑です (私が書いたわけではありません)。実際には、約 3 つの異なるスクリプトを使用して作業を行います。GS に何が送信されているかを確認する必要があります。

おそらくこれを行う最も簡単な方法は、「ps2pdfxx.bat」を編集することです。:end ラベルには、'rem Clean up' の後に 'if exist' で始まる 2 行が表示されます。その二人の前にレムを置いてください。「クリーンアップを回避するエコー」という行を追加します。ファイルの最後は次のようになります。

:end rem クリーンアップ。rem "%TEMP%_.at" が存在する場合は "%TEMP%_.at" を消去します。 "%TEMP%_.at"2 が存在する場合は rem "%TEMP%_.at"2 を消去します。

コマンドラインを実行します (ちなみに、ps2pdf を使用する場合は -sDEVICE= を入れる必要はありません..... )

TEMP ディレクトリには、GS に送信される実際のコマンドを含む _.at および場合によっては _.at2 というファイルが必要です。

OK、ファイル _.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 に答える