• # Plus lisible !

    Posté par . En réponse au message [Perl] Modifier un PDF avec PERL. É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.

    « Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone