gpt4 book ai didi

pdf - 在 PDF 文件上覆盖一个 PS 文件

转载 作者:行者123 更新时间:2023-12-04 07:59:00 25 4
gpt4 key购买 nike

我发现类似的问题得到了回答 Overlay two postscript files (command line approach)? , 但是,该解决方案对我不起作用,而且我的要求有点不同(我的一个文件是多页文件)
我有一个不受我控制的 PDF 文件 ( DrawingSheet.pdf )。我有一个 PostScript 文件 ( Table.ps ),我通过使用 XSLFO 和 Apache FOP 转换 XML 文件来生成它。 Table.ps包含一张表。DrawingSheet.pdf有多个页面。 Table.ps只有一页。两者 DrawingSheet.pdfTable.ps具有相同的纸张尺寸 - A 尺寸,横向。我想从 Table.ps 放置那张 table 在 DrawingSheet.pdf 最后一页的顶部.我不想在 DrawingSheet.pdf 的末尾“附加”表格页面作为附加页面.我正在使用命令行 GhostScript (v9.27)。
根据那篇文章的建议,我写了以下 Overlay.ps 文件:

/origshowpage /showpage load def
/showpage {} def
gsave
(DrawingSheet.pdf) run
grestore
(Table.ps) run
origshowpage
那行不通。我得到的是表格页面“附加”到 DrawingSheet.pdf而不是覆盖在最后一页的顶部。
我究竟做错了什么?我怎样才能达到我想要的?
已编辑-1 :
如果在两个文件中使用相同数量的页面来简化逻辑有帮助,那么我可以生成 Table.psDrawingSheet.pdf 的页数相同文件并让表格只出现在 Table.ps 的最后一页.
已编辑-2 :
或者,我尝试了以下方法(类似于将图像水印添加到 PDF 文件)。这样做的最终结果是我的空白页与 DrawingSheet.pdf 中的页数一样多。 .有趣的是,当我加载生成的空白 PDF 时,我可以看到 Acrobat Reader 在屏幕上闪烁表格,但是当加载整个文件时,我最终看到的只是空白页面。
任何帮助解决这个问题非常感谢。
<<
/EndPage
{
2 eq
{
pop false
}
{
gsave
1 dict begin
/showpage {} def
(Table.ps) run
end
grestore
pop true
} ifelse
} bind
>> setpagedevice
Edited-2 - 附加说明 : 如果我注释掉 gsavegrestore从上面的代码,然后我没有得到空白页,而是现在每个页面都用来自 Table.ps 的表格“替换”(没有覆盖)。 .
Edited-3 - 部分成功 :
看到这个帖子后: Edit (every page of a) Postscript file manually ,我试过这种方法。我转换了 DrawingSheet.pdfDrawingSheet.ps ,确定了最后 %%EndPageSetup行,并在该行之后插入以下代码:
% BUNCH OF LINES NOT SHOWN %
%%BeginPageSetup
4 0 obj
<</Type/Page/MediaBox [0 0 792 612]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
/Font 10 0 R
>>
/Contents 5 0 R
/CropBox
[0 0 792.0 612.0]
/BleedBox
[0 0 792.0 612.0]
/TrimBox
[0 0 792.0 612.0]
>>
endobj
%%EndPageSetup
%gsave % <== My Edits
1 dict begin % <== My Edits
/showpage {} def % <== My Edits
(Table.ps) run % <== My Edits
end % <== My Edits
%grestore % <== My Edits
5 0 obj
<</Length 30050>>stream
% BUNCH OF LINES NOT SHOWN %
通过此编辑(gsave 和 grestore 注释掉 - 如果我取消注释它们,则这不起作用),我在最后一页上强加了我的表。表格看起来不错,但是 pdf 的原始最后一页在叠加后显示为在 X 轴的中心上翻转。页面截图如下:
enter image description here
您可以阅读的文本来自 Table.ps ,而翻转的文字是 DrawingSheet.pdf最后一页的原文(当然,原始 pdf 中的页面不会翻转)。
不确定我做错了什么来获得翻转的图像?
已编辑-4 :
为“Edited-2”添加了附加注释

最佳答案

我试过你的endpage,终于让这种方法起作用了。 EndPage 将原因代码 0 或 1 和页面计数放在堆栈上(对于某些 pdf 来说不可靠),因此替代方法是/PageCount 变量,我同时显示两者。这些计数页数并在页尾递增。
在页面完成之前,您需要知道将叠加层放置在页面上的页数。 “finalpage”变量也可以在 ghostscript 命令行而不是文件中定义。使用 endpage.ps 和 DrawingSheet.ps 文件作为参数运行 ghostscript。需要做更多的工作才能将其调整为 DrawingSheet.pdf,但应该是可能的。
查看更改最终页码后是否有效。在执行 showpage 之前,table.ps 应该放在原始最后一页的顶部。

%!
/finalpage 9 def
<<
/EndPage {
2 ne {
1 add finalpage eq {(found last page\n)print (Table.ps)run} if
currentpagedevice /PageCount get ==
true
} if
}
>> setpagedevice
编辑:Postscript 语言引用手册 3 第 176 页说:

The PostScript interpreter maintains an implicit current page that accumulates the marks made by the painting operators. When a program begins, the current page is completely blank. As each painting operator executes, it places marks on the current page. Each new mark completely obscures any marks it may overlay. This method is known as a painting model: no matter what color a mark has—white, black, gray, or color—it is put onto the current page as if it were applied with opaque paint. Once the page has been completely composed, invoking the showpage operator renders the accumulated marks on the output media and then clears the page to white again.

关于pdf - 在 PDF 文件上覆盖一个 PS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66554567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com