Comme le plus petit possible GIF , le plus petit a besoin de la page blanche PDF peut être travaillé à la main, car il est si petit que les bits inutiles mais Inoffensif de métadonnées deviennent une partie importante de la taille du fichier et la compression fait réellement des choses plus . Cela nécessite également une attention particulière aux règles de la spécification PDF concernant les éléments de la structure de fichier qui sont ou non requis. (Saviez-vous que les objets de page doivent contenir un /Resources
dictionnaire, même s'il est vide, mais ne sont pas obligés d'inclure un /Contents
flux?)
Si vous n'utilisez pas d'objet PDF 1.5 ni de flux de références croisées (ce qui présente l'avantage que le fichier peut être complètement imprimable en ASCII), je pense que le mieux que vous puissiez faire est de 317 octets. Si vous copiez et collez, notez qu'il doit y avoir un espace de fin sur les quatre entrées du tableau de références croisées (les lignes entre 0 4
et trailer<<...
), et qu’il n’est pas supposé être un retour à la ligne final 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 où il n'est plus imprimable ASCII: 294 octets. (Par souci de lisibilité, sans oublier de pouvoir le saisir du tout, le flux de xréf ci-dessous a été hexdumpé, mais cela ne figure pas dans son dictionnaire de flux. Pour récupérer un fichier PDF valide, vous devez remplacer le fichier hexadécimal par le correspondant octets binaires brutes, ou le changement /Length 15
à /Length 30/Filter/ASCIIHexDecode
et accepter un fichier qui est 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 essayé d'encapsuler les objets 1 à 3 dans un flux d'objet, mais cela ajoute plus de temps système qu'il n'enregistre, même lorsque le flux est compressé.
Une formulation alternative possible du flux de xréf 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 réalisées sur la longueur des données de flux réelles, l’addition supplémentaire /Index[1 4]
absorbe la totalité des économies réalisées sauf un octet. En outre, il m'est difficile de savoir si vous êtes autorisé à laisser l'objet 0 complètement en dehors du fichier. (Il m'est également difficile de savoir si l'objet 0 doit avoir le numéro de génération -1. Si cela n'est pas nécessaire, vous enregistrez davantage 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-le 612 792
par 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 l'intégrer dans un script shell qui crée un fichier PDF vierge, quel que soit le format de papier souhaité. la seule difficulté consiste à s'assurer que le startxref
décalage reste précis même si la taille de l'objet 3 change.