8

我正在使用Dompdf从 html 模板和Pdfnup(Pdfjam 的一部分)生成 A5 pdf 文档以将它们组合成一张漂亮的 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 做到这一点?

先感谢您!

4

3 回答 3

10

在 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
于 2014-12-08T15:00:05.683 回答
3

您可以结合使用 Ghostscript 和 pdftk。

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

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

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

更新:

提示:您可能想要使用 pdftkmultistampmultibackground操作(不是:它的shuffle操作!)来获得想要的最终结果。

于 2010-12-05T11:17:35.927 回答
0

基于Kurt-Pfeifle 的回答,代码使用 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 页面的底部都会有这个切割边缘。

于 2019-01-27T22:10:23.490 回答