| Retour à la catégorie - Programmation | Accueil A525G | Commentaires |
| Livres à propos des documents PDF |
Introduction au format PDFPDF signifit Portable Document Format. Ce format de fichier a été inventé et reste propriétaire de la compagnie Adobe Systems Incorporated. Ce format a été créé pour permettre la conception de documents indépendants du logiciel, matériel et du système d'exploitation avec lequel le document a été conçu. Un document PDF pourrait donc facilement être visualisé sur une petite écran 15 pouces en résolution 800 X 600 pixels d'un ordinateur avec système d'exploitation Mac OS ou encore, un PC fonctionnant sous Microsoft Windows XP avec une écran de 19 pouces et une résolution de 1280 X 1024 pixels! Et le résultat serait identique! La création de documents au format PDF se fait habituellement à l'aide du logiciel Adobe Acrobat à ne pas confondre avec Adobe Acrobat Reader qui est le logiciel utilisé pour la lecture des documents. Il arrive parfois cependant que le besoin d'effectuer la création d'un document PDF par des moyens différents se présente. Par exemple, il peut se révélé utile sur certain site web en XML de générer une verion HTML d'un document à des fins de présentation à l'écran ainsi qu'une version PDF du même document en guise de format d'impression. Cet article présente la base de la composition d'un document PDF et présente un exemple de fichier. À l'aide de ces informations, vous disposerez d'une base vous permettant de faire la création d'application pouvant générer sur commande des documents PDF à partir d'informations puisées dans des document XML ou autre part, comme dans une base de données par exemple. Composition d'un document PDFUn document pdf est constitué de quatre sections distinctes soit :
La fin d'une ligne de code dans un document PDF est déterminée par un retour de chariot, un alinéa ou encore, un retour de chariot suivit d'un alinéa. Voici une description sommaire des différentes sections énnoncées si dessus : HeaderCette section est sans doute, la plus simple de toutes. Elle n'est constituée que d'une seule ligne sur laquelle est spécifiée la version PDF du fichier. Celle-ci peut prendre pour valeur (au moment où ce texte a été écrit), une version comprise entre 1.0 et 1.3. Syntaxe : %PDF-version Exemple : %PDF-1.0 BodyLe corps du document est toujours la partie de celui-ci dans laquelle ont retrouve le plus de code. Celle-ci est constituée d'une série d'objet qui servent à effectuer la représentation du document final. Parmis ces différents objets, nouc pouvons inclure des polices de caractères (fonts), des pages, des images etc... Cross-reference tableLa table de référence contient des renseignements permettant au logiciel de lecture du document PDF d'accéder à des objets sans être obligé de lire le fichier entièrement à chaque fois. Pour tout objet, celle-ci contient donc, une ligne indiquant la position de l'objet dans le document. Une table de référence peut contenir plusieurs sections différentes. Elle contiendra en fait, une section pour chaque mise à jour du fichier. Si le fichier ne contient aucune mise à jour, la table ne comprendra qu'une seule section. La table de référence débute toujours par le mot clé « xref ». Vient ensuite les sous sections, chacune débutant par une entête formée de deux nombres. Le premier est le nombre identifiant le premier objet de la sous section et le second indique le nombre d'entrées dans cette sous section. Chaque ligne d'une sous section est formée d'exactement 20 bytes (incluant le caractère de fin de ligne). Voici un exemple de table de référence contenant une seule sous section et un total de 14 entrées.
xref Les lignes se terminant par un n font référence aux objets utilisés tandis que celles qui finissent par un f indiquent que l'objet est libre, c'est à dire que celui-ci a été détruit et qu'il laisse son numéro à un futur objet. Les objets utilisésLes dix premier chiffres de la ligne (avant le premier espace) contiennent le nombre exact de bytes depuis le début du fichier jusqu'au début de l'objet. Si vous ouvrez un document PDF dans un éditeur de texte (ASCII) comme «Bloc-notes» par exemple et que vous comptez le nombre de caractères depuis le début du fichier jusqu'à un objet en particulier, vous vous rendrez vite compte que le nombre écrit dans la table de référence qui correspond à cet objet est le même. Si on prend le premier objet par exemple, celui-ci sera probablement placé en position 9 car tout ce qui se trouve avant le début de celui-ci, c'est l'entête du fichier PDF formé de 8 caractères soit : « %PDF-1.0 ». En incluant un retour de chariot, nous obtenons 9. Les nombres contenant moins de 10 chiffres sont toujours précédé d'une série de zéro pour compléter la série. Les cinq chiffres suivant la série de 10 chiffres servent à indiquer (dans le cas d'un objet en utilisation) si celui-ci a été réutilisé. Si le fichier vient d'être créé et donc, n'a jamais été modifié, les objets marqués d'un n comprendront tous une série de cinq zéros. ADOBE nomme cette partie de la ligne, le « generation number » (numéro de génération). Les objets libérésDans le cas d'objets qui ont été libérés, les dix premier chiffres contiendront une série de zéro. Les cinq chiffres suivant serviront à concerver en mémoire le numéro de génération qui devra être donné au prochain objet qui utilisera cette emplacement libre. La valeur maximal pour un numéro de génération est « 65535 ». Un objet qui a ce « generation number » ne pourra plus être réutilisé ensuite si ont le libère. TrailerUne application fesant la lecture d'un document PDF débute toujours par la dernière ligne de celui-ci. En effet, le pied de page du document PDF permet à l'application de rapidement trouver l'endroit où se situt la table de référence. La dernière ligne contient toujours le mot clef « %%EOF » (EOF qui signifit End Of File). Les deux lignes précédent la dernière sont formées respectivement du mot clef « startxref » et du nombre de bytes entre le début du fichier et la première lettre du mot xref qui indique le début de la table de référence. Prcédent tout ceci, nous retrouvons un dictionnaire de pied de page (trailer dictionary). Ce dictionnaire consiste en une série d'indications formées de mots clefs suivit de valeurs. Voici la liste des mots clefs qui peuvent paraitre à l'intérieur d'un dictionnaire de pied de page :
Voici un exemple de pied de page d'un document PDF
trailer Document PDF et cryptageLes documents pdf peuvent être crypter permettant ainsi de protéger leur contenu et restreindre leur accès. Les chaines de caractères dans le document sont encryptés mais pas les autres types de données qui forment la structure du document ce qui permet de concerver le mode d'accès aléatoire tout en sécurisant le fichier. Ces chaines de caractères sont cryptées à l'aide de l'algorithme de cryptage RC4. Cet algorithme a été pensé par Ron Rivest en 1987. Il a été développer pour la compagnie RSA Security. Outre le format PDF, cet algorithme est aussi employé dans d'autre technologie tel le protocol SSL. La clé de cryptage est restreinte à 40 bits (au moment où j'écris cet article) pour satisfaire aux normes d'exportation cryptographique imposées par les États-Unis. En principe, l'argorithme pourrait avoir une clef d'une longeur variable entre 1 et 256 octets. Structure d'un document PDF Un document PDF peut être décrit comme une hiérarchie de différents objets contenu dans le corps de celui-ci. La plupart des objets sont des dictionnaires. Voici la liste des objets pouvant être intégré dans la structure d'un document :
Structure de données d'un document PDF Le format PDF offre la possibilité d'utiliser une grande variété de structure de données différentes. Bien que cette article vous en donne la liste complète, il ne décrira en détail que les principales structures. Voici la liste de ces éléments :
La description des différentes structures sera accompagnée d'un de fichier. Ce listing concerne la mise en place de texte dans un document PDF. Note : Pour visualiser le résultat de ce code dans un logiciel de lecture de fichier PDF comme par exemple, Acrobat Reader, vous n'avez simplement qu'à copier le code ci-dessous, le coller dans un éditeur de texte ASCII comme bloc-notes et sauvegarder le fichier sous UnNomQuelconque.pdf. Ensuite, ouvrez le fichier à l'aide de Acrobat Reader pour visionner le résultat.
En regardant le code rapidement, on constate que ca ressemble à pas grand chose de connu n'est-ce pas? Même un programmeur trouvera qu'il n'y a pas de lien avec le type de code qu'il a l'habitude d'écrire. En regardant de plus pret, on peut voir une bonne quantité des éléments décrit un peu plus haut dans les sections «Structure d'un document PDF» et un peu plus haut, «Composition d'un document PDF ». La première ligne contient l'entête, les suivantes, le corps. On vois ensuite la table de référence (xref) au bas du listing et finalement, le pied de page avec le mot clé «startxref» et la fin du fichier représenté par «%%EOF». Note : Je dois avouer que lorsque je parle plus haut de faire la création de document PDF dans un éditeur de texte ASCII comme le Bloc-notes, je parle de tout faire sauf les calculs de position comme par exemple la table xref. En fait, pour celà, j'utilise un petit programme que j'ai réaliser et qui fait les bons calculs de position des objets et longeur de chaines de caractères pour finaliser le document et éviter les erreurs. Je ne me vois pas compter chaque caractère d'un document un à un pour réaliser une table de référence. L'article n'explique cependant pas comment faire la création d'un tel programme. Je prévois cependant faire la création d'un article démontrant comment concevoir un tel programme. Peut-être existe-t-il déjà sur le site A525G au moment où vous faites la lecture de cet article. Description du listingC'est à partir du troisième objet que le code commence à être plus complexe. 3 0 obj << /Type /Pages /Count 2 /Kids [4 0 R 6 0 R] >> Celui-ci est de type Pages. Comme mentionné ci-dessus, il sert en coopération avec l'objet Page à faire la description d'un arbre de page dans le document. L'objet page de ce listing indique que le document contient 2 pages et il nomme ensuite les numéros associés à ces objet comme valeur du mot clef Kids. C'est cependant avec l'objet 4 de type Page qu'on retrouve les premiers renseignements concernant le texte dans le document. /Resources << /Font << /F1 11 0 R /F2 10 0 R >> /ProcSet 8 0 R >> /MediaBox [0 0 612 792] À l'intérieur du groupe de valeurs reliées au mot clef Resources, on retrouve le mot clef /Font qui sert à spécifier une référence vers les objets de type Font qui seront utilisés dans cette page du document. /F1 est le nom d'une première police de caractère et /F2, le nom d'une seconde. Avant de poursuivre la description des lignes de code en rapport avec le texte dans le document, je tiens à faire une petite parenthèse sur le mot clef /MediaBox. Celui-ci sert à spécifier les dimenssions de la page à l'impression. Dans ce cas, les valeur [0 0 612 792] indique que le format sera 8 1/2 X 11. Selon le mot clef /Font dans le mot clef /Resources de la première page, la police de caractère F1 est représenté par l'objet numéro 11. Description du type d'objet Font 11 0 obj << /Type /Font /Name /F1 /Subtype /Type1 /Encoding /WinAnsiEncoding /BaseFont /Arial,Bold /FirstChar 24 /LastChar 255 /Widths [750 750 750 750 750 750 750 750 278 308 473 555 555 863 720 240 330 330 390 585 278 330 278 278 555 555 555 555 555 555 555 555 555 555 330 330 585 585 585 608 975 690 720 720 720 668 608 773 720 278 555 720 608 833 720 773 668 773 720 668 608 720 668 945 668 668 608 330 278 330 585 555 330 555 608 555 608 555 330 608 608 278 278 555 278 885 608 608 608 608 390 555 330 608 533 803 555 533 503 390 278 390 585 750 555 750 278 555 503 998 555 555 330 1005 668 330 998 750 608 750 750 278 278 503 503 353 555 998 330 998 555 330 945 750 503 668 278 338 555 555 555 555 278 555 330 735 368 555 585 330 735 548 398 548 330 330 330 578 555 278 330 330 368 555 833 833 833 608 720 720 720 720 720 720 998 720 668 668 668 668 278 278 278 278 720 720 773 773 773 773 773 585 773 720 720 720 720 668 668 608 555 555 555 555 555 555 885 555 555 555 555 555 278 278 278 278 608 608 608 608 608 608 608 548 608 608 608 608 608 555 608 555 ] /FontDescriptor 12 0 R >> endobj Dans le format PDF, une police de caractère est représentée par un dictionnaire spécifiant le type de police ainsi que d'autres informations à propos de celle-ci comme par exemple des informations permettant de savoir quelle police pourra être utilisée en guise de substitut si la police n'est pas dans l'ordinateur du lecteur. Voici les types de police définit par le format PDF :
Liste des mots clefs de l'objet Font (commun aux 4 types)
Voici la liste des autres mots clefs relié au Type 1 (Type utilisé dans le listing).
Comme vous pouvez le constater, le monde des polices de caractère et du format PDF est sensiblement complexe. Il existe par contre certaines polices qui peuvent être utilisées plus facilement. Ces polices de Type 1 sont au nombre de 14 ce pourquoi, on nomme le regroupement «Base 14». Voici la liste des polices de la Base 14 :
Ses polices et leur informations font partie du logiciel Acrobat. Pour utiliser l'une de ces polices, vous n'auriez qu'à taper le code suivant plutôt que tout le code présenté dans l'objet numéro 11 du listing ci-dessus: /Type /Font/Subtype /Type1 /Name /F1 /BaseFont /Helvetica /Encoding /MacRomanEncoding Comme nous l'avons mentionné plus précédemment, le mot clef FontDescriptor a pour valeur une référence à un objet FontDescriptor. Dans le listing ci-dessus, le FontDescriptor est l'objet numéro 12. Voici le code de cette objet ainsi que la description des mots clefs utilisés : 12 0 obj<< /Type /FontDescriptor /FontName /Arial,Bold /Ascent 923 /CapHeight 773 /Descent -225 /Flags 32 /FontBBox [0 0 0 0] /ItalicAngle 0 /StemV 0 /AvgWidth 563 /MaxWidth 1005 >> endobj Font Descriptor Un «Font Descriptor» spécifit les données métrique de la police ainsi que d'autres information permettant au logiciel de lecture de document PDF de faire la création d'une police de substitution ou de sélectionner une police de caractère similaire lorsque celle-ci n'est pas disponible. Cette objet peut aussi être utilisé pour inclure la police directement dans le document PDF. Description des mots clef utilisés dans le listing :
Liste des autres mots clés disponible de l'objet FontDescriptor
Maintenant que nous sommes plus éclairé sur les objets Font et FontDescriptor. Avant de décrire ces deux objets, nous en étions à parler de l'objet numéro 4. Il reste encore une ligne à se préoccuper dans cet objet. La Voici : /Contents 5 0 R Le mot clé Contents contient une référence à l'objet renfermant le contenu de la page. Dans le cas de notre listing, il s'agit de l'objet numéro 5.
5 0 obj En premier lieu, on trouve le mot clé Length qui sert à spécifier le nombre de caractères, incluant ceux de fin de ligne, situé entre les mots clé «stream» et «endstream». Une «stream» est une chaine de caractère mais à la différence des chaines normales, celles-ci peuvent être lu par portion. La chaine de caractère contient une série d'opérateurs reliés à la mise en forme du texte ainsi que le texte lui-même. Voici la description de chacun des opérateurs utilisés dans la mise en forme du texte.
La création de document PDF est un sujet qui est loin d'être simple. On ne doit pas s'attendre qu'un format de fichier aussi génial et unique en son genre puisse être facile à comprendre. Par contre, lorsqu'on en connait le fonctionnement, il est possible de réaliser des programmes très utile. Comme mentionné en début d'article, vous pouvez créer des programme de conversion de document XML en format PDF. |
|||
Par : Sylvain B.
Date de mise en ligne : 27 juillet 2002 |
|||