แปลง PDF 2 ด้านต่อหน้าเป็น 1 ด้านต่อหน้า


12

ฉันจะแปลง PDF ที่มี 2 ด้านต่อหน้าเป็น 1 ด้านต่อหน้าได้อย่างไร


นี่มันบ้าสุด ๆ ! จะไม่มีวิธีเปลี่ยนการตั้งค่าหน้ากระดาษในรูปแบบ PDF เป็นด้านเดียวแทนที่จะเป็นแบบสองด้านหรือไม่
Nathan Fellman

@Nathan Fellman: บ้าจริง ๆ แต่บางครั้งสิ่งที่บ้าคลั่งก็ทำให้คุณสนุกที่สุด ;-)
Kurt Pfeifle


@SkippyleGrandGourou ฉันไม่เห็นว่าคำถามนั้นเกี่ยวข้องกันอย่างไร คำถามไม่พยายามทำสองสิ่งที่แตกต่างกับหน้าเว็บใช่หรือไม่
Ben N

@BenN: คำถามทั้งสองถามวิธี "สร้างหน้าใหม่สองหน้าจากหน้าเดียวที่มีอยู่" เพื่ออ้างอิงอีกหน้าหนึ่ง คำตอบที่โหวตมากที่สุดคือเกือบ copypasta
Skippy le Grand Gourou

คำตอบ:


24

ตกลงปัญหาได้รับการแก้ไขแล้วด้วยความช่วยเหลือของ Acrobat (เวอร์ชันเต็มไม่ใช่ Reader) แต่จะทำอย่างไรถ้าคุณไม่มีสิทธิ์เข้าถึง Acrobat สิ่งนี้สามารถทำได้ด้วย Ghostscript และ pdftk เช่นกัน?

วิธีแก้ปัญหานี้ด้วยความช่วยเหลือของ Ghostscript ...

... และเพื่อความสนุกของมันอย่าใช้ไฟล์อินพุตกับหน้า "double-up" แต่เป็นไฟล์ที่มี "treble-up" อันที่จริงฉันได้รับ PDF หนึ่งฉบับในวันนี้ทางอีเมล มันเป็นใบปลิวพับโครงการ Leporello ของ ขนาดแผ่นคือแนวนอน A4 (842pt x 595pt) และมันถูกพับและจัดวางแบบนี้:

Front side to be printed, page 1 of PDF
+--------+--------+--------+   ^
|        |        |        |   |
|   5    |   6    |   1    |   |
|        |        |        | 595 pt
|        |        |        |   |
|        |        |        |   |
|        |        |        |   |
+--------+--------+--------+   v
         ^        ^
        fold     fold
         v        v
+--------+--------+--------+   ^
|        |        |        |   |
|   2    |   3    |   4    |   |
|        |        |        | 595 pt
|        |        |        |   |
|        |        |        |   |
|        |        |        |   |
+--------+--------+--------+   v
Back side to be printed, page 2 of PDF
<---------- 842 pt -------->

ฉันต้องการสร้าง 1 PDF ที่มี 6 หน้าซึ่งแต่ละอันมีขนาดที่ผิดปกติคือ 280.67pt x 595 pt

ขั้นแรก

ก่อนอื่นให้แยกส่วนด้านซ้ายออกจากหน้าป้อนข้อมูลแต่ละหน้า:

gswin32c.exe ^
    -o left-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [0 0]>> setpagedevice" ^
    -f myflyer.pdf

พารามิเตอร์เหล่านี้ทำอะไร

  • -o ...............:ตั้งชื่อไฟล์เอาต์พุต Implicitely -dBATCH -dNOPAUSE -dSAFERยังใช้
  • -sDEVICE=pdfwrite : เราต้องการ PDF เป็นรูปแบบผลลัพธ์
  • -g................:กำหนดขนาดสื่อออกเป็นพิกเซล ความละเอียดเริ่มต้นของ pdfwrite คือ 720 dpi ดังนั้นคูณด้วย 10 เพื่อรับการจับคู่สำหรับ PageOffset
  • -c "..............:ขอให้ Ghostscript ประมวลผลข้อมูลโค้ด PostScript ที่กำหนดไว้ก่อนไฟล์อินพุตหลัก (ซึ่งต้องติดตามด้วย-f)
  • <</PageOffset ....:ชุดเลื่อนภาพหน้าบนสื่อ (แน่นอนสำหรับหน้าซ้ายการเปลี่ยนแปลงโดย[0 0]ไม่มีผลกระทบจริง)
  • -f ...............: ประมวลผลไฟล์อินพุตนี้

