出于测试目的,让我们绘制一些无意义的矩形:
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) run
和BeginEPSF
,但它没有帮助。在解码了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
内的其他地方失败了。
答案 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
文件已完成,并在页面上的正确位置包含适当颜色的矩形。
可能这已经修复了(你没有说你正在使用的是什么版本的Ghostscript)。下一个版本(9.16)很快就会到期,或者你可以从源代码中自行构建,我建议你在它可用的时候尝试它。