IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

création d'un état qui devra afficher un pdf + un filigrane


Sujet :

WinDev

  1. #1
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Points : 248
    Points
    248
    Par défaut création d'un état qui devra afficher un pdf + un filigrane
    Bonjour

    je cherche à ajouter à un pdf existant un filigrane (du genre "APPROUVE")
    j'ai crée un état avec juste un bloc de type corps. avec une image de 21*29.7.
    je fais le lien par programmation, et gérer le filigrane par prog.
    j'ai cependant un pb de marge j'imagine car j'obtiens bien un pdf avec le filigrane mais j'ai aussi une deuxième page vide.

    comment feriez vous face à cette problématique? peut etre même une autre vision de gérer ce pb.
    merci du coup de main.

    ps : j'ai pensé utiliser l'utilitaire pdftk (en ligne de commande).
    cela fonctionne mais sur certains pdf (particulièrement ceux gérant des images). Le filigrane n'apparait pas. Et si je passe par le mode "Stamp" de pdftk, je perds une partie du pdf d'origine (car le stamp étant une image, elle vient se mettre par dessus).

    ps 2: en sachant que le pdf peut faire plusieurs pages.

  2. #2
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    hello,
    cela semble possible en utilisant l'assemblage dotnet itextSharp. En partant d'un PDF de plusieurs pages, voici 2 exemples de pages que j'obtiens dans un nouveau PDF en ayant ajouté le texte en filigrane "Approuvé Developpez windev" par itextSharp avec une procédure qui fait une vingtaine de lignes :

    Nom : filigranePDF-1.png
Affichages : 3599
Taille : 82,5 Ko

    Nom : filigranePDF-2.png
Affichages : 1025
Taille : 131,9 Ko

    A partir de la version 5, iText est passé en licence AGPL ( c'est à dire très restrictive pour un projet commercial). Par contre l'ancienne version la 4.1.6 est en licence MPL/LGPL (beaucoup moins restrictive). Pour faire le test, j'ai utilisé la version 4.1.6.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  3. #3
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Points : 248
    Points
    248
    Par défaut
    merci pour l'info.
    je cherche cette version 4.1.6, et sur sorceforge ca s'arrete à la 5, sur github, il y a les sources.
    sais tu où je pourrais récupérer la version compilée?
    merci

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    l'assemblage 4.1.6 est disponible ici

    voici le code que j'ai utilisé pour créer le filigrane :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    PROCEDURE FiligranePDF(fichierSource est une chaîne,fichierDestination est une chaîne,monTexte est une chaîne)
    // J.P mai 2014
    pageindex est un entier
    MonFichierPDF est un PdfReader(fichierSource)
    fluxSortie est un FileStream(fichierDestination, FileMode.OpenOrCreate)
    //create pdfstamper object which is used to add addtional content to source pdf file
    pdfStamper est un PdfStamper(MonFichierPDF,fluxSortie)
    //iterate through all pages in source pdf
    POUR pageindex = 1 _A_ MonFichierPDF.NumberOfPages
    //Rectangle class in iText represent geometric representation... in this case, rectangle object would contain page geometry
    pageRectangle est un "itextsharp.text.rectangle" dynamique = MonFichierPDF.GetPageSizeWithRotation(pageindex)
    //pdfcontentbyte object contains graphics and text content of page returned by pdfstamper
     pdfData est un PdfContentByte dynamique = pdfStamper.GetOverContent(pageindex)
    //create fontsize for watermark
    pdfData.SetFontAndSize(BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 40);
    //create new graphics state and assign opacity
     graphicsState est un PdfGState() 
    graphicsState.FillOpacity = 0.4
    //set graphics state to pdfcontentbyte
    pdfData.SetGState(graphicsState);
    //set color of watermark
    pdfData.SetColorFill(Color.BLUE)
    //indicates start of writing of text
    pdfData.BeginText();
    //show text as per position and rotation
    pdfData.ShowTextAligned(Element.ALIGN_CENTER, monTexte, pageRectangle.Width / 2, pageRectangle.Height / 2, 45);
    //call endText to invalid font set
    pdfData.EndText()
    FIN
    //close stamper and output filestream
    pdfStamper.Close()
    fluxSortie.Close()
    un exemple d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FiligranePDF("F:\mergedPDF.pdf","F:\PDFavecFiligrane.pdf","Approuvé Developpez.net windev")
    Le texte est mis au dessus grâce à pdfStamper.GetOverContent. Pour le mettre en fond de page utiliser pdfStamper.GetUnderContent.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Points : 248
    Points
    248
    Par défaut
    bonjour
    merci beaucoup ca regle parfaitement mon cas du filigrane sur un ou plusieurs pages avec plus de possibilités que ce que j'avais avec pdftk.
    je voudrais maintenant gérer le cas d'insertion d'une image en guise de tampon (avec fond transparent)
    j'ai récupéré un bout de code .net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
                    PdfReader reader = new PdfReader("PublishedCertificate.pdf");
                    PdfStamper stamper = new PdfStamper(reader, new FileStream("withchart.pdf", FileMode.Create));
                    AcroFields fields = stamper.AcroFields;
                    //set images
                    string chartLoc = string.Empty;
                    iTextSharp.text.Image chartImg = iTextSharp.text.Image.GetInstance("zedgraph.png");
                    chartImg.SetAbsolutePosition(50, 50);
     
     
                    PdfContentByte cB = new PdfContentByte(stamper.Writer);
                    cB.AddImage(chartImg);
    que j'ai tenté de traduire par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    simagetampon est une chaine = frepexe+"\tampon.gif"
    	pclStamp est un "iTextSharp.text.image" dynamique = pdfStamper.getinstance(sImageTampon)
    	pclStamp.SetAbsolutePosition(15,200)
    mais ca couine sur le getinstance

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 951
    Points : 9 280
    Points
    9 280
    Par défaut
    regarde bien tu as fais une erreur. Il faut mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pclStamp est un "iTextSharp.text.image" dynamique = "iTextSharp.text.Image".GetInstance(sImageTampon)
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  7. #7
    Membre actif
    Inscrit en
    Octobre 2013
    Messages
    274
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 274
    Points : 248
    Points
    248
    Par défaut
    merci beaucoup

    faut vraiment que je me mette à .net !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. création de 3 liens qui affichent 3 textes différents.
    Par argon dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/05/2008, 10h52
  2. [HTML] création de mail et pas d'images qui s'affiche
    Par Djiix dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/12/2007, 17h00
  3. Réponses: 2
    Dernier message: 27/08/2007, 13h54
  4. Réponses: 2
    Dernier message: 23/07/2007, 06h14
  5. Réponses: 10
    Dernier message: 28/09/2005, 16h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo