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 :

[IText]Erreur à la concaténation de certains pdf seulement


Sujet :

Documents Java

  1. #1
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut [IText]Erreur à la concaténation de certains pdf seulement
    J'utilise le code de concaténation du site officiel avec la lib itext en version 1.1.
    http://itext.ugent.be/library/com/lo...ncatenate.java
    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
    53
    54
    public void writeOutput(OutputStream output) throws IOException
        {
            try {
                int pageOffset = 0;
                ArrayList master = new ArrayList();
                int f = 0;
                Document document = null;
                PdfCopy  writer = null;
                while (f < pdfList.size())
                {
                    // we create a reader for a certain document
                    PdfReader reader = new PdfReader((byte[])pdfList.get(f)); //ligne déclanchant l'exception
                    reader.consolidateNamedDestinations();
                    // we retrieve the total number of pages
                    int n = reader.getNumberOfPages();
                    List bookmarks = SimpleBookmark.getBookmark(reader);
                    if (bookmarks != null)
                    {
                        if (pageOffset != 0)
                            SimpleBookmark.shiftPageNumbers(bookmarks, pageOffset, null);
                        master.addAll(bookmarks);
                    }
                    pageOffset += n;
                    
                    if (f == 0)
                    {
                        // step 1: creation of a document-object
                        document = new Document(reader.getPageSizeWithRotation(1));
                        // step 2: we create a writer that listens to the document
                        writer = new PdfCopy(document, output);
                        // step 3: we open the document
                        document.open();
                    }
                    // step 4: we add content
                    PdfImportedPage page;
                    for (int i = 0; i < n; ) {
                        ++i;
                        page = writer.getImportedPage(reader, i);
                        writer.addPage(page);
                    }
                    PRAcroForm form = reader.getAcroForm();
                    if (form != null)
                        writer.copyAcroForm(reader);
                    f++;
                }
                if (!master.isEmpty())
                    writer.setOutlines(master);
                // step 5: we close the document
                document.close();
            }
            catch(Exception e) {
                e.printStackTrace();
            }
        }
    J'obtiens pour certain pdf cette exception:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    java.io.IOException: Rebuild failed: trailer not found.; Original message: xref subsection not found at file pointer 8292
    	at com.lowagie.text.pdf.PdfReader.readPdf(Unknown Source)
    	at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    	at com.lowagie.text.pdf.PdfReader.<init>(Unknown Source)
    J'essaierai avec les versions supérieurs de itext plus tard, mais mon architecture actuelle (cocoon) utilise le 1.1.

    Je précise que j'aurais bien mis les pdf posant problème en piece jointe, mais hélas, ils contiennent des info confidentielles.

  2. #2
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Ok, voila les pdf (dont j'ai crypté les info) qui posent problèmes.
    Images attachées Images attachées

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Les PDFs sont endomagé. Tu peux les ouvrir avec Acrobat (pas le Reader) est il y aura une message d'erreur.

    Paulo

  4. #4
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Acrobat reader arrive à les lire sans message d'erreur, j'ai pas le pro.
    Mais en effet, ils semblent pas completement conforme à la norme, d'autre logiciels ont quelques soucis.
    C'est embettant, c'est un outils assez cher qui les génere .

    Question subsidiaire:
    Quelqu'un aurait une méthode pour concaténer des pdf, en n'ayant qu'un pdf en mémoire à la fois en lecture?

  5. #5
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Erf ça marche avec la version 1.3.6 de iText .
    J'ai fait faire des test sur acrobat pro 7 et pdfbox sans retour d'erreur non plus.
    Donc finalement le format de pdf est peut être pas si mauvais.

    Je suis toujours intéressé par une méthode permettant de concaténer des pdf sans les mettre tous en mémoire, j'en ai plus de 7000.

  6. #6
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Up.

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Points : 20
    Points
    20

  8. #8
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Merci mais c'est exactement l'exemple duquel je suis parti, d'ailleurs mon lien initial vient de cette page. Cette méthode oblige à avoir en mémoire tous les PDFs qu'on souhaite concaténer en mémoire.
    Car à chaque
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pdfCopy copy = new PdfCopy(document, new FileOutputStream(outFile));
    même en gardant le même OutputStream, c'est un nouveau pdf qui est crée.

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Points : 20
    Points
    20

  10. #10
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Merci, une fois encore, de poster le code dont je me suis inspiré dans mon premier post.
    Et en effet, en le relisant, j'ai vu où mon approche péchait.
    En tout les cas, il aurait été plus intelligible de me l'expliquer, on va dire que c'etait de la flemme.
    Enfin malgré tout, tel quel, ça oblige à stoquer tous les pdf sur le disque.
    Je suis plus dans une approche client/serveur ou le client envoie l'un après l'autre les pdf.

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Je ne comprends pas ton problème. PdfCopy ne garde pas tous les PDF em mémoire, il y a PdfCopy.freeReader() pour les libérer. Bien sur qu'un PDF avec milliers de pages a besoin de mémoire et ça ne va pas marcher avec un jvm de 64M. Remarquer que seulement le xref et le page tree (pointers) sont gardé mémoire, pas les pages proprement dites.

    Paulo

  12. #12
    Membre expérimenté
    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
    Points : 1 610
    Points
    1 610
    Par défaut
    Mon approche intiale et celle de l'exemple oblige il faut concatener tous les pdf d'un coup, donc les avoir soit en mémoire (mon adaptation) soit sur disque (l'exemple original).
    Dans mon architecture le client envoie au fur et à mesure les pdf (7000) à concatener, et les conserver n'a pas de sens.
    Il faut donc que je revois l'algorithme pour instancier un unique writer et fournir des méthodes pour concaténer au coup par coup dans cette unique writer.
    Je sais pas pourquoi j'y ai pas pensé avant, c'est de l'algorithmique basique.

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

Discussions similaires

  1. [TortoiseSVN] Erreur de commit sur certains dossiers seulement
    Par loukoum82 dans le forum Subversion
    Réponses: 2
    Dernier message: 24/02/2012, 11h16
  2. [Crystal Report]Exportation en pdf seulement ?
    Par Sonny dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/02/2006, 13h48
  3. [Oracle] Erreur ORA-00900 suite à certaines requêtes
    Par osmoze dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 13/01/2006, 17h43
  4. [iText] Rajouter une image dans un pdf
    Par COCOLOLO dans le forum Documents
    Réponses: 2
    Dernier message: 06/04/2005, 17h01
  5. [iText] Conseils sur la génération de pdf
    Par GreenJay dans le forum Documents
    Réponses: 6
    Dernier message: 25/03/2005, 01h49

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