RciTools RPDF - Génération de documents PDF depuis Oracle
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;
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
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;
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.
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;
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