วิธีการรวมไฟล์ PDF หลายไฟล์?


คำตอบ:


209

รูปแบบไฟล์ PDF Shuffler ติดตั้ง PDF-Shuffler

หากคุณต้องการเครื่องมือที่มี GUI ง่ายลองpdfshuffler จะช่วยให้การรวมไฟล์ PDF เช่นเดียวกับการจัดเรียงใหม่และการลบหน้า สำหรับการประมวลผลแบบแบทช์และ / หรืองานที่ซับซ้อนยิ่งขึ้น pdftk นั้นมีประสิทธิภาพมากกว่าแน่นอน

สกรีนช็อตของ PDF-Shuffler


ฉันลองสิ่งนี้ - มันใช้ไม่ได้กับ 10.04
David Oneill

ในวันที่ 12.04 pdfshuffler มักจะบ่นว่ามี "ค่าที่จะแกะจำนวนมากเกินไป" ทำให้ไม่สามารถใช้งานได้
ดูถูก

8
ติดตั้งและใช้งานได้อย่างมีเสน่ห์ใน 14.04 ขอบคุณมัด !!
Zlatty

1
ฉันยังสามารถยืนยันการpdfshufflerทำงานได้ดีใน 14.04 amd64
conualfy

2
ยังใช้งานได้ดีในวันที่ 16.04.1
Sanjay Manohar

334

pdftkติดตั้ง pdftk

หากต้องการรวมไฟล์ PDF สองไฟล์file1.pdfและfile2.pdf:

pdftk file1.pdf file2.pdf cat output mergedfile.pdf

สามารถดูข้อมูลเพิ่มเติมได้ที่นี่เครื่อง Way Back


5
pdftk เป็นรถ - bugs.launchpad.net/ubuntu/+source/pdftk/+bug/779908 gs อาจช้า แต่ทำงานได้อย่างสมบูรณ์แบบ [คำตอบของ IgnitE]
Pushpak Dagade

@PushpakDagade ghostscript ยุ่งกับคำอธิบายประกอบโดยเฉพาะความคิดเห็นที่ได้รับการตรวจสอบ (ช่องทำเครื่องหมายที่ถูกเลือกด้วยเครื่องหมายถูก) จะไม่มีเครื่องหมายนี้อีกต่อไป ฉันไม่ทราบวิธีรอบนี้ นอกจากนี้หากคุณรวม PDF v1.5 + 1.6 เอาต์พุตจะเป็น 1.4 โดยค่าเริ่มต้น นั่นเป็นพฤติกรรมที่แปลก
Jonathan Komar

2
pdftk มีการใช้งานที่ผิดปกติโดยที่คำสั่งcatและoutputติดตามอาร์กิวเมนต์อินพุตที่หลากหลายและตามมาด้วยอาร์กิวเมนต์เอาท์พุทอีกครั้ง
Jeff Puckett

3
ดูเหมือนว่าแพคเกจจะถูกลบออกในปี 2018.04
Nicolas Raoul

1
@ NicolasRaoul ฉันเพิ่งดาวน์โหลดไปเป็นการติดตั้งแบบรวดเร็ว
Max

161

Ghostscriptเป็นแพ็คเกจ (มีให้ตามค่าเริ่มต้นใน Ubuntu) ที่ให้คุณดูหรือพิมพ์ไฟล์ PostScript และ PDF ไปเป็นรูปแบบอื่นหรือเพื่อแปลงไฟล์เหล่านั้นเป็นรูปแบบอื่น
หากต้องการใช้ Ghostscript เพื่อรวมไฟล์ PDF ให้พิมพ์ดังนี้:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dAutoRotatePages=/None -sOutputFile=finished.pdf  file1.pdf file2.pdf

นี่คือคำอธิบายสั้น ๆ ของคำสั่ง:

gs         starts the Ghostscript program.
-dBATCH    once Ghostscript processes the PDF files, it should exit.
           If you don't include this option, Ghostscript will just keep running.
-dNOPAUSE  forces Ghostscript to process each page without pausing for user interaction.
-q         stops Ghostscript from displaying messages while it works
-sDEVICE=pdfwrite 
           tells Ghostscript to use its built-in PDF writer to process the files.
-sOutputFile=finished.pdf
           tells Ghostscript to save the combined PDF file with the specified name.
-dAutoRotatePages=/None
           Acrobat Distiller parameter AutoRotatePages controls the automatic orientation selection algorithm: For instance: -dAutoRotatePages=/None or /All or /PageByPage.

