Quel est le plus petit PDF valide possible?

Par simple curiosité, ayant vu le plus petit GIF , quel est le plus petit fichier PDF valide?

C’est un problème intéressant. En prenant cela par le livre, vous pouvez commencer avec ceci:

%PDF-1.0 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj xref 0 4 0000000000 65535 f 0000000010 00000 n 0000000053 00000 n 0000000102 00000 n trailer<> startxref 149 %EOF 

ce qui représente 291 octets de joie PDF. Acrobat l’ouvre, mais il se plaint un peu. Il y a une page et c’est 3/72 “carré, le minimum autorisé par la spécification.

Cependant, Acrobat X ne se soucie même plus de la table de références croisées, alors nous pouvons la supprimer:

 %PDF-1.0 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj trailer<> 

Acrobat se plaint, mais l’ouvre. Maintenant, nous sums à 178 octets. Il s’avère que vous n’avez pas besoin de cela / Taille dans la remorque. Maintenant nous sums à 172:

 %PDF-1.0 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj trailer<> 

Il s’avère que vous n’avez pas besoin de tous ces éléments embêtants dans vos dictionnaires:

 %PDF-1.0 1 0 obj<>endobj 2 0 obj<>endobj 3 0 obj<>endobj trailer<> 

Maintenant, nous sums à 138 octets.

Il s’avère également que lorsque la spécification indique “doit être une référence indirecte” et que / Count est requirejs, et que l’en-tête “doit” être% PDF-1.0, des suggestions sont dessinées. C’est le plus petit que je puisse faire et je peux l’ouvrir dans Acrobat X:

 %PDF-1. trailer<>]>>>>>> 

70 octets.

Maintenant, mon éditeur utilise la discipline Windows newline, mais Acrobat accepte les conventions Windows, Mac ou Unix, donc en utilisant un éditeur hexadécimal, j’ai remplacé \ r \ n par \ r et supprimé la dernière ligne, ce qui me laisse 67 octets

 25 50 44 46 2D 31 2E 0D 74 72 61 69 6C 65 72 3C 3C 2F 52 6F 6F 74 3C 3C 2F 50 61 67 65 73 3C 3C 2F 4B 69 64 73 5B 3C 3C 2F 4D 65 64 69 61 42 6F 78 5B 30 20 30 20 33 20 33 5D 3E 3E 5D 3E 3E 3E 3E 3E 3E 

J’ai essayé d’enlever le dictionnaire de la dernière extrémité (>>), mais Acrobat ne l’a pas. La lecture PDF intégrée à Google Chrome (FoxIt) ne l’ouvrira pas.

En tant que PostScript (HA! Voyez ce que j’ai fait là-bas?), Si vous autorisez Acrobat à “réparer” le fichier, celui-ci dépasse 3550 octets, la plupart étant des métadonnées facultatives, mais laisse derrière lui de nombreuses violations de spécifications.

Je pensais que je ferais un plus petit pdf qui affiche “Hello World”. Le texte est dans le coin inférieur gauche. Désolé pour la police de 9 points, toute plus grande coûterait un octet supplémentaire 🙂

172 octets pour Adobe Reader X (si enregistré avec des nouvelles lignes uniquement et pas de nouvelle ligne ni d’octet nul):

 %PDF-1. 1 0 obj</Contents 2 0 R>>]>>endobj 2 0 obj<<>>stream BT/ 9 Tf(Hello World)' ET endstream endobj trailer<>> 

120 octets pour le lecteur PDF intégré à Chrome:

 %PDF 1 0 obj<>stream BT 9 Tf(Hello World)' ET endstream>>]>>>>endobj trailer<> 

Pour voir cela facilement dans Chrome, collez cet URI dans la barre d’adresse (SO ne me laissera pas le lier, et cela ne fonctionnera pas du tout dans les autres navigateurs):

 data:application/pdf,%25PDF%201%200%20obj%3C%3C%2FPages%3C%3C%2FKids%5B%3C%3C%2FContents%3C%3C%3E%3Estream%0ABT%209%20Tf(Hello%20World)'%20ET%20endstream%3E%3E%5D%3E%3E%3E%3Eendobj%20trailer%3C%3C%2FRoot%201%200%20R%3E%3E 

Je ne pouvais pas obtenir l’exemple de salut du monde à ouvrir.

Pour un fichier small-ish avec un contenu texte:

 %PDF-1.2 9 0 obj << >> stream BT/ 9 Tf(Test)' ET endstream endobj 4 0 obj << /Type /Page /Parent 5 0 R /Contents 9 0 R >> endobj 5 0 obj << /Kids [4 0 R ] /Count 1 /Type /Pages /MediaBox [ 0 0 99 9 ] >> endobj 3 0 obj << /Pages 5 0 R /Type /Catalog >> endobj trailer << /Root 3 0 R >> %%EOF