【问题标题】:Stack PDF images: single page output堆叠 PDF 图像:单页输出
【发布时间】:2018-06-28 16:16:22
【问题描述】:

如何将 PDF 图像(垂直)堆叠成单页输出 PDF?即:

|-----|
|  1  |
|  2  |
| ... |
|-----|

(请参见下面的示例。)我正在寻找的是与this tool 等效的 PDF,它可以堆叠 SVG 图形。


请注意,这与多页组合明显不同

|-----|
|  1  |
|-----|
|  2  |
|-----|
| ... |
|-----|

使用哪个会获得

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf 1.pdf 2.pdf ...

(见this answer。)


示例

@KenS 在 cmets 中完美地描述了我的目标:我选取第 1 页和第 2 页,它们都是 612x792 点,这应该成为一个 PDF,其中包含来自顶部第 1 页的标记内容和在底部标记第 2 页的内容。如果这个页面应该这个页面的大小是612​​x1584。

更直观:

【问题讨论】:

  • 很抱歉,我不太明白您想要达到的目标。在您的问题中参考 PDF images 并没有帮助。我认为您根本不是指图像,听起来更像是在谈论 PDF 页面内容。听起来你想要某种强制,但你没有说你想要什么作为输出。例如,如果我取第 1 页和第 2 页,两者都是 612x792 点,您是否想要一个 PDF,其单页包含顶部第 1 页的标记内容和底部第 2 页的标记内容?这个页面应该是什么尺寸? 612x1584 ?
  • 我对这个问题的回答中有一个基本的拼版程序stackoverflow.com/questions/30545382/…
  • @KenS 感谢您的评论。你描述的正是我想要的。我已经更新了问题以反映这一点。关于你的脚本:对不起,我觉得自己像个新手,但我应该如何使用它?
  • 啊,是的,对不起。那是一个 PostScript 程序。让我把这个写下来作为答案,cmets 没有空间

标签: pdf ghostscript pdf-manipulation


【解决方案1】:

好的,我认为来自answer 的 PostScript 程序将完成这项工作。其工作方式是您将 Ghostscript 媒体大小设置为您希望最终输出的样子,然后您只需通过 Ghostscript 运行程序,并将 PDF 文件的名称传递给 GS。

程序获取当前媒体大小,然后尝试将 PDF 中的页面适合该媒体。显然我没有您的测试文件,但我相信如果您将 GS 设置为具有 612x1584 媒体然后运行它,那么 GS 将决定页面最适合未缩放和未旋转。如果不是这种情况,我需要看一个例子来找出原因。

假设你从答案中复制程序,并将其保存为名称2-up.ps,用法在程序开头的cmets中:

% usage: gs -dNODISPLAY -sFile=____.pdf [-dVerbose] 2-up.ps

所以你需要这样的东西:

gs -dNODISPLAY -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=1584 -dFIXEDMEDIA -sDEVICE=pdfwrite -sOutputFile=out.pdf -sFile=<insert your full path and filename here> 2-up.ps

这将获取原始 PDF 文件(由 -sFile 定义),并尝试创建它的 2-up 表示,将输出写入新的 PDF 文件。

注意 cmets;这不会尝试保留超链接之类的元数据,因为这些是基于页面的,并且在重新编号页面时会出错)并且仅适用于 Ghostscript 中的 当前 PDF 解释器。它不能与任何其他 PostScript 解释器一起使用,因为该程序使用了 Ghostscript PDF 解释器的内部结构,而它实际上并不应该干预。

哦,程序假定 PDF 文件中的所有页面大小相同,即第一页的大小。

我们应该在未来的版本中为 Ghostscript 中的拼版添加更多(更好的)支持。

【讨论】:

  • 非常感谢!尽管Error: /undefined in OriginYTx 确实出现错误。
  • 嗯,这听起来像是 PostScript 程序中的一个错误,这有点令人惊讶,也许您的示例采用了以前未在其中使用过的代码路径。恐怕我需要先看一个例子才能修复它。
  • 我在temporary repository 中分享了这个例子。它包括我在readme.md 中执行的命令
  • 好的,所以程序中有一个错字,第 244 行读取 /OriginYTy PDFHeight def 应该是 /OriginYTx,而不是 /OrigtinYTy。但是,这还不足以让您完成这项工作。该程序希望所有页面都在一个文件中,您不能设置 -sFile= 两次,所做的只是用第二个覆盖第一个。您必须先将所有输入放入一个文件中,然后才能使用它。
  • 我做了 gs -sDEVICE=pdfwrite -sOutputFile=new.pdf 1.pdf 2.pdf 然后使用新创建的 new.pdf 作为命令行中的输入文件,它按预期工作,错字修正后。
猜你喜欢
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2014-03-17
  • 2020-12-10
相关资源
最近更新 更多