คำสั่งสุดท้ายที่ได้ผลสำเร็จใด?

อันนี้:

Output file: left-sections.pdf, page 1
+--------+  ^
|        |  |
|   5    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: left-sections.pdf, page 2
+--------+  ^
|        |  |
|   2    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

ขั้นตอนที่สอง

ทีนี้ลองทำสิ่งที่คล้ายคลึงกันสำหรับส่วนตรงกลาง:

gswin32c.exe ^
    -o center-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [280.67 0]>> setpagedevice" ^
    -f myflyer.pdf

ผลลัพธ์:

Output file: center-sections.pdf, page 1
+--------+  ^
|        |  |
|   6    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: center-sections.pdf, page 2
+--------+  ^
|        |  |
|   3    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

ขั้นตอนที่สาม

สุดท้ายส่วนที่ถูกต้อง:

gswin32c.exe ^
    -o right-sections.pdf ^
    -sDEVICE=pdfwrite ^
    -g2807x5950 ^
    -c "<</PageOffset [561.34 0]>> setpagedevice" ^
    -f myflyer.pdf

ผลลัพธ์:

Output file: right-sections.pdf, page 1
+--------+  ^
|        |  |
|   1    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v

Output file: right-sections.pdf, page 2
+--------+  ^
|        |  |
|   4    |  |
|        |595 pt
|        |  |
|        |  |
|        |  |
+--------+  v
< 280 pt >

ขั้นตอนสุดท้าย

ตอนนี้เรารวมหน้าเป็นไฟล์เดียว:

pdftk.exe ^
  A=right-sections.pdf ^
  B=center-sections.pdf ^
  C=left-sections.pdf ^
  cat A1 B2 C2 A2 B1 C1 ^
  output single-files-input.pdf
  verbose

เสร็จสิ้น นี่คือผลลัพธ์ที่ต้องการ 6 หน้าแตกต่างกันขนาด 280.67x595

ผลลัพธ์:

+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   ^
|        |  |        |  |        |  |        |  |        |  |        |   |
|   1    |  |   2    |  |   3    |  |   4    |  |   5    |  |   6    |   |
|        |  |        |  |        |  |        |  |        |  |        | 595 pt
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
|        |  |        |  |        |  |        |  |        |  |        |   |
+--------+  +--------+  +--------+  +--------+  +--------+  +--------+   v
< 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt >  < 280 pt > 

1
อึศักดิ์สิทธิ์งานศิลปะที่ยอดเยี่ยมที่นี่!
Ivo Flipse

สิ่งนี้ทำงานได้ดีสำหรับฉัน แต่ฉันต้องตั้งค่า PageOffset ให้เป็นจำนวนลบเพื่อให้ได้ส่วนอื่น ๆ
jonchang

คุณสามารถใช้ Python สำหรับ PDF ที่ใหญ่กว่า: f = open("order.dat","w") for i in [a+1 for a in xrange(63)]: f.write("A{0} B{0} ".format(i)) f.close()วิธีนี้จะสร้างไฟล์order.datด้วย "A1 B1 A2 B2 ... A63 B63" pdftkจากนั้นคุณสามารถคัดลอกวางมัน
Suuuehgi

4

เพิ่งมีปัญหาเดียวกัน ฉันสะดุดเมื่อ briss เครื่องมือ java GUI แบบโอเพนซอร์สสำหรับการแยกและการครอบตัดหน้า PDF:

http://sourceforge.net/projects/briss/

