编辑(a)Postscript文件的每一页



我想(手动)在Postscript文件中插入其他后记命令,该文件通过ghostscript的pdf2ps从PDF文件转换。为了进行测试,我使用pdflatex从以下文件中创建了一个PDF文件:

documentclass[a4paper]{article}
begin{document}
Mostly empty.
end{document}

在转换后的Postscript文件中,我进行以下编辑:

...
%%Page: 1 1
%%PageBoundingBox: 0 0 595 841
%%BeginPageSetup
4 0 obj
<</Type/Page/MediaBox [0 0 595.28 841.89]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
/Font 8 0 R
>>
/Contents 5 0 R
>>
endobj
%%EndPageSetup
% BEGIN MANUAL EDIT
0 setgray 0 0 moveto 595 841 lineto stroke
% END MANUAL EDIT
5 0 obj
<</Length 257>>stream
q 0.1 0 0 0.1 0 0 cm
0 G
0 g
q
10 0 0 10 0 0 cm BT
/R6 9.9626 Tf
1 0 0 1 139.746 706.129 Tm
[(M)-0.699638(os)-0.399443(t)-0.900585(l)-0.798886(y)-333.819(e)-0.400668(m)-0.300195(p)-0.599165(t)26.0974(y)83.192(.)-0.800112]TJ
154.421 -615.691 Td
(1)Tj
ET
Q
Q
endstream
endobj
pagesave restore
%%PageTrailer
%%Trailer
end
%%EOF

而不是产生对角线,而是scipt/pdf文件保持(看似)不变。但是,如果我将页面尺寸从A4更改为字母大小,则显示了行:

%%Page: 1 1
%%PageBoundingBox: 0 0 612 792
%%BeginPageSetup
4 0 obj
<</Type/Page/MediaBox [0 0 612 792]
...

我显然在这里缺少一些东西(考虑到我对后记的基本知识,这并不奇怪)。我的问题是:在保持页面尺寸不变时,该如何使线路出现?

P.S。:我偶然发现的评论提到pdftops(来自Poppler-Utils)在某种意义上优于pdf2ps。实际上,将命令插入转换后的postscript文件之前,在showpage命令(使用pdf2ps时根本不存在)之前,命令效果很好。因此,我可能已经找到了解决问题的解决方案。但是,我想了解使用pdf2ps时页面尺寸与之有什么关系。


解决方案

感谢Kens的建议,并提到了他对这个问题的回答,我能够通过在Postscript文件中添加端页程序来实现所需的效果:

<<
/EndPage
{
  exch pop 2 lt
  {
    gsave
    0 0 translate
    0 setgray 0 0 moveto 596 842 lineto stroke
    grestore
    true
  }{false} ifelse
} bind
>> setpagedevice

(假设页面大小为A4。)

PostScript是一种仅写的语言: - )

认真地,它是一种编程语言。为了了解正在发生的事情,您需要了解该程序(在Ghostscript的PS2Write设备输出的情况下,这一程序都显然是不平凡的。

语法基本上是pdf,其中具有序言程序,该程序用后记术语解释。

程序 WILL 使用Showpage,当执行过程Endstream时,它可以(基本上)当EndoBJ关键字在页面流中封闭时(基本上)。您会看到它看起来像:

ET
Q
Q
Q
endstream
endobj
%%Page: 2 2

您可以在端流和EndoBJ之间放置任何您喜欢的东西,但是您需要意识到当时的图形状态取决于已经发生的任何操作。这可以包括缩放,演说,倾斜,翻转垂直轴等。因此,只需将某些后记插入其中就不太可能工作。您可以执行至少将图形状态重置为已知设置的启动图。

作为测试,我运行了Ghostscript'SD PS2Write设备:

gs -sdevice = pdfwrite -o out.ps -c" showpage" -f

生成邮局程序,其中(有效)内容为:

%%EndResource
%%EndProlog
%%Page: 1 1
%%PageBoundingBox: 0 0 595 842
%%BeginPageSetup
4 0 obj
<</Type/Page/MediaBox [0 0 595 842]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
>>
/Contents 5 0 R
>>
endobj
%%EndPageSetup
5 0 obj
<</Length 23>>stream
q 0.1 0 0 0.1 0 0 cm
Q
endstream
endobj
%%Trailer
end
%%EOF

然后,我按照您的建议或多或少进行了修改:

%%EndPageSetup
0 setgray 0 0 moveto 595 842 lineto stroke
5 0 obj
<</Length 23>>stream
q 0.1 0 0 0.1 0 0 cm
Q
endstream
endobj
%%Trailer

对我来说,这产生了从左下角到右上的预期中风。显然,没有您最初生产的后记文件,我无法告诉您为什么您的经历会有所不同。(不,我没有能够运行乳胶来产生这样的东西,即使我确实没有办法知道您使用的Ghostscript和其他工具)。

我的猜测是您的PDF文件中的"某物"覆盖了整个页面,它并不完全罕见。

相关内容

  • 没有找到相关文章