【问题标题】:Merging two a5 pages into a singe a4 page (without using pdfnup)将两个 a5 页面合并为一个 a4 页面(不使用 pdfnup)
【发布时间】:2011-05-04 11:24:16
【问题描述】:

我正在使用 Dompdf 从 html 模板生成 A5 pdf 文档,并使用 Pdfnup(Pdfjam 的一部分)将它们组合成一张漂亮的 A4 纸,这有助于在打印时节省一些纸张:)

# Generate an a5 pdf 
php dompdf.php mytemplate.html -p 'A5' -f a5doc.pdf

# combine two copies of the generated A5 into a single A4 page
pdfnup a5doc.pdf a5doc.pdf --nup '2x1' 

这很好用;虽然第二步迫使我安装大量依赖项(即 Tex-Latex、pdftex、ecc。)并且会使我的生产服务器混乱。我想知道是否有任何方法可以在不实际使用 Pdfnup 的情况下组合生成的文档。例如,有没有办法用 pdftk 做到这一点?

提前感谢您!

【问题讨论】:

  • -nup 选项的pdfnup 应读作--nup
  • 你意识到这份工作了吗?如果是,您是否使用了 Kurt Pfeifle 的暗示?我不确定如何更改给定的参数以适应您的问题。如果您成功了,您能否分享(部分)您的解决方案?

标签: pdf-generation ghostscript dompdf pdftk


【解决方案1】:

在 Debian/Ubuntu 上,我设法使用简单的命令将 2xA5 合并到 1xA4 以进行打印:

# apt-get install ghostscript pdftk psutils 
pdftk A=A5-1.pdf B=A5-2.pdf cat A1 B1 output - \
| pdf2ps -dLanguageLevel=3 - - \
| psnup -2 -Pa5 -pa4 \
| ps2pdf -dCompatibility=1.4 - A4.pdf

【讨论】:

  • 谢谢,从 Ubuntu 18 开始。?删除 pdftk 我必须手动安装它,请参阅此精细安装脚本 askubuntu.com/a/1046476/617935
  • 添加东/西以旋转输入 pdf 可能会有所帮助,因为 a5 在 a4 中完全适合两次。这是一个可以放入 .bashrc 的解决方案,例如:function pdfa5toa4() {pdftk A=$1 B=$2 cat A1east B1east output - | pdf2ps -dLanguageLevel=3 - - | psnup -2 -Pa5 -pa4 | ps2pdf -dCompatibility=1.4 - $3} 并与 pdfa5toa4 A5-1.pdf A5-2.pdf output.pdf 一起使用
  • 有些人需要将 ps2pdf(作为 pdf2pdf)添加到 @colidyre 的答案中以解决 PDF 问题,所以 <Midwinter-A5.pdf pdf2ps -dLanguageLevel=3 - - | psnup -q -2 -Pa5 -pa4 | ps2pdf14 - Midwinter-A4.pdf 会这样做,但是使用 TrueType 字体的 PDF 会受到 大量 质量损失(字形跳来跳去)。我找到了pdfjam --nup 2x1 --landscape --a4paper Midwinter-A5.pdf --outfile Midwinter-A4.pdf 来提供帮助……尽管它当然需要 OP 想要避免的 Tₑχ/LᴬTᴇΧ。仍然在这里发布,以防其他人偶然发现它,就像我一样,无论如何都安装了 texlive-full。
【解决方案2】:

您可以结合使用 Ghostscript 和 pdftk。

方法如下:https://superuser.com/questions/191373/linux-based-tool-to-chop-pdfs-into-multiple-pages/192293#192293

上面链接的示例显示了如何将页面分成两半。只需相应地修改步骤,使用不同的参数来...

  • ...首先将“左”页移动到双倍大小的画布,左半边;
  • ...然后将“右”页移动到双倍大小的画布,右半部分;
  • ...最后,将页面与pdftk 合并。

更新:

提示:您可能想使用 pdftk 的 multistampmultibackground 操作(NOT: 它的 shuffle操作!)以获得想要的最终结果。

【讨论】:

  • 第一步和第二步的输出是不同的文件,对吗?哪个 pdftk 命令将根据步骤 3 将来自不同文件的相应页面合并到输出的同一页面?
  • @JeffG:请在原始问题下发表评论。在那里,如果与我制作的插图一起使用,恕我直言,说明非常清楚。 OTOH,您当前的问题对我来说根本不清楚。请尝试再次询问他们,但要以明确的方式。
  • 我的问题不是关于如何将单个页面分成多个页面(另一个问题,是的,非常清楚!)。相反,我在这里要求澄清您的答案 - 即如何调整您的其他答案以将多个页面组合成一个页面。在我关于“步骤”的问题中,我指的是上面的 3 个项目符号:(1)将左侧页面移动到双倍尺寸的画布(2)类似地移动右侧页面,以及(3)将页面与 pdftk 结合起来。简而言之:你会使用pdftk shuffle合并左右两半吗?怎么样?
【解决方案3】:

基于Kurt-Pfeifle's answer 代码使用unix like shell(我还保留了libreoffice的行):

FileBaseName="ExampleDoc_A5_Landscape"

# required packages: gs, pdftk, coreutils:mktemp

libreoffice --headless --nodefault --convert-to pdf "${FileBaseName}.odt"

temp_pdf_dir=$(mktemp -d)
a4_page1="${temp_pdf_dir}/1.pdf"
a4_page2="${temp_pdf_dir}/2.pdf"

pdftk "${FileBaseName}.pdf" cat 1south output - | gs -o "${a4_page1}" -sDEVICE=pdfwrite -sPAPERSIZE=a4 -dFIXEDMEDIA -dPDFFitPage -
pdftk "${a4_page1}" cat 1north output "${a4_page2}"
pdftk "${a4_page1}" background "${a4_page2}" output "${FileBaseName}-A4.pdf"
rm -rf "${temp_pdf_dir}"

请注意,嵌入在原始文档中的字体将在最终 PDF 中翻倍。

此过程会生成镜像对齐,因此打印的 A4 纸可以在中间切割,并且两个 A5 页面的底部都会有这个切割边缘。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2013-06-13
    • 1970-01-01
    • 2022-12-03
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多