Wie kann ich die Größe einer PDF-Seite über die Befehlszeile abfragen?


35

Für die Skripterstellung muss ich die Seitengröße einer PDF-Datei (in mm) ermitteln.

pdfinfo druckt es einfach in 'pts' aus, zB:

Page size:      624 x 312 pts

Was soll ich benutzen?

Oder welche Einheit ist "PTS" überhaupt - falls ich sie konvertieren möchte ...


2
Point auf Wikipedia
Mat

Auf welcher Seite wollten Sie die Größe? Die legale Größe der Außenhülle? Die Packungsbeilage "Diese Seite ist absichtlich leer"? Die Briefgröße Doppelseiten?
Ignacio Vazquez-Abrams

Antworten:


31

Die von verwendete Einheit 'pts' pdfinfobezeichnet einen PostScript-Punkt. Ein PostScript-Punkt wird in Zoll und einer Auflösung von 72 Punkten pro Zoll definiert:

In den späten 1980er bis 1990er Jahren wurde der traditionelle Punkt durch den Desktop Publishing-Punkt (auch als PostScript-Punkt bezeichnet) ersetzt, der als 72 Punkte pro Zoll ( 1 Punkt = 1 × 72 Zoll = 25,4 × 72 mm = 0,352) definiert wurde 7 mm [ 0,3528 mm ]).

Das Handbuch zu gventhält eine Liste gängiger Papierformate, die in PostScript-Punkten angegeben sind.


1
zu gängigen Papierformaten: pdfinfoGibt mir manchmal das Papierformat (wie Page size: 595.28 x 841.89 pts (A4)) - ich frage mich, ob es das für eine Liste von Seitengrößen tut, über die es Bescheid weiß?
NJSG

2
Ein Punkt ist tatsächlich 0,352777777 ... mm, also 0,3528 mm ist eine engere Annäherung.
cjm

14

Nicht der einfachste Weg, aber vorgegeben imagemagickund unitsman könnte ihn auch nutzen

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

Um die Seitengröße in Zoll zu ermitteln (dies kann zu mehreren Ergebnissen führen, wenn die PDF-Datei unterschiedliche Abmessungen verwendet), und konvertieren Sie die Zahlen wie folgt:

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

Das bedeutet, dass 8,26 Zoll 209,9 mm sind (ich habe dafür ein A4-PDF verwendet).


1
Wenn ich identifyein PDF unter OS X habe, bekomme ich keine Ausgabe.
David Moles

sehr spät, identifyerfordert aber ImageMagick
22.

6

Kam über das gleiche Problem und kam zu der folgenden Lösung. Ich bin nicht auf die Dokumentation zum Aufbau von PDF-Dateien eingegangen. Ich habe nur zwei leere PDF-Dateien mit unterschiedlichen Seitengrößen verglichen.

Es sieht so aus, als hätten PDFs alle Arten von Attributen zwischen "<<" und ">>" eingebettet. Ich habe festgestellt, dass die Informationen zur Seitengröße im Klartext vorliegen und mit einer einfachen Regex-Suche gefunden werden können.

Dies mag auf alle PDFs zutreffen oder auch nicht, aber es funktionierte auf allem, was ich aus verschiedenen Quellen finden konnte.

Der relevante Teil kann für eine A4-Seite wie folgt aussehen:

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

Es bedeutet [0 0 width height] und hier ist meine super lahme, aber funktionierende Lösung, um dies zu extrahieren:

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

Ändern Sie einfach test.pdf in Ihre Datei.


1
Beachten Sie, dass die durch diese zurückgegebenen Werte sind in „Punkte“ nicht mm, Pixel oder Zoll
defuzed

0

Ich habe maxchlepzigs Antwort verwendet, um die mm direkt zu berechnen:

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

Dies funktioniert auch mit Alex Knaufs Antwort, aber das Identifizieren dauert viel länger als pdfinfo und erfordert imagemagick. Der Vorteil ist jedoch, dass Sie dies für mehrere Dateien verwenden können (z. B. indem Sie in ein Verzeichnis schreiben und Folgendes verwenden *.pdf):

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

Der zweite grepBefehl ruft die zwei Punkt- / Zollwerte ab. Ich bin mir ziemlich sicher, dass Sie den regulären Ausdruck grep überspringen und ihn direkt mit awk ausführen können, aber ich konnte es nicht herausfinden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.