ฉันจะแบ่งหน้าของ PDF ออกเป็นกึ่งกลางได้อย่างไร


38

ไม่มีใครรู้วิธีที่ดีในการแบ่งหน้าของ pdf ลงตรงกลางเป็นสองหน้าใหม่?

เพื่อความชัดเจนฉันไม่ได้พยายามแยกหน้าเว็บที่มีอยู่แล้วออกจาก pdf ฉันกำลังพยายามสร้างหน้าใหม่สองหน้าจากหน้าเดียวที่มีอยู่


ทำไมคุณถึงต้องการทำเช่นนี้? รับหน้าเล็ก
akira

ดี MS Office ไม่ได้เป็นฟรีแวร์, แต่ถ้าคุณมี MS Office 2007 แล้วคุณสามารถเพียงแค่บันทึกเอกสารเป็นไฟล์ PDF และทำตามที่คุณโปรด ...
โอเว่น

ดูเพิ่มเติมstackoverflow.com/q/13345593/321973
Tobias Kienzler

สำเนาซ้ำที่เป็นไปได้ของการแปลง PDF 2 ด้านต่อหน้าเป็น 1 ด้านต่อหน้า
fixer1234

คำตอบ:


26

ลองบริ

ข้อความแสดงแทน

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

มันเป็นแพลตฟอร์มข้ามฟรีและโอเพนซอร์ส


ดูเหมือนว่าสิ่งนี้จะเพิ่มขนาดไฟล์ (เท่า "จำนวนหน้าผลลัพธ์ต่อหน้าที่ป้อนข้อมูล") เนื่องจากใช้เนื้อหาของหน้าต้นฉบับและครอบตัดสำหรับแต่ละหน้าที่ครอบตัด หากคุณต้องการไฟล์ขนาดเล็กคุณสามารถพิมพ์ไฟล์เอาต์พุตเป็น PS แล้วแปลงเป็น PDF แต่คุณอาจสูญเสียคุณภาพ (ตัวอย่างเช่นเนื่องจากแบบอักษรบิตแมป)
tanius

37

คุณสามารถแก้ปัญหานี้ได้ด้วยความช่วยเหลือของ Ghostscript pdftkเพียงอย่างเดียวไม่สามารถทำเช่นนั้น (เพื่อความรู้ที่ดีที่สุดของฉัน) ฉันจะให้ขั้นตอน commandline ให้คุณทำด้วยตนเอง มันจะง่ายต่อการสคริปต์นี้เป็นขั้นตอนยังมีพารามิเตอร์ที่แตกต่างกันสำหรับขนาดหน้าและหมายเลขหน้า แต่คุณบอกว่าคุณสามารถทำได้ด้วยตัวคุณเอง ;-)

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

... และเพื่อความสนุกของมันฉันเพิ่งทำไปไม่ได้กับไฟล์อินพุตที่มีหน้า "double-up" แต่เป็นหน้าหนึ่งที่มี "treble-ups" คุณสามารถอ่านคำตอบสำหรับกรณีนี้ในคำตอบอื่น ๆนี้

กรณีของคุณง่ายยิ่งขึ้น คุณดูเหมือนจะมีสิ่งที่คล้ายกับนี้:

+------------+------------+   ^
|            |            |   |
|      1     |      2     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
             ^
            fold
             v
+------------+------------+   ^
|            |            |   |
|      3     |      4     |   |
|            |            | 595 pt
|            |            |   |
|            |            |   |
|            |            |   |
+------------+------------+   v
<---------- 842 pt -------->

คุณต้องการสร้าง 1 PDF ที่มี 4 หน้าซึ่งแต่ละอันมีขนาด 421 pt x 595 pt

ขั้นแรก

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

gs \
    -o left-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [0 0]>> setpagedevice" \
    -f double-page-input.pdf

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

ครั้งแรกที่รู้ว่าในรูปแบบไฟล์ PDF 1 นิ้ว == 72 จุด จากนั้นส่วนที่เหลือคือ:

  • -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
+------------+  ^
|            |  |
|     1      |  |
|            |595 pt
|            |  |
|            |  |
|            |  |
+------------+  v

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

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

ถัดไปส่วนที่ถูกต้อง:

gs \      
    -o right-sections.pdf \
    -sDEVICE=pdfwrite \
    -g4210x5950 \
    -c "<</PageOffset [-421 0]>> setpagedevice" \
    -f double-page-input.pdf

ผล:

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

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

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

ตอนนี้เรารวมหน้าเป็นไฟล์เดียว เราสามารถทำได้ด้วย ghostscript เช่นกัน แต่เราจะใช้pdftkแทนเพราะเร็วกว่าสำหรับงานนี้:

pdftk \
  A=right-sections.pdf \
  B=left-sections.pdf \
  shuffle A B \
  output single-pages-output.pdf
  verbose

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

ผล:

+------------+ +------------+ +------------+ +------------+   ^
|            | |            | |            | |            |   |
|     1      | |     2      | |     3      | |     4      |   |
|            | |            | |            | |            | 595 pt
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
|            | |            | |            | |            |   |
+------------+ +------------+ +------------+ +------------+   v
<-- 421 pt --> <-- 421 pt --> <-- 421 pt --> <-- 421 pt -->

