是否可以在EndPage过程中使用EPS文件(使用eps2write创建)?

时间:2015-03-07 17:02:57

标签: ghostscript eps

出于测试目的,让我们绘制一些无意义的矩形:

gswin32c -q -o f.pdf -sDEVICE=pdfwrite -c "<</PageSize[595 842]>>setpagedevice 0 0 595 842 rectfill showpage"

+

gswin32c -q -o f.eps -sDEVICE=eps2write -f f.pdf

和ps.ps文件:

<<
    /EndPage {
        exch pop 
        2 ne dup {
            1 dict begin
            /showpage {} def
            (f.eps) run
            end
        } if
    }
>> setpagedevice

然后

gswin32c -q -o out.pdf -sDEVICE=pdfwrite -f ps.ps -f f.pdf

产生错误:

  

%% [错误由opdfread.ps处理:GPL Ghostscript 9.15:无法恢复   错误,退出代码1不可恢复的错误:如果操作数堆栈中的类型检查:       typecheck ebuf false false --nostringval -

另一方面,如果我用其他工具创建EPS,例如xpdf的{​​{1}}:

pdftops

...然后将EPS放置为例如带上述命令的水印或徽标:

pdftops -eps f.pdf f.eps

所以问题是,是否有可能使用Ghostscript的gswin32c -q -o out.pdf -sDEVICE=pdfwrite -f ps.ps -f f.pdf 来达到目的,也许我错过了一些东西。

我尝试将eps2write括起来调用Adobe的 EPSF格式规范中定义的(f.eps) runBeginEPSF,但它没有帮助。在解码了EndEPSF创建的序言(如果从eps2write运行后,它本身也会出现相同的错误)之后,我认为它违反了非法和限制运算符的部分提到规范。

修改 如果代码是从EndPage运行的话,我认为立即评估的名称存在问题。在EndPage创建的序言中,有一个片段离开头不远:

eps2write

如果我按照这样构建它:

//SetPageSize{
//RotatePages//FitPages or//CenterPages or{
mark(/RotatePages, /FitPages and CenterPages are not allowed with /SetPageSize)//error exec
}if
}
{
//FitPages//CenterPages and{
mark(CenterPages is not allowed with /FitPages)//error exec
}if
}
ifelse

稍微修改SetPageSize == //SetPageSize == { //SetPageSize{ //RotatePages//FitPages or//CenterPages or{ mark(/RotatePages, /FitPages and CenterPages are not allowed with /SetPageSize)//error exec }if } { //FitPages//CenterPages and{ mark(CenterPages is not allowed with /FitPages)//error exec }if } ifelse } stopped { (***\n) print } if

ps.ps

然后这个命令:

<<
    /EndPage {
        exch pop 
        2 ne dup {
            1 dict begin
            /showpage {} def
            (prologue.ps) run
            end
        } if
    }
>> setpagedevice

...给出了这个输出:

gswin32c -q -o out.pdf -sDEVICE=pdfwrite -f ps.ps -f f.pdf

即。它在上面的片段中失败了(并且由于显而易见的原因,我认为)然后在false /SetPageSize *** %%[ Error handled by opdfread.ps : GPL Ghostscript 9.14: Unrecoverable error, exit code 1 内的其他地方失败了。

1 个答案:

答案 0 :(得分:1)

好的,所以我做了类似于你的经历的事情。我从一个简单的PostScript文件(testeps.ps)开始:

%!
0 1 0 setrgbcolor
0 0 100 100 rectfill
showpage

然后我使用eps2write设备通过Ghostscript运行它:

./gs -sDEVICE=eps2write -sOutputFile=out.eps -dCompressPages=false testeps.ps

然后我构建了另一个测试文件(test.ps):

%!

<<
    /EndPage {
        exch pop 
        2 ne dup {
            1 dict begin
            /showpage {} def
            (/temp/out.eps) run
            end
        } if
    }
>> setpagedevice

1 0 0 setrgbcolor
0 100 100 100 rectfill

showpage

并通过GS:

运行
./gs test.ps

文件已完成,并在页面上的正确位置包含适当颜色的矩形。

full page A4 PNG output

可能这已经修复了(你没有说你正在使用的是什么版本的Ghostscript)。下一个版本(9.16)很快就会到期,或者你可以从源代码中自行构建,我建议你在它可用的时候尝试它。