มันใช้งานได้ดีมากสำหรับฉันบน Linux แม้ว่าส่วนต่อประสานผู้ใช้จะไม่สำคัญเลย มันใช้งานได้กับไฟล์ PDF ที่มีหน้าขนาดต่างกันด้วย!


3

@peims ขอบคุณ นี่คือวิธีการรุ่นของคุณทีละขั้นตอน ฉันลองใช้ไฟล์ที่ฉันต้องการแปลงเป็น Kindle DX ของฉันและทำงานได้อย่างสมบูรณ์:

  • ใช้ Acrobat เวอร์ชันเต็มเพื่อครอบตัดด้านซ้ายของหน้าและบันทึกเป็น "left.pdf":
    • ใช้เครื่องมือครอบตัดเพื่อทำเครื่องหมายทางด้านซ้ายของหน้า
    • คลิกขวาและเลือก "Set Cropbox"
    • เลือก "เอกสาร .. ครอบหน้า" และใช้การครอบตัดกับเอกสารทั้งหมด
  • ทำซ้ำกับหน้าขวาบันทึกเป็น "right.pdf"
  • ในขั้นตอนนี้คุณมีสองเอกสาร: "left.pdf" ที่มีหน้าซ้ายและ "right.pdf" พร้อมกับหน้าขวา

