web-dev-qa-db-ja.com

1ページを変換する方法PDFシートごとに2ページのPDFにするには?

PDFを印刷して、最初のページの表側が最初の2ページ、裏側が3番目と4番目などになるようにしたいと思います。

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

 page 1 - front             page 1 - back

Linuxを使用しているプリンターが手動の両面印刷に対応していないと思っていたので、PDFを適切に編集できたのかもしれません。

しかし、どうやって?

52
mokasin

言及されている内容に加えて、 PDFjam には、これを行うコマンドラインツールpdfnupが含まれています。 (下にあるPDFLaTeXのpdfpagesパッケージを使用します。これも使用できます。)

GUIを使用する場合は、 jPDFtweak を使用することもできます。

28
frabjous

Pdfnupを使用します。

$ pdfnup file.pdf

これにより、要求したとおりに新しいPDFファイルが作成されます。

26
Joaquin

これは、私たちが現在持っていたオプションが当時存在しなかったと考えるのに十分古い質問ですが、おそらく最新のソリューションに値するでしょう。

Linux pdfビューアは通常印刷オプション/プロパティを使用してページレイアウトを設定します。そこで、シート/面ごとに複数のページを印刷できます。それらを使用してPDFとしてファイルに印刷する

Evinceも実行できますqpdfview。詳細 こちら


qpdfview

enter image description here

enter image description here


Evince

enter image description here


PDF Studio Viewer

enter image description here

他のPDFビューアには、同様のオプションが必要です。

4
user162573

1つまたは2つのpg pdfを取得し、横向きで横に並べた2部のコピーを含むpdfに変換したい人(チラシを印刷するのに最適)は、次のようにします。

  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をランドスケープビューの1面あたり2ページのPDFに結合します。

    pdfnup out.pdf
    

または、すべて1行で:

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

out.pdfpdfnupへのinputであることに注意してください。 pdfnupからの結果の出力ファイルは、「out-nup.pdf」と呼ばれます。

また、pdfnupコマンドの出力を見ると、実際に実行されているコマンドの詳細な形式がわかります。これにより、コマンドに渡すことができるオプションがわかります。どうやらpdfnupは内部でpdfjamを使用しています:

pdfjam:このpdfjamの実行に対する効果的な呼び出し:

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

例:

元のPDF(縦表示で1つの通常のページ))、「in.pdf」: enter image description here

最終PDF(横向きビューで2ページを並べて))、「out-nup.pdf」:
-中央で半分にカットして、チラシとして渡すことができます enter image description here

単純なBash関数:make_flyer

シンプルで使いやすいコマンドmake flyerにアクセスするには、このbash関数をコピーして「〜/ .bashrc」ファイルの末尾に貼り付けます。

# 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はコマンドへのすべての入力を反復します: https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script/255913#25591
  5. 関数にパラメーターを渡すBash: https://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function/6212408#6212408
  6. 1-pg pdfをチラシに変換する方法[自分のans!]: 1ページをPDFに変換する方法PDFシートごとに2ページのPDFに変換するには?
2
Gabriel Staples

PDFをリーダーズスプレッド、ブックレットスプレッドなどに変換するためのフリーウェアとオープンソースのコマンドラインツールがあります。

