Ich brauchte vor kurzem eine einzelne leere PDF-Seite (8,5 "x 11" Größe) und stellte fest, dass ich nicht wusste, wie man eine von der Befehlszeile aus erstellt.
Beim Ausgeben touch blank.pdf
wird eine leere PDF- Datei erstellt . Gibt es ein Befehlszeilentool, das eine leere PDF- Seite erzeugt ?
command-line
pdf
Brian Fitzpatrick
quelle
quelle
Antworten:
convert
Mit dem in Ketans Antwort verwendeten ImageMagick-Dienstprogramm können Sie auch so etwas wie schreibenoder
oder (für horizontales A4-Papier)
usw. , ohne eine leere Textdatei zu erstellen. @chbrown hat festgestellt, dass dadurch eine kleinere PDF-Datei erstellt wird.
"xc:" bedeutet "X Constant Image", kann aber auch als "x canvas" angesehen werden. Auf diese Weise können Sie einen einzelnen Farbblock angeben, in diesem Fall keinen. Weitere Informationen finden Sie unter http://imagemagick.org/Usage/canvas/#solid. Hierbei handelt es sich um das De-facto-Handbuch für ImageMagick. [Informationen Rohr ergänzt] (Dinge wie
pdf:a
verwendet werden kann , explizit das Format einer Datei zu erklären.label:'some text'
,gradient:
,rose:
undlogo:
scheinen andere Beispiele für spezielle Dateiformate zu sein.)Anko schlug vor, diese Änderung als separate Antwort zu veröffentlichen, also mache ich es.
quelle
~/bin
Wie das kleinstmögliche GIF muss auch das kleinstmögliche PDF mit leeren Seiten von Hand ausgearbeitet werden, da es so klein ist, dass unnötige, aber harmlose Metadaten einen erheblichen Anteil an der Dateigröße haben und die Komprimierung die Sache tatsächlich vergrößert . Es erfordert auch sorgfältige Beachtung der Regeln in der PDF-Spezifikation darüber, welche Bits der Dateistruktur erforderlich sind und welche nicht. (Wissen Sie , dass Seitenobjekte einen enthalten muss
/Resources
Wörterbuch, auch wenn es leer ist, sind aber nicht eine enthalten erforderlich/Contents
Strom?)Wenn Sie keine PDF 1.5-Objekt- und Querverweis-Streams verwenden (was den Vorteil hat, dass die Datei vollständig in ASCII-Format gedruckt werden kann), sind 317 Byte das Beste, was Sie tun können. Wenn das Kopieren und Einfügen, zur Kenntnis nehmen , dass es einen hinteren Raum auf allen vier der Querverweistabelleneinträge werden muss (die Linien zwischen
0 4
undtrailer<<...
), und dass es nicht eine endgültige Newline nach dem sein soll%%EOF
.Durch Ersetzen der Querverweistabelle durch einen manuell erstellten Querverweisdatenstrom der Version 1.5 wird die Datei geringfügig kleiner, da sie nicht mehr druckbar ist (ASCII: 294 Byte). (Der Lesbarkeit halber, ganz zu schweigen von der Möglichkeit, es überhaupt einzugeben, wurde der folgende XRef-Stream hexadezimal ausgegeben, dies wird jedoch nicht im Stream-Wörterbuch wiedergegeben. Um eine gültige PDF-Datei wiederherzustellen, müssen Sie entweder den Hexadezimalauszug durch den folgenden ersetzen entsprechende unformatierte binäre Bytes oder ändern
/Length 15
zu/Length 30/Filter/ASCIIHexDecode
und übernehmen eine Datei , die 328 Bytes lang ist.)Ich habe auch versucht, die Objekte 1 bis 3 in einen Objekt-Stream zu packen, aber dies fügt mehr Overhead hinzu, als es spart, selbst wenn der Stream komprimiert ist.
Eine mögliche alternative Formulierung des XRef-Stroms ist
Trotz der erheblichen Einsparungen bei der Länge der eigentlichen Stream-Daten
/Index[1 4]
verschlingt der zusätzliche Strom bis auf ein Byte alle Einsparungen. Außerdem ist mir unklar, ob Sie das Objekt 0 vollständig aus der Datei entfernen dürfen. (Mir ist auch unklar, ob Objekt 0 die Generationsnummer -1 haben muss. Wenn das nicht erforderlich ist, sparen Sie tatsächlich mehr Bytes mit.)
Um das Papierformat zu ändern, ersetzen Sie es
612 792
durch die entsprechende Breite und Höhe, ausgedrückt in PostScript-Punkten (72 PostScript-Punkte = 1 US-Zoll oder 25,4 Millimeter). Zum Beispiel595 842
für A4. Sie können dies in ein Shell-Skript einbetten, das eine leere PDF-Datei in der gewünschten Papiergröße ausgibt. Der einzige schwierige Teil wäre, sicherzustellen, dass derstartxref
Versatz auch dann genau bleibt, wenn sich die Größe von Objekt 3 ändert.quelle
Wenn Sie
convert
(ein ImageMagick-Dienstprogramm) installiert haben, können Sie dies tun:quelle
convert
Es gibt auch eine-size
Option, mit der Sie die Größe der PDF-Ausgabe festlegen können.convert xc:none -page Letter a.pdf
ohne eine leere txt-Datei zu erstellen.(null)
Schriftfehler ausgelöst .convert.im6: improper image header
a.txt '@ error / txt.c / ReadTXTImage / 429. convert.im6: keine Bilder definierta.pdf' @ error/convert.c/ConvertImageCommand/3044.
echo .bp | groff -T pdf > t.pdf
Präsentiert von groff, der am meisten unterschätzten Software der Welt.
quelle
groff: can't find `DESC' file
undgroff:fatal error: invalid device `pdf'
mit groff version 1.22.2 auf centos 7.2.bash 4.1.2
groff 1.18.1.4
.bp
steht nur für "break page", weshalb dies ein 2-seitiges Dokument erzeugt. Um ein einseitiges Dokument zu erstellen, gehen Sie noch einfacher vorecho | groff -T pdf > blank.pdf
.echo .bp
sollte aber in derecho
tat durch ersetzt werden , genau wie @FaheemMitha sagteSie könnten pdfTeX verwenden:
Dies erzeugt eine leere einzelne Seite
texput.pdf
von ungefähr 900 Bytes, die Hälfte dessen, was ImageMagick verwendet.Dadurch sind Sie jedoch der Standardpapiergröße Ihrer TeX-Installation ausgeliefert. Um die Größe explizit festzulegen, können Sie stattdessen zu LaTeX wechseln:
Eine weitere Möglichkeit wäre die Verwendung des PDF-Treibers von Ghostscript, allerdings mit dem praktischen
ps2pdf
Skript:Das ist viel leiser als TeX, erzeugt aber eine weniger kompakte Ausgabe (ca. 2300 Bytes).
quelle
echo "" | ps2pdf -sPAPERSIZE=a4 - blank.pdf
. Dies ist mit 2200 Bytes etwas kleiner.echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry} \begin{document}\shipout\hbox{}\end{document}' | pdflatex
schafftarticle.pdf
. Ist es möglich, esblank.pdf
direkt erstellen zu lassen ?-jobname <basename>
über die Befehlszeile festlegen .\shipout\hbox{}
odershowpage
produziert eine Seite. Sowohl TeX als auch Postscript verfügen über Schleifenkonstrukte, die Sie verwenden können. Es ist jedoch wahrscheinlich einfacher , die Skriptsprache Ihrer Wahl zu verwenden, um den Befehl entsprechend oft zu duplizieren.Eine einfache Möglichkeit, ein PDF mit einer leeren Seite zu erstellen, ist die Verwendung von
rst2pdf
:Nur ein Echo in einem einzelnen Bereich reicht nicht aus. Am Ende erhalten Sie eine PDF-Datei ohne Seiten (was nicht mit einer leeren Datei identisch ist).
quelle
Geben Sie in der Befehlszeile Folgendes ein:
Mit dem Befehl
ps2pdf
wird eine PostScript-Datei in eine PDF-Datei konvertiertquelle
ps2pdf blank.pdf
gibt einen Fehler zurück, da eine Postscript-Datei als Argument erwartet wird. Und der zweite Befehl setzt voraus, dass er bereits vorhanden istfile.pdf
. Vermisse ich etwas?touch blank.ps
.; 2ps2pdf blank.ps blank.pdf
.; 3.pdftk A=1.pdf B=blank.pdf cat A1-end B output 2.pdf
Zu guter Letzt können Sie mit Ghostscript eine PDF-Datei mit einer leeren Seite erstellen:
Die Seitengröße wird höchstwahrscheinlich Letter sein. Wenn Sie A4 möchten, verwenden Sie Folgendes:
Hintergrund: Auf den
-c
Parameter kann eine beliebige gültige PostScript-Zeichenfolge folgen, die Ghostscript zu interpretieren versucht. Und eine leere Seite in PostScript wird durch diesen kurzen Codeblock dargestellt:quelle