如何将1页PDF转换为每张PDF 2页?


44

我想打印一个PDF,以便在第一页的前面是前两页,在背面的第三和第四页,依此类推。

-----------------          -----------------
|       |       |          |       |       |
|       |       |          |       |       |
|   1   |   2   |          |   3   |   4   |    . . .
|       |       |          |       |       |
|_______|_______|          |_______|_______|

 page 1 - front             page 1 - back

因为我认为使用Linux的打印机无法支持手动双面打印,所以也许我可以按照相应的方式编辑pdf。

但是如何?


我认为这是不可能的,您只有pdf吗?
Michael K

在Linux上,可以使用来自psutils软件包和/或pdftk的pstops。您正在运行哪个操作系统?
rems 2011年

@Ivo Flipse:哈,我认为完全一样:),所以您的评论也得到+1。
akira

@Ivo Flipse,@ rems:您可以在此处投票更多的ASCII艺术:superuser.com/questions/54054/…superuser.com/questions/235074/… ... @mokasin:这些链接可以为您提供解决方法的思路您要求的任务。
Kurt Pfeifle

Answers:


23

除了提到的内容外,PDFjam还包括一个命令行工具,pdfnup它可以执行此操作。(它利用了下面的PDFLaTeX的pdfpages包,您也可以使用。)

如果您更喜欢GUI,可以选择jPDFtweak


完善。正是我想要的。
mokasin 2011年

1
用法示例:pdfnup --nup 2x1 mypdf.pdf。这将在横向视图上每张纸并排打印2页,并在短边上翻转打印。请参阅man pdfnup以获取更多详细信息。
加布里埃尔·斯台普斯

我也决定添加一个答案:如何将1个1-pg pdf转换为横向视图,并在同一页面上复制2个副本(非常适合打印传单):superuser.com/a/1452008/425838
Gabriel斯台普斯

24

使用pdfnup:

$ pdfnup file.pdf

这将完全按照您的要求创建一个新的pdf文件。


pdfnup显示了与pdfjam一起使用的命令行选项,因此您可以从那里进行调整。(例如:如果您不希望有风景。可以在调用pdfjam时删除--landscape选项)
Trevor Boyd Smith,

6
更确切地说,pdfnup --nup 2x1 --suffix test file.pdffile-test.pdf在1中创建2页的页面
。– lolesque

1
sudo apt install texlive-extra-utils在Ubuntu上安装这些工具。
萨克,

我有一个单页a4,我想每张纸打印a5的两个副本。我该如何完成?上面“ pdfnup”的用法示例重复第一页,而是将第一张a4页的第二张a5部分留空。
Nordlöw21

2

这个问题已经足够老了,以至于我们当时还没有选择,但是也许它应该是最新的解决方案。

Linux pdf查看器通常使用打印选项/属性来设置页面布局,在那里您可以在每张纸/每面打印多页。想法是使用这些文件将其打印为PDF文件

Evince可以做到,也可以使用qpdfview这里更多


qpdfview

在此处输入图片说明

在此处输入图片说明


表明

在此处输入图片说明


PDF Studio查看器

在此处输入图片说明

其他pdf查看器必须具有类似的选项。


1

有免费软件和开源命令行工具可用于将pdf转换为读者的价差,小册子的价差等。

