Dernière mise à jour :2008-07-25

informatique

PDF 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 PDF

Un document pdf est constitué de quatre sections distinctes soit :

  • L'entête (header)
  • Le corps (body)
  • Table de référence (cross reference table)
  • Pied de page (trailer)

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 :

Header

Cette 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

Body

Le 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 table

La 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
0 14
0000000000 65535 f
0000000009 00000 n
0000000074 00003 n
0000000120 00000 n
0000000183 00000 n
0000000365 00000 n
0000008910 00000 n
0000009092 00000 n
0000011135 00000 n
0000000000 00005 f
0000011349 00000 n
0000012474 00000 n
0000013599 00000 n
0000013789 00000 n

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és

Les 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és

Dans 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.

Trailer

Une 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 :

  • Size
    • (Requis)
    • Valeur : Entier
  • Root
    • (Requis)
    • Valeur : Dictionnaire
  • Encrypt
    • (Requis si le document est crypté)
    • Valeur : Dictionnaire
  • Prev
    • (Optionel)
    • Valeur : Entier
  • Info
    • (Optionel)
    • Valeur : Dictionaire
  • ID
    • (Optionel)
    • Valeur : Tableau

Voici un exemple de pied de page d'un document PDF

trailer
<<
/Size 14
/Root 1 0 R
>>
startxref
17
%%EOF

Document PDF et cryptage