ไฟล์อินพุตของคุณไม่จำเป็นต้องเป็นไฟล์ PDF คุณยังสามารถใช้ไฟล์ PostScript หรือ EPS หรือทั้งสามอย่างผสมกันก็ได้

มีหลายสิ่งที่คุณสามารถทำได้กับ Ghostscript คุณสามารถอ่านเอกสารประกอบสำหรับรายละเอียดเพิ่มเติม

แหล่ง


2
จริง แต่มันช้าอย่างไม่น่าเชื่อ ฉันเพิ่งลองเรียงไฟล์ PDF ขนาด 45 x 400K หน้าเดียว pdftkใช้เวลา 0m0.484s gsใช้เวลา 1m32.898s (ซึ่งช้ากว่าเกือบ 200 เท่า) ไฟล์จากgsนั้นเล็กกว่าประมาณ 21%
Aidan

2
คำสั่งนี้ยังใช้งานได้หากคุณใช้ไวด์การ์ดสำหรับรายการไฟล์ที่จะรวมกัน ตัวอย่างเช่นแทนที่file1.pdf file2.pdfด้วยfile*.pdf
Antonios Hadjigeorgalis

2
สำหรับฉันgsทำงานกับ PDF ที่ "ไม่เป็นไปตามข้อกำหนด" ที่pdftkจะทำงานตลอดไป
ntc2

1
ใช้-dPDFSETTINGS=/prepressตัวเลือกจากการปรับปรุงคุณภาพ ขอขอบคุณทุกคนเนื่องจากผู้มีส่วนร่วม
Mohnish

6
@AntoniosHadjigeorgalis เพียงเพื่อการอ้างอิงและความเข้าใจที่ดี: นั่นไม่ใช่คำสั่งที่สนับสนุนสัญลักษณ์ตัวแทนนั่นคือเชลล์ที่แทนที่file*.pdfด้วยfile1.pdf file2.pdfก่อนที่จะส่งอาร์กิวเมนต์ไปยังคำสั่ง
Midgard

82

คุณยังใช้ pdfunite เพื่อรวมเอกสาร pdf:

pdfunite in-1.pdf in-2.pdf in-n.pdf out.pdf

12
คำเตือน: ไฟล์ที่มีอยู่out.pdfจะถูกเขียนทับโดยไม่มีการเตือนดังนั้นpdfunite *.pdfจะไม่ทำงานอย่างที่คาดไว้
krlmlr

1
@krlmlr คุณสามารถใส่ผลลัพธ์ลงในไดเรกทอรีอื่นได้เสมอ
BЈовић

ยุติธรรมเพียงพอcpยังเขียนทับอาร์กิวเมนต์ล่าสุดโดยไม่มีการเตือนล่วงหน้า นี่เป็นเพียงสำหรับผู้ใช้ที่รีบเร่ง (เช่นตัวฉันเอง) - ฉันโชคดีที่ฉันได้สำรองไฟล์ที่เป็นปัญหา ...
krlmlr

1
Upvote: นี่เป็นเครื่องมือบรรทัดคำสั่งง่ายๆโดยไม่มี GUI แบบคลิกแล้วปล่อยเหมือนกับคำตอบอื่น ๆ ที่นี่ มันห่อหุ้มความซับซ้อนของโซลูชัน GhostScript (ส่วนใหญ่เทียบเท่า)
tripleee

1
นี่ยังเร็วมาก ทำงานได้ดี บนเซิร์ฟเวอร์ที่ช้ามาก (aws t1.micro) gs ใช้เวลา 9 วินาที pdftk ใช้เวลา 4 วินาทีและ pdfunite นี้ใช้เวลา 0.9 วินาทีสำหรับการรวมสองไฟล์เข้าด้วยกัน!
rsmoorthy

34

เชน PDF ติดตั้ง PDF Chain

ทางออกที่ดีมากคือ PDFChain เป็น GUI เป็นส่วนหน้าของ PDFTK ที่คุณสามารถผสานแยกหรือเพิ่มพื้นหลังบางส่วนให้กับไฟล์ PDF ของคุณ


นี่คือคำตอบที่ดีที่สุด มันทำงานได้อย่างสมบูรณ์แบบโดยไม่คำนึงถึงเวอร์ชันของ Ubuntu
เปาโลโคกี

ทำงานบน Ubuntu 14.04 โดยไม่ต้องยุ่งยาก!
ของฉัน _ram

ใช้งานได้ดีบน Ubuntu 18.04!
orschiro


@ user2413 เป็นสแน็ปสโตร์ไม่ใช่แหล่งเดียวสำหรับซอฟต์แวร์ใน Ubuntu การพยายามค้นหาaptไม่ได้ให้ผลลัพธ์ใด ๆ เช่น: /
jena