使用していたアプリを紛失したので、ヘルプはありませんでしたが、クイック検索でpdfshuffler( http://sourceforge.net/projects/pdfshuffler/ )というプログラムが表示されます。あなたが必要です。 GUIを持っているため、自動化される可能性は低いですが、別のツールのフロントエンドです...

1
horatio

Google Chromeブラウザーは組み込みのPDFプリンター/ビューアーと「PDFとして保存」機能を使用することです。

  1. Chromeタブ内でPDFを開く/ドロップします(ファイルの保存ウィンドウが表示されている場合、PDF内部ビューアオプションを有効にする必要があります。あなたのブラウザ chrome:// settings/content/pdfDocuments

  2. 右クリックして「印刷」を選択します

  3. 印刷パネルで「PDFとして保存」を選択します

  4. 「ページあたりのページ数」でページ数を選択します

注:ページが縦横比が均一でないか異なる場合、私が知る限りページ形式はA4であり、変更する明白な方法が見つかりません。

また、Adobe Acrobatがインストールされている場合は、代わりにAdobe PDFプリンターを使用できます。この場合、より多くの高度なオプションが使用可能になります。

0
Gruber

@mokasin:使用しているPDFリーダーを指定していません。Acrobat/ Adob​​e ReaderのLinuxバージョンを使用している場合:「2-up」を右に印刷するオプションがあります印刷ダイアログ。奇数ページまたは偶数ページのみを印刷するように選択することもできるため、これを組み合わせることで、目的の出力を実現できます。

0
Kurt Pfeifle

ファイルへの出力機能がある場合。ページごとに2ページの設定と奇数ページのファイルに印刷します。偶数ページでプロセスを繰り返します。次に、奇数ページを印刷し、印刷した用紙を裏返し、偶数ページのファイルを印刷します。

0

PyPDF2でこれを行うことができます。以下のコードはあなたの問題の完璧な解決策ではありませんが、うまくいけばグーグルからここに来る他の人を助けるでしょう。

#!/usr/bin/env python

# requires PyPdf2 library, version 1.26 or above -
# its homepage is https://pythonhosted.org/PyPDF2/index.html
# running: ./this-script-name output.pdf file-with-pdf-list

import copy, sys
from PyPDF2 import PdfFileWriter, PdfFileReader, pdf
output = PdfFileWriter()
output_page_number = 0
alignment = 6 # align on 6 pages for printing 6 up
for filename in sys.argv[2:]:

    page = pdf.PageObject.createBlankPage(None, 850, 1100)
    input = PdfFileReader(open(filename, "rb"))

    position = 0
    for i in range(0, input.getNumPages()):
        x = 0
        # Two Up
        # if position == 0:
        #    position = 1
        #    page.mergeScaledTranslatedPage(input.getPage(i), 0.5, 100, 650)
        #else:
        #    page.mergeScaledTranslatedPage(input.getPage(i), 0.5, 100, 100)
        #    output.addPage(page)
        #    page = pdf.PageObject.createBlankPage(output)
        #    position = 0
        # 6 Up
        scale = 0.25
        col1 = 100
        col2 = 450
        sep = 130
        row3 = sep + 25
        row2 = row3 + sep + 215
        row1 = row2 + sep + 215
        if position == 0:
           position = 1
           page.mergeScaledTranslatedPage(input.getPage(i), scale, col1, row1)
        Elif position == 1:
           position = 2
           page.mergeScaledTranslatedPage(input.getPage(i), scale, col2, row1)
        Elif position == 2:
           position = 3
           page.mergeScaledTranslatedPage(input.getPage(i), scale, col1, row2)
        Elif position == 3:
           position = 4
           page.mergeScaledTranslatedPage(input.getPage(i), scale, col2, row2)
        Elif position == 4:
           position = 5
           page.mergeScaledTranslatedPage(input.getPage(i), scale, col1, row3)
        else:
           page.mergeScaledTranslatedPage(input.getPage(i), scale, col2, row3)
           output.addPage(page)
           page = pdf.PageObject.createBlankPage(output)
           position = 0
    if position != 0:
        output.addPage(page)

output.write(open(sys.argv[1], "wb"))
0
Loren

Solaris 11.2オペレーティングシステムでテストしたこのソフトウェアは、2-upと呼ばれるスキームを作成できます。これは通常、教室や会議での配布に使用されます。他のスキームを作成することは可能です。たとえば、1枚の用紙または用紙の両面に3ページまたは4ページ以上の配布資料があります。 JARファイルであるため、ターミナルから実行することも、アクセスを容易にするためにGUIを実行することもできます。 Solarisの他に、他のLinuxディストリビューションにも互換性があり、ソフトウェアを「実行可能」としてスーパーユーザー権限で実行します。 「アーカイブを開く」を使用しないように注意してください。ほとんどの場合、Javaランタイム環境(JRE)がすでにインストールされているWindowsおよびMacでも動作します。ソフトウェアは Dysprosium Imposition です。 =ダウンロードして使用するのは無料です。

0
Any Body