Les 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 :

  • Catalog
    • Cet objet est la racine du document.
  • Outlines
    • Cet objet sert à décrire des signets (bookmarks) dans le but de former une arborescence comme celles qui apparaissent dans la partie gauche du logiciel Acrobat Reader.
  • Pages
    • Cet objet sert d'objet parent à un groupe d'objet Page ou autres objets Pages dans le but de former un arbre de pages
  • Page
    • L'objet page est un dictionnaire de description d'une page unique
  • Thumbnails
    • Les documents pdf peuvent contenir une série de petites images (thumbnails), format réduit des pages réelle de celui-ci. Cette objet sert à décrire ces petites images.
  • Annotations
    • Les annotations sont des objets associés à la page mais qui sont séparé de la description de la page elle-même. Voici une liste de annotations :
      • Liens hypertexte
      • Notes
      • video
      • sons
      • gadgets logiciel (widgets)
  • Actions
    • Offre la possibilité de définir une action qui sera déclenchée par un événement quelconque (ouverture du document, clic d'un lien ou autres)
  • AcroForm
    • Apparut avec la version 1.2 de Acrobat, cette élément permet au document PDF d'être représenté comme un formulaire comportant une série de champ. Un document PDF peut contenir au plus, un AcroForm bien que les champs de celui-ci peuvent être répartie arbitrairement sur l'ensemble des pages du document.
  • Names
    • Le «Catalog» du document contient une clef nommé «Names». La valeur de cette clef est un dictionnaire. Chacune des valeurs dans ce dictionnaire est un «Name Tree».
  • Info
    • La section «Trailer» du document peut contenir une référence à un dictionnaire d'information (info dictionary) qui contient un certain nombre d'informations à propos du document. Ce dictionnaire contient une ou plusieurs clef dont la valeur est une chaine de caractère.
  • File ID
    • Les documents PDF peuvent contenir une référence à d'autre document PDF. Puisque le nom de fichier peut être interprété différemment selon les systèmes d'exploitation, on peut aussi se servir d'un «File ID» pour identifier le document se qui augmente les chances qu'on retrouve celui-ci.
  • Articles
  • Encryption dictionary
  • Sounds
  • Web capture
  • Logical Structure

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 :

  • Rectangle
  • Date
  • Destination
  • File specification
  • Resources dictionaries
  • ProcSets
  • Fonts
  • CIDFonts
  • Font encodings
  • CMaps
  • Font descriptors
  • Color spaces
  • XObjects
  • Functions
  • Extended graphics states
  • Halftones
  • Patterns
  • Smooth Shading
  • Property lists
  • Name tree
  • Number tree

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.

Listing 1.0 Document PDF et texte
%PDF-1.0
1 0 obj
<<
/Type /Catalog
/Pages 3 0 R
/Outlines 2 0 R
>>
endobj
2 0 obj
<<
/Type /Outlines
/Count 0
>>
endobj
3 0 obj
<<
/Type /Pages
/Count 2
/Kids [4 0 R 6 0 R]
>>
endobj
4 0 obj
<<
/Type /Page
/Parent 3 0 R
/Resources << /Font << /F1 11 0 R /F2 10 0 R >> /ProcSet 8 0 R >>
/MediaBox [0 0 612 792]
/Contents 5 0 R
>>
endobj
5 0 obj
<< /Length 136>>
stream
2 J
BT
/F1 10 Tf 80 Tz
2 Tc
20 708 TD [(Article de A525G)] TJ
0 -20 TD [(Le format PDF)] TJ
0 -20 TD [(Mon premier document PDF)] TJ
ET
endstream
endobj
6 0 obj
<<
/Type /Page
/Parent 3 0 R
/Resources << /Font << /F1 11 0 R /F2 10 0 R >> /ProcSet 8 0 R >>
/MediaBox [0 0 612 792]
/Contents 7 0 R
>>
endobj
7 0 obj
<< /Length 106>>
stream
2 J
BT
/F2 12 Tf 80 Tz
2 Tc
20 708 TD [(Une seconde page avec une police de caractère différente.)] TJ
ET
endstream
endobj
8 0 obj
[/PDF /Text]
endobj
9 0 obj
<<
/Type /FontDescriptor
/FontName /Arial
/Ascent 900
/CapHeight 780
/Descent -225
/Flags 32
/FontBBox [0 0 0 0]
/ItalicAngle 0
/StemV 0
/AvgWidth 540
/MaxWidth 1020
>>
endobj
10 0 obj
<<
/Type /Font
/Name /F2
/Subtype /Type1
/Encoding /WinAnsiEncoding
/BaseFont /Arial
/FirstChar 24
/LastChar 255
/Widths [750 750 750 750 750 750 750 750 285 330 360 555 555 900 675 195 330 330 390 585
285 330 285 285 555 555 555 555 555 555
555 555 555 555 285 285 585 585 585 555
1020 675 675 720 720 675 615 780 720 285
510 675 555 825 720 780 675 780 720 675
615 720 675 990 645 675 615 285 285 285
450 555 330 555 555 510 555 555 285 555
555 225 225 510 225 855 555 555 555 555
330 510 285 555 495 705 480 495 495 330
255 330 585 750 555 750 225 555 330 1005
555 555 330 1005 675 330 1005 750 615 750
750 225 225 330 330 345 555 1005 300 1005
510 330 945 750 495 675 285 330 555 555
555 555 255 555 330 735 375 555 585 330
735 555 405 555 330 330 330 585 540 285
330 330 360 555 840 840 840 615 675 675
675 675 675 675 1005 720 675 675 675 675
285 285 285 285 720 720 780 780 780 780
780 585 780 720 720 720 720 675 675 615
555 555 555 555 555 555 900 510 555 555
555 555 270 270 270 270 555 555 555 555
555 555 555 555 615 555 555 555 555 495
555 495 ]
/FontDescriptor 9 0 R
>>
endobj
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
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
xref0 13
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000183 00000 n
0000000336 00000 n
0000000521 00000 n
0000000674 00000 n
0000000829 00000 n
0000000857 00000 n
0000001043 00000 n
0000002168 00000 n
0000003293 00000 n
trailer
<<
/Size 13
/Root 1 0 R
>>
startxref
3483
%%EOF

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 listing

C'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 :

  • Type 1
  • Type 3
  • TrueType
  • Type 0

Liste des mots clefs de l'objet Font (commun aux 4 types)

  • Type
    • Type de l'objet. Pour créer un objet Font, celui-ci doit avoir la valeur Font.
  • Name
    • Nom donnée à la police qui sert au niveau des références
  • Subtype
    • Type de la police de caractère. Notre police F1
  • BaseFont
    • C'est le nom PostScript de la police, c'est à dire que c'est le nom utilisé avec les opérateurs «definefont» et «findfont» à l'intérieur d'un programme en PostScript.
  • Encoding
    • Un dictionnaire d'encodage. Les encodage prédéfinis sont : MacRomanEncoding, MacExpertEncoding et WinAnsiEncoding. Dans le cas du listing, c'est WinAnsiEncoding qui est indiqué.
  • ToUnicode

Voici la liste des autres mots clefs relié au Type 1 (Type utilisé dans le listing).

  • FirstChar
    • Spécifit le code du premier caractère définit dans le tableau Widths.
  • LastChar
    • Spécifit le code du dernier caractère définit dans le tableau Widths.
  • Widths
    • Un tableau de code de caractères allant de LastChar vers FirstChar + 1. Donc, dans le cas de notre listing, si on soustrait 255 (LastChar) à la valeur FirstChar (24) et qu'on ajoute 1 au résultat, on obtient effectivement le nombre de code de caractères contenu dans le tableau soit : 232.
  • FontDescriptor
    • Une référence à un objet FontDescriptor utilisé pour décrire la composition de la police outre les informations fournies dans le tableau Widths.

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 :

  • Courier
  • Courier-Bold
  • Courier-BoldOblique
  • Courier-Oblique
  • Helvetica
  • Helvetica-Bold
  • Helvetica-BoldOblique
  • Helvetica-Oblique
  • Times-Roman
  • Times-Bold
  • Times-Italic
  • Times-BoldItalic
  • Symbol
  • ZapfDingbats

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 :

  • Type
    • Le type de l'objet. Pour créer un «Font Descriptor», la valeur doit être «FontDescriptor».
  • FontName
    • Nom PostScript de la police. Ce mot clé est requis.
  • Ascent
    • La hauteur maximual au-dessus de la ligne de base «base line» atteint par des caractères dans cette police, à l'exclusion de la taille des caractères accentués. Ce mot clé est requis.
  • CapHeight
    • C'est la coordonnée y du dessus des lettres majuscules, 0 étant la position y de la ligne de base. Ce mot clé est requis.
  • Descent
    • C'est la profondeur maximal sous la ligne de base qui peut être atteinte par un caractère de cette police. La valeur de ce mot clef est toujours un nombre négatif. Ce mot clé est requis.
  • Flags
    • Un regroupement de «Flags» (valeur booléennes) indiquant plusieurs caractéristique de la police. C'est valeurs booléennes sont toutes répartie sur un entier 32 bits. Voici la liste de ces «Falgs» (nom et position dans l'entier 32-bit):
      • Fixed-width font : 1
      • Serif font : 2
      • Symbolic font : 3
      • Scriptfont : 4
      • Reserved : 5
      • Uses the Adobe Standard Roman Character Set : 6
      • Italic : 7
      • Reserved : 8-16
      • All-cap font : 17
      • Small-cap font : 18
      • Force bold at small text sizes : 19
      • Reserved : 20-32
      Dans le cas de notre code exemple, le mot clé Flags a pour valeur 32. Si on convertit cette valeur en binaire, on obtient 100000. Donc, seulement un bit sur les 32 a la valeur 1 et c'est le sixième. Donc, si on regarde la liste ci-dessus, celà fait référence à «Uses the Adobe Standard Roman Character Set». Ce mot clé est requis.
  • FontBBox
    • Une description de la boîte de circonscription maximale d'une police. La boîte de circonscription maximale correspond au plus petit rectangle dans lequel les contours de tous les glyphes (caractères) d'une police pourraient être peints l'un sur l'autre en faisant coïncider leurs origines. La valeur consiste en une liste de quatre nombres. Le séparateur utilisé est la virgule. Ce mot clé est requis.
  • ItalicAngle
    • C'est l'angle des caractères de la police calculé en sans inverse des aiguilles d'une montre. Dans le cas de notre exemple, la police n'est pas de type italique donc, on donne la valeur 0 à cette clé. Ce mot clé est requis.
  • StemV
    • La largeur (basé sur la coordonnée x) de la tige dominante des glyphes de la police. Ce mot clé est requis.
  • AvgWidth
    • La moyenne de la largeur des glyphes. Ce mot clé est optionnel.
  • MaxWidth
    • La largeur maximal des caractères dans cette police.

