Bagaimana cara mengubah 1 halaman PDF menjadi 2 halaman per lembar PDF?

44

Saya ingin mencetak PDF sehingga di bagian depan halaman pertama adalah dua halaman pertama, di belakang ke-3 dan ke-4 dan seterusnya.

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

 page 1 - front             page 1 - back

Karena printer saya yang menggunakan Linux gagal mendukung pencetakan dupleks manual yang saya pikir, mungkin saya bisa mengedit pdf dengan cara yang sesuai.

Tapi bagaimana caranya?

mokasin
sumber
Saya tidak berpikir ini mungkin, apakah Anda hanya memiliki pdf?
Michael K
Ini dimungkinkan di Linux menggunakan pstop dari paket psutils dan / atau pdftk. Sistem operasi apa yang Anda jalankan?
Rem
@Ivo Flipse: har, saya pikir persis sama :) jadi, komentar Anda mendapat +1 juga.
akira
@Ivo Flipse, @rems: Anda dapat mengunggah lebih banyak seni ASCII di sini: superuser.com/questions/54054/… dan superuser.com/questions/235074/ ... ... @masin: tautan ini dapat memberi Anda ide cara mengatasi tugas yang Anda minta.
Kurt Pfeifle

Jawaban:

23

Selain apa yang telah disebutkan, PDFjam termasuk alat baris perintah, pdfnupyang melakukan ini. (Itu memanfaatkan paket pdfpages untuk PDFLaTeX di bawahnya, yang juga bisa Anda gunakan.)

Jika Anda lebih suka GUI, jPDFtweak adalah pilihan lain.

luar biasa
sumber
Sempurna. Apa yang saya cari.
mokasin
1
Penggunaan sampel: pdfnup --nup 2x1 mypdf.pdf. Ini mencetak 2 halaman berdampingan per lembar pada tampilan lanskap, untuk dicetak terbalik sisi pendek. Lihat man pdfnupuntuk lebih jelasnya.
Gabriel Staples
Saya telah memutuskan untuk menambahkan jawaban juga: cara mengubah 1 1-pg pdf menjadi tampilan lanskap dengan 2 salinannya digandakan pada halaman yang sama (bagus untuk mencetak selebaran): superuser.com/a/1452008/425838
Gabriel Staples
24

Gunakan pdfnup:

$ pdfnup file.pdf

Ini akan membuat file pdf baru persis seperti yang Anda minta.

Joaquin
sumber
pdfnup menunjukkan opsi baris perintah yang digunakan dengan pdfjam dan Anda dapat mengubah dari sana. (mis: jika Anda tidak ingin memiliki lanskap. Anda dapat menghapus opsi --landscape saat memanggil pdfjam)
Trevor Boyd Smith
6
Lebih tepatnya pdfnup --nup 2x1 --suffix test file.pdfakan membuat file-test.pdfdengan 2 halaman di 1.
lolesque
1
sudo apt install texlive-extra-utilsuntuk menginstal utilitas ini di Ubuntu.
Sarke
Saya punya satu halaman a4, saya ingin mencetak dalam dua salinan a5 per lembar. Bagaimana saya mencapai ini? Contoh penggunaan 'pdfnup' di atas tidak menduplikasi halaman pertama, tetapi sebaliknya membuat bagian a5 kedua dari lembar a4 pertama kosong.
Nordlow
2

Ini adalah pertanyaan yang cukup lama untuk berpikir bahwa opsi yang kita miliki saat ini tidak ada, tetapi mungkin itu layak mendapatkan solusi terbaru.

Linux pdf viewers biasanya menggunakan opsi pencetakan / properti untuk mengatur tata letak halaman, dan di sana Anda dapat mencetak beberapa halaman per lembar / sisi. Idenya adalah menggunakan itu untuk mencetak ke file sebagai PDF .

Evince bisa melakukannya, juga qpdfview . Lebih lanjut di sini.


qpdfview

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini


Memperlihatkan

masukkan deskripsi gambar di sini


Penampil PDF Studio

masukkan deskripsi gambar di sini

Pemirsa pdf lain harus memiliki opsi serupa.


sumber
1

Ada alat baris perintah freeware & open source yang tersedia untuk mengonversi pdf menjadi spread pembaca, spread buklet, dll.

