将 PDF 对转换为单页的最佳方法是啥?

Posted

技术标签:

【中文标题】将 PDF 对转换为单页的最佳方法是啥?【英文标题】:What is the best way to convert PDF pairs into single pages?将 PDF 对转换为单页的最佳方法是什么? 【发布时间】:2018-04-26 05:22:06 【问题描述】:

我需要获取现有的 PDF(使用 Prawn 创建),并将第 1 页(封面)之后的对组合成单页。我还想在连接页面的中心添加一条垂直线。这些页面将打印在书籍中,目标是制作类似于 Acrobat 中并排视图的单个 PDF 页面。我知道我可以将它们转换为图像,使用 ImageMagick 执行我需要的操作,然后将它们重新转换为 PDF 格式,但我正在尽量减少转换次数,以便尽可能多地保存质量。

我也意识到我可以从一开始就使用 Prawn 做到这一点,但我试图避免这种情况,因为这需要对我们的应用程序进行非常大的更改。

【问题讨论】:

这不是更好地委托给操作系统中的“打印”对话框吗? Imagemagick 会在阅读时光栅化您的 PDF 文件。您可以将它们与脚本并排附加。但是当您将它们写回 PDF 时,您将获得嵌入在 PDF 矢量外壳中的光栅文件。这将比您的原始 PDF 页面大得多。 @Myst 这必须在 Ruby on Rails 应用程序的后台作业中完成。不过谢谢你的想法。 @fmw42 这很好,谢谢。我不这样做的另一个原因是避免任何质量损失。 我认为您可以使用 CombinePDF 做到这一点,但我有点着急。稍后我将尝试概述解决方案。 【参考方案1】:

使用 Ghostscript 和 pdfwrite 设备可以做到这一点,但这绝非简单。您需要编写一些 PostScript 来完成这项工作。

您需要添加 BeginPage 和 EndPage 过程,BeginPage 需要检查当前页码(并且您需要自己跟踪)。如果是第 1 页,则正常处理。如果它是偶数页,则丢弃当前的 PageSize 并将其替换为覆盖一对页面的页面。处理偶数页。请勿传输内容。

如果页面是奇数(而不是 1),则平移原点,使其向右偏移页面宽度。处理奇数页。使用 moveto、lineto 和 stroke 在两页之间绘制所需的线。传输页面。

这假设所有页面的大小和方向都相同,或者至少每个页面的大小都是预先知道的。也可以通过编程方式检索这些内容,但更复杂。

这绝对不是微不足道的,但如果你翻阅我在 PostScript 标签中的答案并寻找任何带有“强制”一词的东西,你可能会找到完成这项工作的程序大纲。

我快速浏览了一下,here 是我一段时间前写的答案。它使用与上述不同的方法,它复制了 PDF 解释器的一些内容并重新利用它们。不过,它可以满足您的大部分需求。

【讨论】:

我会看看这个。感谢您的指导!第一个页面之后的所有页面的大小都是相同的,并且目前它们始终是相同的大小,但这并不总是如此。因此,最好以编程方式获取大小。再次感谢。

以上是关于将 PDF 对转换为单页的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 json 格式的键值对转换为以符号为键的 ruby​​ 哈希的最佳方法是啥?

将任何版本的 PDF 转换为扫描/展平 PDF 文件的最佳方法

将 pdf 文件转换为 tiff 文件的最佳方法 [关闭]

Javascript:将数组转换为对象的最佳方法是啥? [复制]

将 Paradox(objectpal) 系统转换为 .Net 的最佳方法是啥?

将json字符串转换为对象数组的最佳方法是啥? [复制]