วิธีแปลง PDF 1 หน้าเป็น 2 หน้าต่อแผ่น PDF?


44

ฉันต้องการพิมพ์ PDF เพื่อให้ด้านหน้าของหน้าแรกเป็นสองหน้าแรกที่ด้านหลังที่ 3 และ 4 และอื่น ๆ

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

 page 1 - front             page 1 - back

เนื่องจากเครื่องพิมพ์ของฉันที่ใช้ Linux ไม่สนับสนุนการพิมพ์สองด้านด้วยตนเองฉันจึงคิดว่าบางทีฉันสามารถแก้ไข pdf ได้ตามวิธี

แต่อย่างไร


ฉันไม่คิดว่ามันจะเป็นไปได้คุณมี pdf เท่านั้นไหม
Michael K

สิ่งนี้เป็นไปได้บน Linux ที่ใช้ pstops จากแพ็คเกจ psutils และ / หรือ pdftk คุณใช้ระบบปฏิบัติการใดอยู่
rems

@Ivo Flipse: อืมฉันคิดเหมือนกัน :) ดังนั้นความคิดเห็นของคุณก็จะได้รับ +1 เช่นกัน
กิระ

@Ivo Flipse, @rems: คุณสามารถอัปโหลดศิลปะ ASCII เพิ่มเติมได้ที่นี่: superuser.com/questions/54054/…และsuperuser.com/questions/235074/… ... @mokasin: ลิงก์เหล่านี้อาจทำให้คุณมีความคิดในการแก้ปัญหา งานที่คุณขอ
Kurt Pfeifle

คำตอบ:


23

นอกจากสิ่งที่ถูกกล่าวถึงแล้วPDFjamยังมีเครื่องมือบรรทัดคำสั่งpdfnupซึ่งทำสิ่งนี้ (มันใช้ประโยชน์จากแพ็คเกจ pdfpages สำหรับ PDFLaTeX ใต้ซึ่งคุณสามารถใช้ได้)

หากคุณต้องการ GUI jPDFtweakเป็นอีกตัวเลือกหนึ่ง


สมบูรณ์ สิ่งที่ฉันกำลังมองหา
mokasin

1
ตัวอย่างการใช้งาน: pdfnup --nup 2x1 mypdf.pdf. พิมพ์สองหน้าแบบเคียงข้างกันต่อแผ่นในมุมมองแนวนอนเพื่อพิมพ์พลิกเหนือขอบสั้น ดูman pdfnupรายละเอียดเพิ่มเติมได้ที่
Gabriel Staples

ฉันได้ตัดสินใจเพิ่มคำตอบด้วย: วิธีแปลง 1 1-pg pdf เป็นมุมมองแนวนอนพร้อมสำเนา 2 ชุดในหน้าเดียวกัน (เหมาะสำหรับการพิมพ์ใบปลิว): superuser.com/a/1452008/425838
Gabriel ลวดเย็บกระดาษ

24

ใช้ pdfnup:

$ pdfnup file.pdf

สิ่งนี้จะสร้างไฟล์ PDF ใหม่ตามที่คุณขอ


pdfnup แสดงตัวเลือกบรรทัดคำสั่งที่ใช้กับ pdfjam และคุณสามารถปรับแต่งได้ (เช่น: หากคุณไม่ต้องการภูมิทัศน์คุณสามารถลบตัวเลือก --landscape เมื่อโทรหา pdfjam)
Trevor Boyd Smith

6
ยิ่งกว่านั้นpdfnup --nup 2x1 --suffix test file.pdfจะสร้าง a file-test.pdfด้วย 2 หน้าใน 1
lolesque

1
sudo apt install texlive-extra-utilsเพื่อติดตั้ง utils เหล่านี้บน Ubuntu
Sarke

ฉันมีหน้าเดียว a4 ฉันต้องการพิมพ์ a5 สองแผ่นต่อแผ่น ฉันจะทำสิ่งนี้ได้อย่างไร ตัวอย่างการใช้งานของ 'pdfnup' ด้านบนไม่ได้ทำซ้ำหน้าแรก แต่ทำให้ a5 ส่วนที่สองของ a4 แผ่นแรกว่างเปล่าแทน
Nordlöw

2

นี่เป็นคำถามที่เก่าพอที่จะคิดว่าตัวเลือกที่เรามีอยู่ในขณะนี้ไม่ได้อยู่ในเวลา แต่อาจจะสมควรได้รับโซลูชั่นที่ทันสมัย

โดยทั่วไปแล้วโปรแกรมดู pdf ของ Linux จะใช้ตัวเลือกการพิมพ์ / คุณสมบัติเพื่อกำหนดเค้าโครงหน้ากระดาษและคุณสามารถพิมพ์ได้หลายหน้าต่อแผ่น / ด้าน ความคิดที่จะใช้ผู้ที่จะพิมพ์ไปยังไฟล์เป็น PDF

Evinceสามารถทำได้qpdfviewเช่นกัน เพิ่มเติมที่นี่


qpdfview

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


Evince

ป้อนคำอธิบายรูปภาพที่นี่


PDF Studio Viewer

ป้อนคำอธิบายรูปภาพที่นี่

โปรแกรมดู pdf อื่น ๆ จะต้องมีตัวเลือกที่คล้ายกัน


1

