RciTools RPDF - Génération de documents PDF depuis Oracle

 

01-Exemple le plus simple

Génération du document PDF le plus simple.

New initialise la structure d'un nouveau document PDF.
Write permet l'écriture d'une chaîne de caractères, à la position "courante".
Show termine la page en cours, termine le document PDF et l'envoie au navigateur HTTP.

L'appel des différentes instructions doit commencer par le "nom du package", qui est RPDF.
Le package peut être "appelé" d'un schéma Oracle différent, en spécifiant ce droit  (Grant execute ...).

begin 
  RPDF.New;
  RPDF.Write ('Bonjour les amis ! Comment ça va ?');
  RPDF.Show;
end;


02-Ecriture dans un document PDF du contenu d'un champ Oracle Application Express

La variable "chaîne de caractères" w accède au contenu du champ texte nommé  p1_x, puis cette variable est affichée dans le document PDF, avec l'instruction Write

declare
  w varchar2(255);

begin
  RPDF.New;
  w := :p1_x; -- Accès au contenu du champ de texte nommé p1_x
  RPDF.Write (w);
  RPDF.Show;
end;


03-Ecriture dans un document PDF de plusieurs lignes de texte, avec retours à la ligne

L'utilisation de l'instruction Write sans arguments particuliers incrémente automatiquement la "position courante" en tenant compte du corps de la police de caractères utilisée.

begin
  RPDF.New;
  RPDF.Write ('Lundi suit le Dimanche');
  RPDF.Write ('Mardi vient après Lundi');
  RPDF.Write ('Vendredi précède Samedi');
  RPDF.Show;
end;


04-Utilisation de différentes typographies

Cet exemple utilise les différentes typographies définies en standard en PDF. Ces 5 formes de base, avec leurs variantes Gras et/ou Italiques constituent les 14 polices "de base".

L'instruction TFont permet de spécifier quelle doit être la police de caractères "courante", avant d'utiliser l'instruction Write.

Les minuscules accentuées et caractères spéciaux français sont directement gérés.

begin
  RPDF.New;
  RPDF.TFont ('Times');     RPDF.Write ('Times ABCDEF');
  RPDF.Write ('é à @ # % ù û a à ä â e é è ê i ï î ç ñ Ñ');
  RPDF.TFont ('Helvetica'); RPDF.Write ('Helvetica ABCDEF');
  RPDF.TFont ('Courier');   RPDF.Write ('Courier ABCDEF');
  RPDF.TFont ('Symbol');    RPDF.Write ('Symbol ABCDEF');
  RPDF.TFont ('Zapf');      RPDF.Write ('ABCDEFGHIJKLMNOPQ');
  RPDF.Show;
end;


05-Attributs typographiques

Cet exemple, ainsi que la plupart des exemples suivants, utilise la syntaxe des arguments "nommés" du langage PL/SQL:   
                    nom_argument => valeur

L'attribut  t de l'instruction Write comporte le texte à afficher.
Les attributs tBold tItal permettent d'indiquer si on veut un affichage en utilisant les définitions de polices en gras ou en italique.

Ce n'est pas un "graissage" ou une "italisation" des caractères, mais l'utilisation de la police précise.
Par exemple, l'écriture en Helvetica, gras et italique, utilise la police PDF nommée 
Helvetica-BoldOblique
 

declare
  w varchar2 (100);

begin
  RPDF.New;
  RPDF.Write (t=>'Times style normal');
  RPDF.Write (t=>'Style gras',     tBold=> true);
  RPDF.Write (t=>'Style italique', tItal=> true);
  RPDF.Write (t=>'Gras Ital' ,     tBold=> true, tItal=> true);
  RPDF.Tfont ('Helvetica');              - On passe en Helvetica
  RPDF.Write (t=>'Helvetica gras', tBold=> true);
  RPDF.Write (t=>'Helvetica italique', tItal=> true);
  RPDF.Show;
end;


06-Ecriture de texte dans différentes tailles de caractères

