// script dessinant un fond de page pdf
// déclaration variables
var Num,x,i,l,y,d:integer;
Titre,s:string;
LBox,HBox,HMarge,XBox,YBox:integer;
XText,YText,Ltext,HText,XTitre,YTitre,XLigne,YLigne:integer;
CTri,CBox,TExt,CNum,CTitre:string;
//
XCarre,YCarre,LCarre:integer;
CCarre1,CCarre2,Carre:string;
Carres:TStringList;
Font:string;
Ligne:string;
begin

// nom de la fonte
Font := GetParam('Font','courier');
// taille du stylo de tracé 1
PdfPenSize(1);

// couleur boite
CBox := ColorToString(StringToColor(GetParam('ColorBox','clblack')));
// couleur triangle - par défaut déduit du cbox
CTri := GetParam('ColorTriangle',ColorToString(GetHightLightColorValue(StringToColor(CBox), 64)));
// couleur de la numérotation
CNum := ColorToString(StringToColor(GetParam('ColorNum','clwhite')));
// couleur du texte
CTitre := ColorToString(StringToColor(GetParam('ColorTitre','clblack')));

HBox := PdfPageHeight;

// numéro de la page
Num := PdfPageNum;
// on passe en gras 10
PdfFont(Font,'g','10');

// titre de la page
Titre : = PdfTitrePage;

// numero de la page
// si Table des matières on l'affiche en chiffre romain, mais avant on le fait démarrer à 1
if titre='Table des matières' then text := NumtoRomain(1+Num-PdfPageNumOf(titre)) else
Text := IntToStr(Num);



// bordure gauche
LBox := PdfMargeLeft;
PdfFillRect(0,0,LBox,HBox,CBox,CBox);
// ligne haute & basse
PdfPenColor(CBox);
PdfLine(10,PdfMargeTop div 2,PdfPageWidth,PdfMargeTop div 2);
PdfLine(10,PdfPageHeight-(PdfMargeBottom div 2),PdfPageWidth,PdfPageHeight-(PdfMargeBottom div 2));

// Mosaique de petits carrés

// déterminer une couleur claire et une couleur moins claire en fonction de la couleur de base
CCarre1 := ColorToString(GetHightLightColorValue(StringToColor(CBox), 32));
CCarre2 := ColorToString(GetHightLightColorValue(StringToColor(CBox), 8));
// préparation de la mosaique :
// 0 -> vide
// 1 -> couleur 1
// 2 -> couleur 2
Carres := TStringList.create;
Carres.insert(0,'101020');
Carres.insert(0,'110112');
Carres.insert(0,'111112');
Carres.insert(0,'111102');
Carres.insert(0,'111020');
Carres.insert(0,'011122');
Carres.insert(0,'001100');
Carres.insert(0,'111020');
Carres.insert(0,'111112');
Carres.insert(0,'111102');
Carres.insert(0,'111020');
Carres.insert(0,'011122');
Carres.insert(0,'111112');
Carres.insert(0,'111102');
Carres.insert(0,'111020');
Carres.insert(0,'011122');
Carres.insert(0,'111120');
Carres.insert(0,'111112');
Carres.insert(0,'111122');
// détermination taille carre - max 6 par ligne
LCarre := ((LBox-2) div 6)-2;
// parcour des lignes
// 1 mosaique inverse en haut
for y:=Carres.count-1 downto 0 do
begin
Ligne := Carres.strings[y];
YCarre := ((y)*(LCarre+2));
XCarre := 2;
for x:=1 to length(Ligne) do
begin

Carre := GetChar(Ligne,x);
if Carre='1' then PdfFillRect(XCarre,YCarre,LCarre,LCarre,CCarre1,CCarre1) else
if Carre='2' then PdfFillRect(XCarre,YCarre,LCarre,LCarre,CCarre2,CCarre2);
XCarre := XCarre + LCarre+2;
end;
end;
// 2 mosaique en bas
for y:=0 to Carres.count-1 do
begin
Ligne := Carres.strings[y];
YCarre := PdfPageHeight-((y+1)*(LCarre+2));
XCarre := 2;
for x:=1 to length(Ligne) do
begin
Carre := GetChar(Ligne,x);
if Carre='1' then PdfFillRect(XCarre,YCarre,LCarre,LCarre,CCarre1,CCarre1) else
if Carre='2' then PdfFillRect(XCarre,YCarre,LCarre,LCarre,CCarre2,CCarre2);
XCarre := XCarre + LCarre+2;
end;
end;

Carres.free;


// triangle
PdfPenColor(CTri);
PdfFillColor(CTri);
y := pdfMargeTop div 2;
PdfPosXY(0,y);
PdfTrace(pdfMargeLeft,y+pdfMargeLeft);
Pdftrace(0,y+2*pdfMargeLeft);
PdfTrace(0,y);
PdfFillTrace;

PdfPenColor('$000000');
// numérotation
// fonte 24 grasse
PdfFont(font,'g',24);
PdfFontColor(CNum);

// on centre dans le triangle
LText := PdfTextWidth(Text);
HText := PdfTextHeight(Text);
XText := (LBox - LText) div 4;
YText := Y+pdfMargeLeft + (HText div 3);
PdfText(XText,YText,text);

// police pour les textes du haut et bas
PdfFont(font,'g',10);
PdfFontColor(CTitre);
// titre de la page centré en haut
PdfText((PdfPageWidth-PdfTextWidth(Titre)) div 2,(PdfMargeTop div 2)-6,Titre);
// titre du projet centré en bas
Titre := 'Aide help&web';
PdfText((PdfPageWidth-PdfTextWidth(Titre)) div 2,PdfPageHeight-(PdfMargeBottom div 2)+16,Titre);
end;
end.

Sommaire