8

อีกทางเลือกหนึ่งคือการใช้ลาเท็กซ์ตามที่อธิบายไว้ในโพสต์นี้ ( โดยไม่ต้องเข้าถึงรูทโดยสมมติว่าคุณติดตั้งpdflatexแล้ว): https://tex.stackexchange.com/questions/8662/merge-two-pdf-files-output-by- น้ำยาง

สิ่งนี้มีประโยชน์ในกรณีที่คุณไม่มีเครื่องมือที่กล่าวถึงหรือสิทธิ์ใช้งานรูท แต่คุณมี pdflatex

ผมคัดลอกโค้ด tex ด้านล่างนี้เพื่อผสานและfile1.pdf file2.pdfสร้างไฟล์ชื่อoutput.texและวาง:

\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=-]{file1}
\includepdf[pages=-]{file2}
\end{document}

และเพื่อรวบรวมเพียงใช้: pdflatex output.tex

output.pdfไฟล์ที่ผสานจะได้รับการเสนอชื่อเป็น


6

ฉันใช้ pdfseparate เพื่อแยกหน้าจากไฟล์ pdf ขนาดใหญ่:

pdfseparate -f  156 -l 157 input.pdf  output_%d.pdf 
pdfseparate -f  1   -l 2   input.pdf  output_%d.pdf 

และโดยทั่วไปฉันเข้าร่วมทุกคนด้วยคำสั่ง:

pdfunite $(ls -v output_*.pdf | tr '\n' ' ') out$(date  +%Y-%m-%d_%H_%M_%S ).pdf

สิ่งนี้เข้าร่วม:

output_1.pdf output_2.pdf output_156.pdf output_157.pdf  

เป็น:

out2014-12-14_23_25_36.pdf

อาจจะมีวิธีที่ง่ายกว่าวิธีรับมือ ... :-)


การทดแทนกระบวนการนั้นไม่จำเป็นและอาจเป็นอันตรายได้ ถูกต้องบรรทัดคำสั่งที่ง่ายมากคือแต่ขาดการสั่งซื้อของpdfunite output_*.pdf out$(date +%Y-%m-%d-%H_%M_%S).pdf ls -vการแก้ไขที่ชัดเจนและไม่สำคัญคือการตั้งชื่อไฟล์ของคุณเพื่อให้เรียงตามลำดับที่คุณต้องการรวมไว้ หากคุณต้องการls -vอย่างน้อยคุณสามารถสูญเสียท่อไปtrซึ่งไม่ประสบความสำเร็จที่นี่
tripleee




1

นี่คือแนวทางของฉัน:

  • ฉันต้องการให้เข้าถึงได้ง่ายดังนั้นฉันจึงสร้างทางลัดคลิกขวาใน Nautilus (ดูhttps://help.ubuntu.com/community/NautilusScriptsHowto )
  • ฉันอยากให้มันเร็วมากดังนั้นฉันจึงใช้ pdfunite
  • pdfunite ยอมรับเฉพาะไฟล์พา ธ ที่อยู่ตรงกลางคำสั่งดังนั้นฉันจึงต้องเกาหัวเพื่อจัดการช่องว่างในไฟล์พา ธ ดังนั้นฉันจึงสมมุติว่า filepaths ทั้งหมดจะเริ่มต้นด้วย "/ home /" และลงท้ายด้วย ".pdf"

นี่คือผลลัพธ์:

#!/bin/sh
CLEANED_FILE_PATHS=$(echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS | sed 's,.pdf /home/,.pdf\\n/home/,g')
echo $CLEANED_FILE_PATHS | bash -c 'IFS=$'"'"'\n'"'"' read -d "" -ra x;pdfunite "${x[@]}" merged.pdf'

Juste วางสคริปต์นี้ใน

/home/your_username/.local/share/nautilus/scripts

และตั้งชื่อเป็น "merge_pdfs.sh" (ตัวอย่าง) จากนั้นทำให้สามารถเรียกใช้งานได้ (คลิกขวาที่ merge_pdfs.sh -> แท็บการอนุญาต -> ทำเครื่องหมาย "อนุญาตให้เรียกใช้ไฟล์เป็นโปรแกรม"

ดังนั้นในการรวมไฟล์ pdf คุณเพียงแค่ต้องเลือก -> คลิกขวา -> สคริปต์ -> merge_pdfs.sh และมันจะสร้างไฟล์ "ผสาน" ในไดเรกทอรีเดียวกัน

หวังว่ามันจะช่วย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.