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

Documents Java Discussion :

concatenation de fichier pdf plusieurs -> 1


Sujet :

Documents Java

  1. #1
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut concatenation de fichier pdf plusieurs -> 1
    Bonjour,

    pour réaliser des traitements sur des fichiers pdf, j'utilise l'API iText.

    Voici mon cas d'utilisation :
    via mon appli web, je génère plusieurs documents pdf.
    Afin de faciliter l'impression de ceci par le poste client, je veux concaténer tous mes fichiers pdf vers 1 seul.

    On peut me dire :
    Pourquoi ne pas générer directement tous dans un seul 1 fichier ?
    réponse : suivant le mode génération des fichiers pdf, ceci être peuvent envoyés individuellement par email, donc je suis obligé de les générer individuellement puis de les concaténer de plusieurs -> 1.

    Alors, en fouillant sur les tutos de iText, j'ai trouvé un bout de code qui me permet de faire cela.
    Je l'ai adapté à mon contexte :
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    // crée un seul fic pdf pour l'impression et la visualisation
    			Iterator<String> it = listFicLocal.iterator();
    			String outFile = destPath + "/" + demande.getId() + ".pdf";
    			listFicRemote.add(destPathRemote + "/" + demande.getId() + ".pdf");
    			try
    			{
    				this.document = new Document(PageSize.A4);
    				this.pdfCopy = new PdfCopy(document, new FileOutputStream(outFile));
    				this.document.open();
    				while(it.hasNext())
    				{
    					String sNom = it.next();
    					this.pdfReader = new PdfReader(sNom);
    					for(int i = 1; i <= this.pdfReader.getNumberOfPages(); i++)
    					{
    						this.pdfPage = this.pdfCopy.getImportedPage(this.pdfReader, i);
    						this.pdfCopy.addPage(this.pdfPage);
     
    						this.pdfPage.closePath();
    						this.pdfPage = null;
    					}
    					this.pdfReader.close();
    					this.pdfReader = null;
    				}
    			} 
    			catch (FileNotFoundException e) 
    			{
                    e.printStackTrace();
    			} 
    			catch (DocumentException e) 
    			{
    				e.printStackTrace();
    			}
    			catch (IOException e) 
    			{
    				e.printStackTrace();
    			}
    			finally
    			{
    				if(this.document != null)
    					this.document.close();
    				this.document = null;
     
    				if(this.pdfCopy != null)
    					this.pdfCopy.close();
    				this.pdfCopy = null;
     
    				if(this.pdfReader != null)
    					this.pdfReader.close();
    				this.pdfReader = null;	
    			}
    Lors de l'exécution de ce bout code -> aucune erreur
    Par contre, le résultat, n'est pas celui que j'attends en partie :
    - il me crée bien un nouveau doc pdf de plusieurs -> 1
    - par contre, les fichiers pdf sources contiennent des informations que j'ai fixé précédemment mais que je ne retrouve pas dans le doc pdf concaténé sauf pour la première page.
    Ma première page est remplie correctement, les autres ne contiennent que mon template vide

    Est-ce que quelqu'un aurait une de pourquoi ou alors connait une façon de faire

    d'avance

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    C'est sans doute parce qu'il y a des acroform dans tes fichiers PDF et PdfCopy ne le gère pas bien. Regarde là : http://itextdocs.lowagie.com/tutoria...tamp/index.php il faut utiliser PdfCopyFields apparemment.

  3. #3
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    Merci pour ton aide

    En effet, c'était cela mon pb, alors j'ai pris ce bout de code :
    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
     
    Iterator<String> it = listFicLocal.iterator();
    			String outFile = destPath + "/" + demande.getId() + ".pdf";
    			listFicRemote.add(destPathRemote + "/" + demande.getId() + ".pdf");
    			try {
     
    				PdfCopyFields copy = new PdfCopyFields(new FileOutputStream(outFile));
    				while (it.hasNext()) 
    				{
    					PdfReader reader = new PdfReader(it.next());
    					copy.addDocument(reader);
    					reader.close();
    				}
    				copy.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    et il me concatène bien mes fichiers de plusieurs -> 1 avec tout dedans

    Encore merci pour ton aide

  4. #4
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Salut,

    Je voulais savoir que faut-il inclure pour utiliser "FileOutputStream".
    En java, c'est java.io, mais je travail en c#.
    Je cherche egalement a creer un pdf a partir de plusieurs autre pdf.

    Merci d'avance

  5. #5
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut


    en c#, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    using System.IO;
    using System;
    Par contre, je ne suis pas sur que tu trouve directement FileOutputStream, il faut que tu trouve l'équivalent en c#.
    Jette un oeil à la faq

    Je cherche egalement a creer un pdf a partir de plusieurs autre pdf.
    Si c'est de la concaténation, regarde dans ce topic, c'est expliqué
    Si maintenant, ce n'est pas cela, explique plus clairement ce que tu veux faire

  6. #6
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Voila, en fait maintenant j'arrive bien a creer mon pdf a partir de la fonction PdfCopyFields qui reunit 2, 3, .... de mes pdfs. Le probleme que j'ai est que j'aimerais bien avoir les donnees de mes pdfs sur une seule page et non sur plusieurs pages differentes. Car chacun de mes pdfs ne contient pas bcp de donnees, seulement quelques lignes et donc par consequent j'aimerais que mes textes soit consecutifs.
    Auriez-vous une solution?

    Merci bcp d'avance

  7. #7
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    je ne sais pas ce que tu manipules comme type de données dans ton pdf, mais à mon avis, pour réaliser ton traitement :
    - lire la donnée de ton pdf source champ par champ
    - écrire toi même cette donnée dans ton pdf cible en gérant la disposition des données (donc , les mettre les unes à la suite des autres)

    Je ne vois pas d'autres solutions.

    Donc, tu ne peux utiliser pas directement la copy de pdfCopyFields qui lui recopie tout le document sans se poser de question.

    Je pense qu'il faudrait que tu t'inspires plus du bout de code que j'ai posté en début de cette discussion qui elle fait la recopie par type, donc tu pourras ainsi identifier ce que tu veux copier de ta source vers ta cible en gérant toi même la mise en page.

  8. #8
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    C'est du simple texte avec des images. En fait je dois garder le meme formatage des donnees, cad garder ce qui est en gras, les titres, etc. Il n'y a aucune donnee complexe dans mes pdfs.
    Comment fais-tu pour lire champs par champs dans le pdf source ?
    Pourrais-tu me montrer un exemple tout court, ce serait vmt sympa ?

    Merci encore pour ton aide CaptainCyd

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Il y a un exemple complet en concaténation de page en C# là : http://www.ujihara.jp/ConcatPDF/en/index.html
    Par contre retrouver la semantique/logique du document et paragraphe une fois en PDF est difficile, le pdf est un format orienté impression et ne cherche pas à conserver ce type d'info.
    Enfin c'est peut être possible quand même hein, bon courage.

  10. #10
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    je n'ai pas d'exemple tout fait pour ce que tu veux faire

    Par contre, ce que tu peux regarder, ce sont les codes sources qui sont sur cette page notamment la partie register (a droite dans la page sur fond violet) qui indique comment mettre à jour un field.
    Cela peut te donner des pistes.

    Tu peux aussi consulter cette page à la partie II qui montre comment créer et manipuler les entités de bases de ton doc pdf

    Je pense ce qui serai bien aussi, c'est que tu es adobe acrobat (celui qui permet de créer des docs pdf), car comme cela tu pourras éditer ton doc et repérer les types de champs et tout ce qui le compose, comme cela tu sauras ce qu'il faudra mettre comme type de champ quand tu va refaire ta mise en page

  11. #11
    Membre averti
    Inscrit en
    Mars 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2007
    Messages : 59
    Par défaut
    Merci d'avoir pris le temps de me repondre.
    Va falloir que je cherche dans une autre direction je crois. Ces pages, je les avais deja vues mais cela ne m'aide pas dans ce que je voudrais faire.
    Enfin, je vous tiendrez au courant si je finis par trouver une solution.

  12. #12
    Membre expérimenté Avatar de CaptainCyd
    Inscrit en
    Avril 2007
    Messages
    201
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Avril 2007
    Messages : 201
    Par défaut
    bon courage pour la suite

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

Discussions similaires

  1. Concatener des fichiers PDF
    Par Z3 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 19/09/2008, 19h26
  2. [FPDF] Afficher plusieurs tableaux dans un fichier PDF
    Par Pakman80 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 30/07/2007, 15h19
  3. Concaténer plusieurs fichier pdf.
    Par gege2061 dans le forum Linux
    Réponses: 7
    Dernier message: 28/10/2006, 13h14
  4. Réunir plusieurs fichiers pdf
    Par nancy54 dans le forum Delphi
    Réponses: 5
    Dernier message: 14/06/2006, 17h50
  5. [HTML] Ouvrir plusieurs fichiers pdf dans une page
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/05/2006, 09h34

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