มีเครื่องมือบรรทัดคำสั่งฟรีแวร์และโอเพ่นซอร์สที่สามารถแปลง PDF เป็นสเปรดของผู้อ่าน, สเปรดหนังสือเล่มเล็ก ฯลฯ

ฉันทำแอพที่ฉันใช้หายไปดังนั้นจึงไม่มีความช่วยเหลือ แต่จากการค้นหาอย่างรวดเร็วฉันเห็นโปรแกรมที่เรียกว่า pdfshuffler ( http://sourceforge.net/projects/pdfshuffler/ ) ซึ่งอาจเป็นสิ่งที่คุณต้องการ มี gui ดังนั้นจึงไม่น่าจะเป็นแบบอัตโนมัติ แต่เป็นส่วนหน้าสำหรับเครื่องมืออื่น ...


0

หากคุณมีสิ่งอำนวยความสะดวกการพิมพ์เป็นไฟล์ พิมพ์ไปยังไฟล์ที่มีสองหน้าต่อการตั้งค่าหน้าและหน้าคี่ ทำซ้ำขั้นตอนด้วยหน้าคู่ ตอนนี้พิมพ์เอกสารที่แปลก ๆ ย้อนกลับกระดาษที่พิมพ์แล้วและพิมพ์ไฟล์หน้าคู่


0

@mokasin: คุณไม่ได้บอกว่าคุณกำลังอ่าน PDF ตัวไหนอยู่ หากคุณใช้ Acrobat / Adobe Reader เวอร์ชัน Linux: มีตัวเลือกในการพิมพ์ "2-up" ในกล่องโต้ตอบการพิมพ์ คุณสามารถเลือกที่จะพิมพ์หน้าคี่หรือหน้าคู่เท่านั้นดังนั้นการรวมสิ่งนี้จะช่วยให้คุณได้งานพิมพ์ที่คุณต้องการ


0

ซอฟต์แวร์นี้ที่ฉันทดสอบบนระบบปฏิบัติการ Solaris 11.2 สามารถสร้างชุดรูปแบบที่เรียกว่า 2-up ซึ่งมักใช้สำหรับการแจกในห้องเรียนหรือการประชุม มันเป็นไปได้ที่จะสร้างแผนการอื่น ๆ ; ตัวอย่างเช่นแจกด้วย 3 หรือ 4 หน้าขึ้นไปในหนึ่งแผ่นหรือทั้งสองด้านของแผ่นงาน สามารถเรียกใช้จากเทอร์มินัลเนื่องจากเป็นไฟล์ JAR หรือเพียงแค่เรียกใช้ GUI เพื่อความสะดวกในการเข้าถึง นอกจาก Solaris Linux รุ่นอื่น ๆ แล้วยังสามารถใช้งานร่วมกันได้โดยเรียกใช้ซอฟต์แวร์ในชื่อ "executable" โดยมีสิทธิ์ผู้ใช้ขั้นสูง ระวังอย่าใช้ "เปิดที่เก็บถาวร" นอกจากนี้ยังทำงานบน Windows และ Mac ที่ติดตั้ง Java Runtime Environment (JRE) อยู่แล้วซึ่งเป็นกรณีส่วนใหญ่ ซอฟต์แวร์คือDysprosium Impositionและสามารถดาวน์โหลดและใช้งานได้ฟรี


0

สำหรับผู้ที่ต้องการใช้ PDF 1 หรือ 2 pg และแปลงเป็น pdf พร้อมสำเนา 2 ชุดในมุมมองแนวนอน ( เหมาะสำหรับการพิมพ์ใบปลิว )

  1. เปลี่ยนอินพุต 1 หรือ 2 pg pdf เป็นเอาต์พุตซึ่งมีสำเนาซ้ำของหน้าเหล่านั้น (1-pg pdf -> 2-pg pdf, 2-pg pdf -> pdf 4-pg เป็นต้น):

    pdfunite in.pdf in.pdf out.pdf
    
  2. รวมรูปแบบไฟล์ PDF ที่ทำซ้ำที่คัดลอกมาไว้ในรูปแบบไฟล์ PDF 2 หน้าต่อรายการในมุมมองแนวนอนสำหรับพิมพ์ใบปลิว:

    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 -

ตัวอย่าง:

Original PDF (1 pg ปกติในมุมมองแนวตั้ง), " in.pdf ": ป้อนคำอธิบายรูปภาพที่นี่

PDF ขั้นสุดท้าย (2 pgs เคียงข้างกันในมุมมองแนวนอน), " out-nup.pdf ":
- ตอนนี้สามารถลดครึ่งหนึ่งลงตรงกลางเพื่อส่งผ่านเป็นใบปลิว ป้อนคำอธิบายรูปภาพที่นี่

ฟังก์ชั่นทุบตีง่าย: 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 วิธีการส่งผ่านข้อโต้แย้งในฟังก์ชั่นทุบตี: 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/2559131325251313
  5. Bash ผ่านพารามิเตอร์การทำงาน: https://stackoverflow.com/questions/6212219/passing-parameters-to-a-bash-function/6212408#6212408
  6. วิธีแปลง PDF ขนาด 1 pg เป็นใบปลิว [my ans!!]: วิธีแปลง PDF ขนาด 1 หน้าเป็น 2 หน้าต่อแผ่น PDF?
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.