Cet exemple montre comment utiliser une structure de boucle, permettant l'écriture de lignes de texte, dans les corps 4 à 26.
Les unités utilisées sont les points, sous forme entière ou réelle.

On peut par exemple générer un texte en corps  11.235 de façon à ce que ce texte "tienne" dans un cadre déterminé.

L'argument tSize de l'instruction Write sert à indiquer le corps dans lequel on veut écrire un texte.

declare
  w varchar2(100);

begin
  RPDF.New;

  for m in 4..26 loop
    w := 'écriture de texte en corps ' || m;
    RPDF.Write (t=>w, tSize => m);
  end loop;

  RPDF.Show;
end;


07-Ecriture de texte à des positions précises de la page PDF

Les coordonnées d'un document PDF ont comme origine le point (0,0) qui se trouve en bas à gauche.
On retrouve les mêmes repères que dans le langage PostScript.
Les axes horizontaux et verticaux sont orientés vers la droite et vers le haut.

Les arguments x et y de l'instruction Write définissent le point de départ de l'écriture d'un nouveau texte.
L'utilisation de l'instruction Write , utilisée sans arguments de positionnement, incrémente automatiquement la "position courante" en tenant compte du corps de la police de caractères utilisée
 

declare
  w varchar2(100);

begin
  RPDF.New;
  w := 'Ecriture dans le coin haut à gauche ';
  RPDF.Write (t=>w, x => 5, y => 490);

  RPDF.Write ('Ecriture d''une nouvelle ligne, à la suite ');
  RPDF.Write (t=>'Haut à droite', x => 530, y => 490);

  RPDF.Write (t=>'En bas à gauche',x => 5, y => 5 );

  RPDF.Show;
end;


08-Ecriture de texte vertical

L'argument tVert de l'instruction Write , s'il est positionné à True indique que le texte devra être décomposé en caractères, écrits les uns en dessous des autres, de haut en bas.

On peut toujours indiquer explicitement la position de départ (avec les arguments x et y), ou, sans ces arguments, "repartir de la position courante".

 

declare
  w varchar2 (100);

begin
  RPDF.New;
  RPDF.Write (t => 'ORACLE', tVert => true);

  RPDF.Write (t => 'HTML DB', tVert => true, x => 40);

  w := 'VERTICAL TEXT';
  RPDF.Write (t => w, tVert => true, x => 100, y => 457);

  RPDF.Write (t => w, tVert => true, x => 120, y => 437);

  PDF.Show;
end;


09-Ecriture de texte en diagonale

L'argument tOblic de l'instruction Write , s'il est positionné à True indique que le texte devra être décomposé en caractères, écrits les uns en dessous des autres, de haut en bas, avec le même décalage horizontal, que si ils étaient écrits sur la même ligne..

declare
  w varchar2 (100);

begin
  RPDF.New;

  RPDF.Write (t => 'ORACLE', tOblic => true);
  RPDF.Write (t => 'ABCD',   tOblic => true, x=> 15,y => 370);

  RPDF.Show;
end;

 


10-Ecriture de texte centré horizontalement

C'est l'argument tAlign de l'instruction Write , s'il est positionné à 'center' qui indique que le texte devra être centré sur la position x.

L'instruction calcule automatiquement la largeur totale du texte, en fonction de la police de caractères et du corps (taille de la police), de façon à décaler le point de départ de l'écriture vers la gauche, de façon à ce que le centre de la chaîne de caractère soit affiché exactement à la position x indiquée.

Dans ce cas l'argument x , indiquant le centre du texte, doit obligatoirement être renseigné.

Il est possible également de combiner ceci avec l'argument y de position verticale, et d'autres arguments de style de texte.
 

declare
  w varchar2 (100);

