ฉันจะแบ่งหน้าของ 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.