Liste des autres mots clés disponible de l'objet FontDescriptor

  • FontFile
  • FontFile2
  • FontFile3
  • Leading
  • MissingWidth
  • StemH
  • XHeight
  • CharSet

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
<< /Length 136>>
stream
2 J
BT
/F1 10 Tf 80 Tz
2 Tc
20 708 TD [(Article de A525G)] TJ
0 -20 TD [(Le format PDF)] TJ
0 -20 TD [(Mon premier document PDF)] TJ
ET
endstream
endobj

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.

  • BT
    • Initialisation d'un objet texte.
  • Tf
    • Indique la dimenssion (size) de la police. Dans notre exemple, on lui donne la valeur de 10 ce qui représente approximativement la dimenssion standard d'un caractère.
  • Tz
    • Indique la dimenssion l'échelle en terme de largeur des caractère de la police. Dans le listing, la valeur de Tz est de 80 ce qui est une largeur conventionnel. Pour bien vérifier l'effet que cette propriété peut donner au texte, changez la valeur pour 10 et vérifier le résultat dans votre logiciel de lecture Acrobat Reader. Vous aurez de la difficulté à lire ce qui est écrit.
  • Tc
    • Sert à indiquer l'espace entre chaque caractères. La valeur par défaut de cette propriété est de zéro. La valeur indiqué dans le listing est de 2 se qui se rapproche du même résultat que 0.
  • TD
    • Permet de positionner le texte dans la page. À l'intérieur d'un bloc de texte (entre BT et ET), si vous inscrivez plusieurs coordonnées, chaque coordonnées se base sur la précédente. Ainsi, dans notre exemple on indique qu'on désire placé le texte «Article de A525G» à la coordonnée x 20 et y 708 (le point 0,0 étant situé au bas de la page à gauche). Ensuite, puisqu'on veut placer le texte «Le format PDF» à la position x 20 aussi, on indique la valeur 0 puisque la coordonnée est basée sur la valeur précédente. Si on aurait indiqué 20 comme valeur de x, le texte «Le format PDF» se serait placé un peut plus à droite que le texte «Article de A525G».
  • TJ
    • Permet l'affichage de chaine de caractère.
  • ET
    • Fin d'une zone de 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.

Auteur : Sylvain Bilodeau

Date de mise en ligne : 2002-07-27

Aucun commentaire pour l'instant.