J'ai récemment eu besoin d'un seul blanc PDF (taille 8.5 "x 11") et j'ai réalisé que je ne savais pas comment en faire un à partir de la ligne de commande.
Émission touch blank.pdf
produit un PDF fichier. Existe-t-il un outil en ligne de commande qui produit un PDF page?
convert
, l'utilitaire ImageMagick utilisé dans la réponse de Ketan, vous permet également d'écrire quelque chose comme
convert xc:none -page Letter a.pdf
ou
convert xc:none -page A4 a.pdf
ou (pour le papier A4 horizontal)
convert xc:none -page 842x595 a.pdf
etc. , sans créer de fichier texte vide. @chbrown a remarqué que cela crée un fichier pdf plus petit.
"xc:" signifie "X Constant Image" mais pourrait vraiment être considéré comme "x canvas". C'est un moyen de spécifier un seul bloc d'une couleur, dans ce cas aucun. Plus d'informations sur http://imagemagick.org/Usage/canvas/#solid qui est le manuel "de facto" pour ImageMagick. [complété par des informations provenant de la pipe] (Des choses comme pdf:a
peut être utilisé pour déclarer explicitement le format d'un fichier. label:'some text'
, gradient:
, rose:
et logo:
semblent être d'autres exemples de formats de fichiers spéciaux.)
Anko a suggéré de publier cette modification comme une réponse distincte, donc je le fais.
Comme le GIF le plus petit possible , la plus petite page blanche possible PDF doit être élaborée à la main, car elle est si petite que des bits de métadonnées inutiles mais inoffensifs devenir une partie importante de la taille du fichier, et la compression rend les choses plus grandes. Cela nécessite également une attention particulière aux règles de la spécification PDF sur les bits de la structure de fichier qui sont et ne sont pas requis. (Saviez-vous que les objets de page doivent contenir un /Resources
dictionnaire, même s'il est vide, mais est pas requis pour inclure un /Contents
stream?)
Si vous n'utilisez pas PDF 1.5 objet et flux de références croisées (ce qui a l'avantage que le fichier peut être complètement imprimable en ASCII), je crois que le mieux que vous puissiez faire est de 317 octets. Si vous copiez et coller, notez qu'il doit y avoir un espace de fin sur les quatre entrées du tableau de référence croisée (les lignes entre 0 4
et trailer<<...
), et qu'il n'y a pas censé être une nouvelle ligne finale après le %%EOF
.
%PDF-1.4
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
xref
0 4
0000000000 65535 f
0000000009 00000 n
0000000052 00000 n
0000000101 00000 n
trailer<</Size 4/Root 1 0 R>>
startxref
178
%%EOF
Le remplacement de la table de références croisées par un flux de références croisées v1.5 conçu manuellement rend le fichier légèrement plus petit, au prix de ne plus être imprimable ASCII: 294 octets. (Par souci de lisibilité, sans parler de pouvoir le taper du tout, le flux de xréfs ci-dessous a été hexdumpé, mais ceci n'est pas reflété dans son dictionnaire de flux. Pour récupérer un PDF PDF valide, vous devez soit remplacer le vidage hexadécimal par les octets binaires bruts correspondants, soit modifier /Length 15
à /Length 30/Filter/ASCIIHexDecode
et acceptez un fichier de 328 octets.)
%PDF-1.5
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
2 0 obj<</Type/Pages/Count 1/Kids[3 0 R]>>endobj
3 0 obj<</Type/Page/MediaBox[0 0 612 792]/Parent 2 0 R/Resources<<>>>>endobj
4 0 obj<</Type/XRef/Size 5/W[1 1 1]/Root 1 0 R/Length 15>>stream
0000ff01090001340001650001b200endstream endobj
startxref
178
%%EOF
J'ai également expérimenté l'encapsulation d'objets 1 à 3 dans un flux d'objets, mais cela ajoute plus de surcharge qu'elle n'en enregistre, même lorsque le flux est compressé.
Une autre formulation possible du flux de xréfs est
4 0 obj<</Type/XRef/Size 4/W[0 1 0]/Index[1 4]/Root 1 0 R/Length 4>>stream
091365b2endstream endobj
Malheureusement, malgré les économies substantielles dans la longueur des données de flux réelles, les /Index[1 4]
consomme tout sauf un octet d'économies. De plus, il n'est pas clair pour moi si vous êtes autorisé à laisser l'objet 0 complètement hors du fichier. (Il m'est également difficile de savoir si l'objet 0 doit avoir le numéro de génération -1. Si c'est non requis, vous économisez en fait plus d'octets avec
4 0 obj<</Type/XRef/Size 5/W[1 1 0]/Root 1 0 R/Length 10>>stream
000001090134016501b2endstream endobj
.)
Pour modifier le format du papier, remplacez 612 792
avec la largeur et la hauteur appropriées, exprimées en points PostScript (72 points PostScript = 1 pouce américain ou 25,4 millimètres). Par exemple, 595 842
pour A4. Vous pouvez intégrer cela dans un script Shell qui crache un blanc PDF quel que soit le format de papier souhaité; la seule partie délicate serait de s'assurer que l'offset startxref
reste précis même si la taille de l'objet 3 a changé.
Si vous avez convert
(un utilitaire ImageMagick) installé, vous pouvez le faire:
touch a.txt && convert a.txt -page Letter a.pdf
echo .bp | groff -T pdf > t.pdf
Présenté par groff, le logiciel le plus sous-estimé au monde.
Vous pouvez utiliser pdfTeX:
echo '\shipout\hbox{}\end' | pdftex
qui produit une seule page vierge texput.pdf
d'environ 900 octets, la moitié de ce qu'ImageMagick utilise.
Cela vous met cependant à la merci du format de papier par défaut de votre installation TeX. Pour définir la taille de manière explicite, vous pouvez aller à LaTeX à la place:
echo '\documentclass[letterpaper]{article}\usepackage[pass]{geometry}
\begin{document}\shipout\hbox{}\end{document}' | pdflatex
Encore une autre option serait d'utiliser le pilote PDF PDF de Ghostscript, bien que le ps2pdf
script:
echo showpage | ps2pdf -sPAPERSIZE=letter - blank.pdf
qui est beaucoup plus silencieux que TeX mais produit une sortie moins compacte (environ 2300 octets).
Un moyen simple de créer un PDF avec une page vierge, utilise rst2pdf
:
echo -e '.. raw:: pdf\n\n PageBreak' | rst2pdf -o blank.pdf
l'écho dans un seul espace ne fera pas l'affaire, vous vous retrouverez avec un fichier PDF sans pages (ce qui n'est pas la même chose qu'un fichier vide).
Sur la ligne de commande, tapez:
ps2pdf blank.pdf
la commande ps2pdf
est utilisé pour convertir un fichier PostScript en pdf
ps2pdf file.ps file.pdf
Enfin, voici la manière Ghostscript de créer un PDF montrant une page vide:
gs -sDEVICE=pdfwrite -o empty.pdf -c showpage
La taille de la page sera probablement Lettre. Si vous voulez A4, utilisez ceci:
gs -sDEVICE=pdfwrite -o empty.pdf -g5950x8420 -c showpage
Contexte: le (-c
Le paramètre peut être suivi par n'importe quelle chaîne PostScript valide, que Ghostscript essaiera d'interpréter. Et une page vide dans PostScript est représentée par ce bloc de code court:
%!PS
showpage
Cela produira un PDF de 1 page vierge:
gs -sDEVICE=pdfwrite -o emptyOnePage.pdf -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 -c 1 {showpage} repeat
Remplacez 1
Par un nombre plus grand pour produire plus de pages.
Cela produira un PDF de 64 numéroté pages:
gs -sDEVICE=pdfwrite -o NumberPages64.pdf -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 -c "/Times-Roman findfont 32 scalefont setfont /pagenum 0 def 64 {newpath 250 50 moveto (page ) /pagenum pagenum 1 add def show pagenum ( ) cvs show showpage} repeat"
Remplacez 64
Par le nombre de pages souhaité (1
Fonctionne aussi). 1000000
A fonctionné quand je l'ai essayé - mais j'ai fait pas ouvert que sorti dans une visionneuse de documents!