3
น่ารัก! คุณควรใช้สิ่งนี้ในทุกคำตอบหากคุณต้องการรับ upvotes ต่อไปฟรี!
Ivo Flipse

2
ขั้นตอนที่สองใช้งานได้กับฉันเมื่อฉันใช้ออฟเซ็ตติดลบ"<</PageOffset [-421 0]>> setpagedevice"เท่านั้น: ฉันเดาว่ามันขึ้นอยู่กับทิศทางของไฟล์ต้นฉบับ คำตอบที่ยอดเยี่ยมอย่างไรก็ตาม :)
moraes

1
สำหรับฉันขั้นตอนที่สองยังทำงานร่วมกับเครื่องหมายลบ
Rafareino

9

ขอขอบคุณที่ @marttt ของพวกเขาและคำตอบใน Unix และ Linux

คุณสามารถใช้mutool(ซึ่งเป็นส่วนหนึ่งของmupdf):

mutool poster -x 2 input.pdf output.pdf

คุณสามารถใช้-yหากคุณต้องการแยกแนวตั้ง


นี่เป็นวิธีแก้ปัญหาง่ายๆขอบคุณ น่าเสียดายที่ไม่มีวิธีใดในการเปลี่ยนเนื้อหาบนหน้าเว็บเพื่อปรับระยะขอบ - สำหรับวิธีการใช้งานที่อธิบายโดย Kurt Pfeifle
JánLalinský

0

หากต้องการขยายคำตอบของ @ Kurt (เนื่องจากฉันไม่มีคะแนนชื่อเสียงเพียงพอที่จะแสดงความคิดเห็น) อันดับแรกตรวจสอบให้แน่ใจว่าขนาดที่คุณใช้นั้นไม่ได้ขึ้นอยู่กับขนาดของกล่องครอบตัดหากส่วนขยายนั้นแตกต่างจากขนาดกล่องสื่อ ขนาดเอาต์พุตขึ้นอยู่กับขนาดของ Media Box แต่ออฟเซ็ตดูเหมือนว่าจะใช้ขนาดของ Crop Box

สำหรับหน้าประตูที่มีกล่องสื่อ 20.0833 x 13.833 และกล่องครอบตัด 19.25 x 13.0 ซึ่งเหมือนกับกล่องตัดแต่งในเอกสารของฉันเพื่อแยกเป็นสองหน้าบน Ubuntu ทางซ้าย:

gs -o left.pdf -sDEVICE=pdfwrite -g7230x9960 -c "<</PageOffset [0 0]>> setpagedevice" -f gatefold.pdf

ด้านขวา:

gs -o right.pdf -sDEVICE=pdfwrite -g7230x9960 -c "<</PageOffset [-693 0]>> setpagedevice" -f gatefold.pdf

pdftk left.pdf right.pdf output final.pdfและจากนั้นก็เย็บพวกเขาด้วย

อีกทางเลือกหนึ่งคือการตั้งค่ากล่องครอบตัดให้เหมือนกับกล่องสื่อ จากนั้นอ็อฟเซ็ตจะเป็น -723 แต่จากนั้นการครอบตัดจะต้องถูกรีเซ็ตเพื่อตัดแต่งเพื่อให้หน้าเว็บปรากฏอย่างราบรื่น มิฉะนั้นให้ตั้งค่าสื่อที่จะครอบตัด


หมายเหตุหลังจากแยกหน้าด้วยตัวเลือกคำสั่งเหล่านี้กล่องสื่อจะไม่เปลี่ยนแปลง เฉพาะการครอบตัดเท่านั้น หากคุณแบ่งหน้าหนึ่งเป็นหลายหน้าหน้าใหม่จะเก็บขนาดของกล่องสื่อจากหน้าเก่า ต้องการ sed เพื่อปรับเปลี่ยนขนาดกล่องสื่อ แม้ว่าจะไม่รู้วิธีตั้งค่า Media box ให้ครอบตัดโดยไม่ใส่ตัวเลขในคำสั่ง
motorbaby

อุ่ย ฉันหมายถึงหน้าใหม่เก็บขนาดกล่องครอบตัดจากหน้าเก่า
motorbaby

พบข้อผิดพลาดกับ Acrobat PDF สามารถมองเห็นมิติของ CropBox ใน Set Page Boxes ใน Acrobat แต่ขนาดครอบตัดบ็อกซ์หลังจากใช้ Ghostscript เพื่อแบ่ง gatefold เก็บขนาดหน้าเก่าไว้ในอีกระดับหนึ่ง สามารถเห็นได้ในข้อมูล Preflight Analyze ใน Acrobat หลังจากปรับการครอบตัดใน Acrobat ทางด้านขวาของหน้าซ้ายเป็นการชั่วคราวไปยังหมายเลขที่กำหนดเองแล้วส่งกลับไปที่ 0 ขนาดของกล่องอื่น (การตัดขอบภาพตัดปะและการตัดแต่ง) ก็ปรับเช่นกัน วิธีนี้แก้ไขปัญหาที่ข้อมูลการครอบตัดยังคงแสดงขนาดหน้ากระดาษเก่า หน้าขวาแตกต่างกันเล็กน้อย
motorbaby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.