วิธีการสอบถามขนาดหน้า PDF จากบรรทัดคำสั่ง?


35

สำหรับการเขียนสคริปต์ฉันต้องได้ขนาดหน้าของไฟล์ PDF (มม.)

pdfinfo เพียงพิมพ์ใน 'pts' เช่น:

Page size:      624 x 312 pts

ฉันควรใช้อะไร

หรือหน่วยใดเป็น 'pts' อยู่ดี - ในกรณีที่ฉันต้องการแปลงหน่วย ...


2
จุดบนวิกิพีเดีย
จ้า

คุณต้องการหน้าขนาดใด ขนาดที่ถูกกฎหมายครอบคลุมด้านนอก? ขนาดแผ่นพับ "หน้านี้ว่างเปล่าโดยเจตนา"? ขนาดตัวอักษรสองหน้า?
Ignacio Vazquez-Abrams

คำตอบ:


30

หน่วย 'pts' ที่ใช้โดยpdfinfoแสดงถึงจุด PostScript จุด PostScriptถูกกำหนดไว้ในแง่ของนิ้วและความละเอียด 72 จุดต่อนิ้ว:

ในช่วงปลายยุค 80 ถึงยุค 90 จุดดั้งเดิมถูกแทนที่ด้วยจุดพิมพ์บนเดสก์ท็อป (หรือเรียกอีกอย่างว่าจุด PostScript) ซึ่งกำหนดไว้เป็น 72 จุดต่อนิ้ว ( 1 จุด = 1⁄72 นิ้ว = 25.4⁄72 มม. = 0.352 ¯7มม. [ ≙ 0.3528 มม. ])

คู่มือที่gvมีรายการรูปแบบกระดาษทั่วไปที่ระบุไว้ในคะแนน PostScript


1
ในรูปแบบกระดาษทั่วไป: pdfinfoบางครั้งให้รูปแบบกระดาษ (เช่นPage size: 595.28 x 841.89 pts (A4)) - ฉันสงสัยว่ามันจะทำเช่นนั้นสำหรับรายการขนาดหน้ากระดาษที่รู้หรือไม่?
njsg

2
จุดหนึ่งคือ 0.352777777 ... มม. ดังนั้น0.3528 มม.จึงเป็นการประมาณที่ใกล้กว่า
cjm

14

ไม่ใช่วิธีที่ง่ายที่สุด แต่ให้imagemagickและunitsคุณสามารถใช้

$ identify -verbose some.pdf | grep "Print size" 
Print size: 8.26389x11.6944

เพื่อหาขนาดหน้าเป็นนิ้ว (ซึ่งอาจให้ผลการค้นหาที่หลากหลายหาก PDF ใช้ส่วนข้อมูลที่ต่างกัน) แล้วแปลงตัวเลขดังนี้:

$ units -t '8.26389 inch' 'mm'
  209.90281

หมายความว่า 8.26 นิ้วมี 209.9 มม. (ฉันใช้ A4 PDF สำหรับเรื่องนี้)


1
เมื่อฉันidentifyเป็น PDF ใน OS XI จะไม่ได้รับผลลัพธ์ใด ๆ
David Moles

ดึกมาก แต่identifyต้องใช้ ImageMagick
กำหนด

6

มาในปัญหาเดียวกันและมาถึงวิธีการแก้ปัญหาต่อไปนี้ ฉันไม่ได้จัดทำเอกสารเกี่ยวกับวิธีสร้างไฟล์ pdf ฉันเพิ่งเปรียบเทียบไฟล์ PDF เปล่าสองไฟล์กับขนาดหน้าที่แตกต่างกัน

ดูเหมือนว่าไฟล์ PDF จะมีแอตทริบิวต์ต่าง ๆ ฝังอยู่ระหว่าง "<<" และ ">>" ฉันพบว่าข้อมูลขนาดหน้ามีอยู่ในข้อความธรรมดาและสามารถค้นหาได้ด้วยการค้นหา regex อย่างง่าย

สิ่งนี้อาจเป็นจริงหรือไม่จริงกับไฟล์ PDF ทั้งหมด แต่ใช้ได้กับทุกอย่างที่ฉันสามารถหาได้จากแหล่งที่แตกต่างกัน

ส่วนที่เกี่ยวข้องสามารถมีลักษณะเช่นนี้สำหรับหน้า A4 ขนาด:

/MediaBox [0 0 595 842]
/MediaBox[0 0 595 842]
/MediaBox[ 0 0 595.32 841.92]

มันหมายถึง [0 0 width width] ดังนั้นนี่คือ super lame ของฉัน แต่วิธีแก้ปัญหาในการทำงานเพื่อแยกสิ่งนี้:

cat test.pdf | egrep -ao "/MediaBox ?\[ ?[0-9]+ [0-9]+ [0-9]+(\.[0-9]+)? [0-9]+(\.[0-9]+)?\]" | head -1

เพียงเปลี่ยน test.pdf เป็นไฟล์ของคุณ


1
โปรดทราบว่าค่าที่ส่งคืนโดยสิ่งนี้อยู่ใน "คะแนน" ไม่ใช่ mm, พิกเซลหรือนิ้ว
กำหนดให้

0

ฉันใช้ maxchlepzigs ตอบเพื่อคำนวณ mm โดยตรง:

$ pdfinfo test.pdf | grep "Page size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=0.3528 '{print $1*x}'

วิธีนี้ใช้ได้กับคำตอบของ Alex Knaufs แต่การระบุใช้เวลานานกว่า pdfinfo และต้องใช้ imagemagick แต่ข้อเสียคือคุณสามารถใช้สิ่งนี้กับไฟล์หลาย ๆ ไฟล์ (เช่นโดย cd'ing ในไดเรกทอรีและการใช้งาน*.pdf):

$ identify -verbose some.pdf | grep "Print size" | grep -Eo '[-+]?[0-9]*\.?[0-9]+' | awk -v x=25.4 '{print $1*x}'

grepคำสั่งที่สองรับค่าสองจุด / นิ้ว ฉันค่อนข้างแน่ใจว่าคุณสามารถข้าม grep regex และทำโดยตรงกับ awk แต่ฉันไม่สามารถคิดออก

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