Retourner aux forums || Retourner au forum Astuces.divers

Astuces.divers : [Perl] Modifier un PDF avec PERL

Posté par Gérard Verdier () le 01 juin 2006
0
Dernièrement, j'ai eu besoin de modifier un grand nombre de documents PDF, en ajoutant un en-tête et un numéro de page sur chaque page. J'ai pu réaliser cette opération rapidement en utilisant Perl et le module PDF::API2. Voici une version "light" du script Perl que j'ai utilisé : #!/usr/bin/perl use PDF::API2; my $file=shift; my $out_file=shift||"test.pdf"; my $page_cnt=shift||1; my $pdf = PDF::API2->open($file); my $f1=$pdf->corefont('Times-Roman',-encode => "latin1"); my $f2=$pdf->corefont('Times-Italic',-encode => "latin1"); for my $p (1..$pdf->pages()){ my $page=$pdf->openpage($p); $page->add_font($f1); $page->add_font($f2); my $gfx = $page->gfx; $gfx->save; $gfx->fillcolor('black'); $gfx->textstart; # Ajout du numéro de page centré en bas $gfx->font($f1,10); $gfx->translate(297.5,30); $gfx->text_center("$page_cnt"); # Ajout de l'entete en haut à droite $gfx->font($f2,10); $gfx->translate(570,812); $gfx->text_right("Texte placé en haut à droite"); $gfx->textend; $gfx->restore; $page_cnt++; } $pdf->saveas($out_file); exit; Vous pouvez aussi placer dans la boucle les instructions suivantes pour afficher en arriere plan de chaques page le mot "TOP-SECRET" en rouge et en diagonal : my $gfx2 = $page->gfx(1); $gfx2->save; $gfx2->fillcolor('red'); $gfx2->translate(297.5,420); $gfx2->rotate(30); $gfx2->font($f1,80); $gfx2->text_center("TOP SECRET"); $gfx2->textend; $gfx2->restore; ( c'est le (1) de l'appel de $page->gfx(1) qui permet la mise en arrière plan de texte) Pour finir un dernier exemple qui permet d'ajouter un logo (logo.jpg) en haut à gauche sur toutes les pages : #!/usr/bin/perl use PDF::API2; my $file = shift; my $out_file = shift||"test.pdf"; my $pdf = PDF::API2->open($file); my $nb_pages = $pdf->pages(); my $img = $pdf->image_jpeg('logo.jpg'); for my $p (1..$nb_pages){ my $page=$pdf->openpage($p); my $gfx = $page->gfx(1); $gfx->save; $gfx->image($img,40,790,0.4); # 0.4 est le facteur d'echelle $gfx->restore; } $pdf->saveas($out_file); P.S.: Si PDF::API2 n'est pas déja installé sur votre système, vous pouvez utiliser la commande : perl -MCPAN -e "install PDF::API2" pour l'installer.

> Lire le message (3 commentaires, moyenne: 1,3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

PHP

Posté par ADN733r () le 15/07/2006 à 17:02. (lien). Évalué à 1.

La même chose peut être effectuée sous PHP avec les librairies fpdf et fpdi.
http://www.fpdf.org/
http://fpdi.setasign.de/

bouh

Posté par cho7 (page perso, ) le 21/11/2006 à 10:36. (lien). Évalué à 2.

justement, ton astuce est aussi lisible qu'un script perl...

--
le python, c'est bon

Plus lisible !

Posté par Arthur Accroc () le 15/11/2007 à 17:41. (lien). Évalué à 1.

Intéressant, mais semble y avoir eu un léger problème de mise en page entre le moment où tu as écrit ton astuce et son arrivée dans la rubrique astuce, non ?
Je pense que le résultat aurait dû ressembler à ça :


Dernièrement, j'ai eu besoin de modifier un grand nombre de documents PDF, en ajoutant un en-tête et un numéro de page sur chaque page.
J'ai pu réaliser cette opération rapidement en utilisant Perl et le module
PDF::API2.
Voici une version "light" du script Perl que j'ai utilisé :


#!/usr/bin/perl

use PDF::API2;

my $file=shift;
my $out_file=shift||"test.pdf";
my $page_cnt=shift||1;
my $pdf = PDF::API2->open($file);
my $f1=$pdf->corefont('Times-Roman',-encode => "latin1");
my $f2=$pdf->corefont('Times-Italic',-encode => "latin1");

for my $p (1..$pdf->pages()){
    my $page=$pdf->openpage($p);
    $page->add_font($f1);
    $page->add_font($f2);
    my $gfx = $page->gfx;
    $gfx->save; $gfx->fillcolor('black');
    $gfx->textstart;
    
    # Ajout du numéro de page centré en bas
    $gfx->font($f1,10);
    $gfx->translate(297.5,30);
    $gfx->text_center("$page_cnt");
    
    # Ajout de l'entete en haut à droite
    $gfx->font($f2,10);
    $gfx->translate(570,812);
    $gfx->text_right("Texte placé en haut à droite");
    
    $gfx->textend;
    $gfx->restore;
    $page_cnt++;
}

$pdf->saveas($out_file);
exit;

Vous pouvez aussi placer dans la boucle les instructions suivantes pour afficher en arriere plan de chaques page le mot "TOP-SECRET" en rouge et en diagonal :

    my $gfx2 = $page->gfx(1);
    $gfx2->save;
    $gfx2->fillcolor('red');
    $gfx2->translate(297.5,420);
    $gfx2->rotate(30);
    $gfx2->font($f1,80);
    $gfx2->text_center("TOP SECRET");
    $gfx2->textend;
    $gfx2->restore;

(c'est le (1) de l'appel de $page->gfx(1) qui permet la mise en arrière plan de texte)


Pour finir un dernier exemple qui permet d'ajouter un logo (
logo.jpg) en haut à gauche sur toutes les pages :

#!/usr/bin/perl

use PDF::API2;

my $file = shift;
my $out_file = shift||"test.pdf";
my $pdf = PDF::API2->open($file);
my $nb_pages = $pdf->pages();
my $img = $pdf->image_jpeg('logo.jpg');
for my $p (1..$nb_pages){
    my $page=$pdf->openpage($p);
    my $gfx = $page->gfx(1);
    $gfx->save;
    $gfx->image($img,40,790,0.4); # 0.4 est le facteur d'echelle
    $gfx->restore;
}
$pdf->saveas($out_file);


P.S.: Si PDF::API2 n'est pas déja installé sur votre système, vous pouvez utiliser la commande : perl -MCPAN -e "install PDF::API2" pour l'installer.

--
Berlin 1936, Moscou 1980, Pékin 2008.
Jeux Olympiques, sponsor officiel de la dictature.
Mexico 1968, Pékin 2008.
Jeux Olympiques, sponsor officiel de la répression.

Revenir en haut de page || Retourner aux forums || Retourner au forum Astuces.divers