begin
  RPDF.New;

  RPDF.Write (t => 'ORACLE',  tAlign => 'center', x=>130);
  RPDF.Write (t => 'HTML DB', tAlign => 'center', x=>130);

  w := 'Génération de PDF';

  RPDF.Write (t => w,      tAlign => 'center', x=>130);
  RPDF.Write (t => 'APEX', tAlign => 'center', x=>130, y=>350);

  w := 'RCI Informatique';

  RPDF.Write (t=>w,  tAlign=>'center',x=>130,y=>200, tItal=>true);

  RPDF.Show;
end;


11-Ecriture de texte avec alignement à droite

C'est l'argument tAlign de l'instruction Write , s'il est positionné à 'right' qui indique que le texte devra être aligné à droite, en tenant compte d'une largeur totale spécifié par l'argument tW.

On utilise également, dans l'exemple ci-dessous, la possibilité de "forcer" la variable de position courante, en affectant une valeur à la variable générale nommée LastTxtX. Cette variable fait partie de la structure de données nommée wD qui décrit le "document courant", en cours de génération.

Sinon on aurait pu, de façon plus simple, indiquer  x=>20  dans les instructions Write, afin d'utiliser un argument explicite de position horizontale.
 

declare
  w varchar2 (100);

begin
  RPDF.New;

  RPDF.Write (t => 'ORACLE', tAlign=>'right',x=>20, tW=>250);
  RPDF.Write (t => 'HTML DB',tAlign=>'right',x=>20, tW=>250);

  w := 'Génération de PDF';

  RPDF.wD.LastTxtX := 20; --Forçage à 20 de la dernière abscisse

  RPDF.Write (t=>w,  tAlign=>'right',  tW=>250,  tFont=>'Courier');

  w := 'Application Express';

  RPDF.wD.LastTxtX := 20; --Forçage à 20 de la dernière abscisse

  RPDF.Write (t =>w,tAlign=>'right',tW=>250,tFont=>'Helvetica');

  RPDF.Show;
end;


12-Ecriture de montants avec formatage et alignement à droite

Il est possible d'utiliser l'instruction Write avec, non pas un argument textuel  t=>,  mais un argument  numérique nommé dn.
Cette utilisation suppose que l'on indique également une taille (largeur) maximale qu'occupera l'affichage de ce montant, par l'argument tW, déjà utilisé dans l'alignement à droite.

Cette forme d'utilisation de Write met en oeuvre la variable d'environnement PDF nommé wD.CurrentFormatNumber, qui utilise les règles de formatage de la fonction Oracle SQL nommée  To_Char (number, format)
 

declare
  wM number := 233.45;
  aNumber number;
  nbWidth number := 170;

begin
  RPDF.New;

  RPDF.wD.CurrentFormatNumber := '999G999G999G999G990D00';

  for m in 1..10 loop
    aNumber := wM * m * 17.97; -- nombre calculé
    RPDF.Write (dn => aNumber, tW => nbWidth , x=> 20);
  end loop;

  RPDF.Show;
end;


13-Textes en couleur

Un certain nombre de couleurs sont prédéfinies.
Il est possible d'utiliser des noms de couleurs en français ou en anglais.

L'instruction Write possède un un argument  optionnel nommé color.
L'utilisation d'une couleur rend celle-ci "couleur courante".
 

declare
  wM number := 233.45; aNumber number;
  nbWidth number := 170;

begin
  RPDF.New;
  RPDF.Write (t=> 'Oracle');
  RPDF.Write (t=> 'Oracle',    color=> 'rouge');
  RPDF.Write (t=> 'Application Express'); -- même couleur
  RPDF.Write (t=> 'Oracle XE', color => 'vert vif clair');
  RPDF.Write (t=> 'HTML DB',   color => 'bleu');
  RPDF.Write (t=> 'PL-SQL',    color => 'gris clair');
  RPDF.Write (t=> 'RCI Informatique', color => 'lavande');
  RPDF.Write (t=> 'PDF',       color => 'bleu delave');

  RPDF.Show;
end;



Retour au sommaire de génération PDF



Tous droits réservés, RCI Informatique SAS, 2004-2006

rci@wanadoo.fr

www.rci-informatique.fr