Saya kehilangan aplikasi yang saya gunakan, jadi tidak ada bantuan di sana, tetapi dari pencarian cepat saya melihat sebuah program bernama pdfshuffler ( http://sourceforge.net/projects/pdfshuffler/ ) yang mungkin Anda butuhkan. Memiliki gui, jadi tidak mungkin otomatis, tetapi merupakan ujung depan untuk alat lain ...

horatio
sumber
0

Jika Anda memiliki fasilitas cetak ke file. mencetak ke file dengan dua halaman per pengaturan halaman dan dengan halaman ganjil. ulangi proses dengan halaman genap. Sekarang cetak yang aneh, balikkan kertas yang dicetak dan cetak file halaman genap.

Amirali Sanatinia
sumber
0

@masin: Anda tidak mengatakan pembaca PDF mana yang Anda gunakan. Jika Anda menggunakan Acrobat / Adobe Reader versi Linux: ada opsi untuk mencetak "2-up" tepat di dialog cetak. Anda juga dapat memilih untuk hanya mencetak halaman ganjil atau genap, jadi menggabungkan ini akan membantu Anda untuk mencapai hasil yang diinginkan.

Kurt Pfeifle
sumber
0

Perangkat lunak yang saya uji pada sistem operasi Solaris 11.2 dapat membuat skema yang disebut 2-up, biasanya digunakan untuk dibagikan di ruang kelas atau rapat. Dimungkinkan untuk menghasilkan skema lain; misalnya, bagikan dengan 3 atau 4 halaman pada satu lembar atau kedua sisi lembaran. Itu dapat dijalankan dari terminal karena itu adalah file JAR atau hanya menjalankan GUI untuk kemudahan akses. Selain Solaris, distribusi Linux lainnya juga kompatibel, menjalankan perangkat lunak, sebagai "executable," dengan hak istimewa pengguna super. Waspadai tidak menggunakan "Buka Arsip." Ini juga berfungsi pada Windows dan Mac mana pun yang sudah ada Java Runtime Environment (JRE) yang terinstal, seperti yang sering terjadi. Perangkat lunak adalah Dysprosium Imposition dan bebas untuk diunduh dan digunakan.

Tubuh apa pun
sumber
0

Bagi siapa pun yang ingin mengambil 1 atau 2 pg pdf dan mengubahnya menjadi pdf dengan 2 salinan yang berdampingan dalam tampilan lanskap ( bagus untuk mencetak brosur ), lakukan:

  1. Ubah input pdf 1 atau 2 pg menjadi output yang berisi duplikat halaman-halaman tersebut (1-pg pdf -> 2-pg pdf, 2-pg pdf -> 4-pg pdf, dll):

    pdfunite in.pdf in.pdf out.pdf
    
  2. Gabungkan pdf duplikat-salinan itu menjadi pdf 2-halaman-per-sisi-dalam-lanskap-tampilan, untuk mencetak brosur misalnya:

    pdfnup out.pdf
    

Atau semua dalam satu baris:

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

Perhatikan bahwa out.pdfadalah masukan untuk pdfnup. File keluaran yang dihasilkan pdfnupakan disebut " out-nup.pdf ".

Juga, perhatikan output dari pdfnupperintah dan Anda akan melihat bentuk verbose dari perintah itu benar-benar berjalan, yang memberi Anda beberapa wawasan tentang opsi yang dapat Anda berikan. Rupanya pdfnupmenggunakan di pdfjambawah tenda:

pdfjam: Panggilan efektif untuk menjalankan pdfjam ini:

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

Contoh:

PDF asli (1 pg biasa dalam tampilan Potret), " in.pdf ": masukkan deskripsi gambar di sini

Final PDF (2 pgs berdampingan dalam tampilan Lansekap), " out-nup.pdf ":
- sekarang dapat dipotong menjadi dua bagian tengah untuk dibagikan sebagai selebaran masukkan deskripsi gambar di sini

Fungsi Bash sederhana: make_flyer

Salin dan tempel fungsi bash ini ke bagian bawah file "~ / .bashrc" Anda untuk mendapatkan akses ke perintah sederhana dan mudah digunakan 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\""'

Contoh penggunaan:

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

Lihat Info bantuan:

make_flyer_help

Keluaran:

$ 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"

Referensi:

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

Terkait:

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

Referensi Bash:

  1. Bash Cara meneruskan argumen ke fungsi bash: https://bash.cyberciti.biz/guide/Pass_arguments_into_a_function
  2. Bash Concatenate string: https://linuxize.com/post/bash-concatenate-strings/
  3. Bash mengeksekusi cmd yang disimpan sebagai string! https://stackoverflow.com/questions/2005192/how-to-execute-a-bash-command-stored-as-a-string-with-quotes-and-asterisk
  4. Bash iterate atas semua input ke cmd: https://stackoverflow.com/questions/255898/how-to-iterate-over-arguments-in-a-bash-script/255913#255913
  5. Bash passing parameter berfungsi: https://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function/6212408#6212408
  6. Bagaimana cara mengubah pdf 1-pg menjadi brosur [ans saya sendiri!]: Bagaimana cara mengubah 1 halaman PDF menjadi 2 halaman per lembar PDF?
Gabriel Staples
sumber