我丢失了正在使用的应用程序,因此没有帮助,但是通过快速搜索,我看到了一个名为pdfshuffler的程序(http://sourceforge.net/projects/pdfshuffler/),这可能就是您所需要的。有一个gui,所以不太可能是自动的,但是它是另一个工具的前端...



0

@mokasin:您没有说您正在使用哪个PDF阅读器。如果您使用Linux版本的Acrobat / Adob​​e Reader:可以在打印对话框中直接打印“ 2-up”选项。您还可以选择仅打印奇数页或偶数页,因此结合使用这将有助于您实现所需的输出。


0

我在Solaris 11.2操作系统上测试过的该软件可以创建称为2-up的方案,通常用于课堂或会议上的分发。可能会产生其他方案;例如,在一张纸或一张纸的两面分发3或4或更多页面的讲义。它可以是JAR文件,也可以从终端运行,也可以运行GUI以便于访问。除Solaris之外,其他Linux发行版也具有超级用户权限,可以“可执行”运行该软件,并且兼容。请注意不要使用“打开存档”。在大多数已经安装了Java Runtime Environment(JRE)的Windows和Mac上,它也可以运行。该软件是Dy拼版,可以免费下载和使用。


0

对于希望将1或2 pg pdf转换为pdf并在横向视图中并排放置2份副本的人(非常适合打印传单),请执行以下操作:

  1. 将1或2 pg pdf输入转换为包含这些页面的副本的输出(1-pg pdf-> 2-pg pdf,2-pg pdf-> 4-pg pdf等):

    pdfunite in.pdf in.pdf out.pdf
    
  2. 将复制的pdf合并为每张2页的横向pdf文件,例如用于打印传单:

    pdfnup out.pdf
    

或全部放在一行上:

pdfunite in.pdf in.pdf out.pdf && pdfnup out.pdf

请注意,out.pdf输入pdfnup。生成的输出文件pdfnup将称为“ out-nup.pdf ”。

另外,观看pdfnup命令的输出,您将看到命令实际运行的详细形式,这使您可以深入了解可以传递给它的选项。显然在引擎盖下pdfnup使用pdfjam

pdfjam:有效调用此pdfjam的方法:

/usr/bin/pdfjam --suffix nup --nup '2x1' --landscape -- out.pdf -

例:

原始PDF(“ 纵向 ” 视图中为1个常规pg),“ in.pdf ”: 在此处输入图片说明

最终PDF(在“景观”视图中并排2 pgs),“ out-nup.pdf ”:
-现在可以在中间切成两半作为传单散发 在此处输入图片说明

简单的Bash功能: make_flyer

复制此bash函数并将其粘贴到“〜/ .bashrc”文件的底部,以访问简单易用的命令make flyer

# Description: outputs a landscape-oriented flyer pdf ("my/pdf/input--flyer.pdf") for each 1 or more pg input pdf ("my/pdf/input.pdf")
#   - 1-pg input PDFs are converted to a 1-sided landscape, printable flyer that you cut down the center to make 
#     2 flyers
#   - 2-pg input PDFs are converted to a 2-sided landscape, printable flyer (flip on short edge when printing 
#     double-sided), and also cut down the middle to make 2 flyers
#   - **3+ pg input PDFs**: using `pdfnup` directly in this case would make more sense, since this function will
#     otherwise unneccessarily create 2 copies
#   - 3 and 4-pg input PDFs are converted to a single piece of paper, double-sided, flipped on short edge, x 2 copies. 
#     No cutting is necessary
#   - 5+ pg input PDFs simply require half as much paper to print is all since you get 2 pages per side of paper;
#     they do NOT print like booklets, but rather just as a landscape-printed, flipped-on-short-edge bundle of pages
#     (like a deck of slides). You get *2 copies* per print though, so just print half the pages. 
make_flyer() {
    num_args=$# # see: https://stackoverflow.com/questions/4423306/how-do-i-find-the-number-of-arguments-passed-to-a-bash-script/4423321#4423321
    suffix="flyer"

    loop_cnt=0
    for inputpdf in "$@"
    do
        ((loop_cnt++))
        echo "==== CONVERTING PDF $loop_cnt OF $num_args ===="
        echo "     INPUT:  \"$inputpdf\""

        # Strip off the .pdf extension from the input path, while retaining the rest of the path
        # - See: https://stackoverflow.com/questions/12152626/how-can-i-remove-the-extension-of-a-filename-in-a-shell-script/32584935#32584935
        input_path_base="$(echo "$inputpdf" | rev | cut -f 2- -d '.' | rev)"
        input_file_base="$(basename "$inputpdf" .pdf)"
        temp_pdf="${input_path_base}-.pdf" # is "input_path_base-.pdf"

        echo "     OUTPUT: \"$(pwd)/${input_file_base}--${suffix}.pdf\""

        # Convert a single 1-pg pdf into a temporary 2-pg pdf
        pdfunite "$inputpdf" "$inputpdf" "$temp_pdf"

        # Lay out the temporary 2-pg pdf into a side-by-side 1-sided flyer to print; creates "input_path_base--flyer.pdf"
        # Note that `pdfnup` places the output from this operation in the location from where you call this script
        # (ie: in your `pwd` [Present Working Directory])!--NOT the location where temp_pdf is located!
        pdfnup "$temp_pdf" --suffix $suffix

        # Delete the temporary 2-pg pdf, called "input_path_base-.pdf", thereby leaving only the original 
        # "input_path_base.pdf" and the new "input_path_base--flyer.pdf"
        rm "$temp_pdf"
    done
}
alias make_flyer_help='echo -e "Ex usage: make_flyer \"path/to/inputpdf.pdf\" - Creates a landscape-side-by-side flyer version called \"inputpdf--flyer.pdf\"\n          *in your pwd* from a 1 or 2 pg input pdf called \"path/to/inputpdf.pdf\". Accepts multiple arguments. Ex:\n          make_flyer \"path/to/inputpdf1.pdf\" \"path/to/inputpdf2.pdf\""'

用法示例:

make_flyer "path/to/inputpdf1.pdf" "path/to/inputpdf2.pdf"

查看帮助信息:

make_flyer_help

输出:

$ make_flyer_help   
Ex usage: make_flyer "path/to/inputpdf.pdf" - Creates a landscape-side-by-side flyer version called "inputpdf--flyer.pdf"  
          *in your pwd* from a 1 or 2 pg input pdf called "path/to/inputpdf.pdf". Accepts multiple arguments. Ex:  
          make_flyer "path/to/inputpdf1.pdf" "path/to/inputpdf2.pdf"

参考文献:

  1. https://superuser.com/a/948095/425838
  2. https://stackoverflow.com/a/11280219/4561887

有关:

  1. https://askubuntu.com/questions/214538/printing-in-booklet-format/1095789#1095789

Bash参考:

  1. Bash如何将参数传递给Bash函数:https : //bash.cyberciti.biz/guide/Pass_arguments_into_a_function
  2. Bash连接字符串:https : //linuxize.com/post/bash-concatenate-strings/
  3. Bash执行存储为字符串的cmd!https://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk
  4. Bash将所有输入迭代到一个cmd:https : //stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script/255913#255913
  5. Bash将参数传递给函数:https : //stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function/6212408#6212408
  6. 如何将1-pg pdf转换为传单[我自己的答案!]:如何将1页PDF转换为每页PDF 2页?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.