จากนั้นใช้ pdftk.exe (จากhttp://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/ ) เพื่อแทรกผลลัพธ์เป็นไฟล์เดียว คัดลอก "pdftk.exe", "left.pdf" และ "right.pdf" ไปยัง "D: \" และดำเนินการ:

  • D:> pdftk D: \ left.pdf เอาท์พุทการระเบิด% 05d_A.pdf
  • D:> pdftk D: \ right.pdf เอาท์พุทการระเบิด% 05d_B.pdf
  • D:> pdftk * _ ?. pdf เอาท์พุท cat รวมกัน. pdf

หมายเหตุ: หากคุณคัดลอกไฟล์ไปที่ "C: \" มันจะไม่ทำงานภายใต้ Win 7 เนื่องจากสิทธิ์ด้านความปลอดภัย หากคุณไม่มี D: \ ให้สร้างไดเรกทอรี "C: \ x" เพื่อดำเนินการให้เสร็จสิ้น

ผลลัพธ์เหล่านี้โดยปกติจะดีพอ อย่างไรก็ตามมีสองขั้นตอนเพิ่มเติมเพื่อปรับปรุงผลลัพธ์

  • (ขั้นตอนสุดท้ายที่เป็นตัวเลือก 1) ในขั้นตอนนี้เอกสารมีขนาดใหญ่มาก (เอกสารของฉันเพิ่มขึ้นจาก 7MB เป็น 80MB) ดังนั้นคุณสามารถลดขนาดไฟล์โดยใช้อย่างใดอย่างหนึ่ง:
    • "เครื่องมือเพิ่มประสิทธิภาพ. pDF ขั้นสูง" หรือ:
    • "Advanced..Preflight" พร้อมการตั้งค่า "Compatible with Acrobat 5"
  • (ขั้นตอนสุดท้ายทางเลือก 2) หน้าเว็บมีขนาดแตกต่างกันทั้งหมด ทำซ้ำการครอบตัดทุกหน้าเพื่อให้ทุกอย่างมีขนาดเท่ากัน

2

คุณสามารถทำสำเนาเอกสารจากนั้นครอบตัดหน้าเพื่อให้หมายเลขหน้าเท่ากันแสดงในไฟล์เดียวและเฉพาะหมายเลขหน้าคี่ในอีกไฟล์หนึ่ง จากนั้นแบ่งไฟล์เป็นหน้าเดียวและรวมกันอีกครั้งเพื่อสร้างเอกสารเดียวที่มีด้านเดียวเป็นหน้า ...

คุณสามารถทำได้โดยใช้วิธีการหลายอย่างเช่น:

  1. ใช้เครื่องมือครอบตัดAdobe Acrobatเพื่อครอบตัดด้านหนึ่งของหน้าคู่และใช้การครอบตัดกับทุกหน้า
  2. แบ่งไฟล์ออกเป็นแต่ละหน้าโดยใช้คำสั่ง 'burst' ในpdftoolkit
  3. เปลี่ยนชื่อไฟล์ตามลำดับโดยใช้เครื่องมือเปลี่ยนชื่อไฟล์ (เช่นReNamer )
  4. รวบรวมหน้าใหม่โดยใช้คำสั่ง 'cat' ใน pdftoolkit

2

ฉันใช้สคริปต์ต่อไปนี้เพื่อประมวลผลหนังสือที่สแกนบน Mac และ Linux นี้สามารถรับหน่วยความจำค่อนข้างมาก

#!/bin/bash
#
# This script processes scanned books. After scanning the books have been cropped with
# Preview. This does kind of a "soft crop" that we need to make a bit "harder". 
#
# The second step is to take each page of the PDF and split this into two two pages, 
# because each page of the scanned document actually contains two pages of the book.
#
#

FILE=`mktemp`.pdf
FILE2=`mktemp`.pdf
FILE3=`mktemp`.pdf

echo "Making a temporary copy of the input file."

cp $1 $FILE

#
# Start cropping
#

echo "Cropping the PDF"

# The first regex removes all boxes but CropBox. The second regex renames the  CropBox as MediaBox

perl -pi.bak -e 's/\/(Media|Bleed|Art|Trim)Box[\n\l\f\s]*\[(.+?)\]//msg;' $FILE
perl -pi.bak -e 's/CropBox/MediaBox/g;' $FILE

echo "Validating the PDF"

#Run PDFTK to ensure that the file is OK

cat $FILE | pdftk - output $FILE2

#
# Done cropping, start splitting the pages
#

echo "Splitting the pages in two and changing to 200 dpi with imagemagick. Output goes to $FILE3"

convert -density 200  $FILE2 -crop 50%x0 +repage $FILE3

#
# Done spliting, copy the result in a new file
#


mv $FILE3 $1.pages.pdf

1

ขอบคุณสำหรับการอ้างอิงที่ดี ฉันอยู่ในปัญหาที่คล้ายกัน แต่ต้องการแบ่งปันสิ่งที่ทำงานให้ฉัน

ฉันมีรูปแบบแท็บลอยด์ในแนวนอนที่มีรูปแบบข้อความที่เน้นแนวตั้งทางด้านซ้ายเท่านั้น แท็บลอยด์ที่สำคัญ 2-up หายไปเนื้อหาใด ๆ ทางด้านขวาของหน้า จุดเริ่มต้นที่คล้ายกัน แต่แท็บลอยด์คือ 792 × 1224 (แนวตั้ง), 1124 x 792 (แนวนอน) และนิยามจุดสำหรับแท็บลอยด์ 1/2 ที่ฉันต้องการคือ 612 x 792 จุด

"C:\Program Files\gs\gs9.10\bin\gswin64c.exe" -o left2.pdf -sDEVICE=pdfwrite -g6120x7920 -c "<</PageOffset [0 0]>> setpagedevice" -f "RFP.pdf"

ให้เนื้อหาที่ฉันต้องการเป็นแนวตั้งขนาด 8.5 x 11 อ่านได้มากขึ้น


0

สิ่งที่ฉันเข้าใจคือไฟล์ PDF ที่แสดงสองหน้า (เคียงข้างกันบนแผ่นงานหนึ่ง) จะต้องมีการแปลงเป็นหนึ่งหน้าต่อแผ่นทำให้เกิดไฟล์ PDF สองแผ่น กล่าวอีกนัยหนึ่งหากมีทั้งหมดสามสิบหน้าใน 15 แผ่นเราจำเป็นต้องแปลงไฟล์ PDF เป็นไฟล์ PDF ที่มี 30 แผ่นโดยแต่ละแผ่นแสดงหนึ่งหน้า หากปัญหานี้ฉันได้ใช้ Adobe acrobat XI PRO "เครื่องมือดึงหน้า" โดยการระบุหมายเลขหน้าจาก 1 ถึง 30


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