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

avec Java Discussion :

Poids d'un PDF decouper (split) PDFbox


Sujet :

avec Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 85
    Points
    85
    Par défaut Poids d'un PDF decouper (split) PDFbox
    Bonjour,

    J’espère être au bon endroit pour ce message.

    Voilà j'utilise PDFBox pour découper un PDF de plusieurs pages.
    Mon PDF d'origine contient 2518 pages et à un poids de 7190ko.
    Une fois découper en 2518 Pdf de 1 page, ceux ci font en moyenne 70ko.
    Est ce que vous pensez que je peux diminuer la taille de ces PDF au moment du découpage (autre librairie que PDFBox) ?
    J'ai essayer d'utiliser ghostscipt et Itext pour diminuer la taille mais cela ne fonctionne pas très bien.

    Avez vous des idées ?

    Merci par avance.

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Diminuer sa taille veut dire soit les compresser (PDFStream.addCompression()), ou supprimer des informations. Peut-être que certaines sont inutiles, mais il faut un moyen de les détecter, et ce n'est pas forcément évident (et tout dépend des dégradations dans le contexte : je pense par exemple aux polices embarquées qu'on pourrait supprimer sous certaines conditions, ou dégrader la résolution des images - un OPI sans OPI, en quelque sorte).

    C'est quoi le but au juste ? Parce que si c'est pour les transférer plus vite, ou les archiver en prenant moins de place, on pourrait les zipper tout aussi bien.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 85
    Points
    85
    Par défaut
    Merci pour ta réponse.

    C'est effectivement pour archiver les documents et le mettre à disposition de l'utilisateur par requête web derrière.
    Nous ne pouvons pas les zipper car une fois déposé, je n'ai plus la main sur les PDF (zip si on les zip), je voudrais donc les compresser avant et les déposer au format PDF.
    Dans un premier temps je découpe les PDF en PDF unitaire puis reconstitue des PDF en les groupant.
    Je me demande pourquoi le jeu n'est pas très lourd par rapport au PDF unitaire.
    Je fais un calcul peut être bête mais 7190/2518 = 3ko environ comment je peux arriver à des PDF de 70ko ?

    Je n'ai pas très bien compris comment compresser avec PDStream. J'ai essayer de la faire mais sans succès peut être que je m'y suis mal pris.
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
     public int split(String pdf, String dest) throws Exception {
        String password = "";
        String split = "1";
        int success = -1;
        Splitter splitter = new Splitter();
        String pdfFile = null;
        List documents = null;
        int j = 10;
        String k = "";
        String t = "";
        File f = null;
        String fileName = null;
     
        pdfFile = pdf;
        if (pdfFile == null) {
          usage();
        } else {
          InputStream input = null;
          PDDocument document = null;
     
          try {
            input = new FileInputStream(pdfFile);
            document = parseDocument(input);
     
            if (document.isEncrypted()) {
              try {
                document.decrypt(password);
              } catch (InvalidPasswordException e) {
                log.severe("Error: The document is encrypted.");
                usage();
                success = -1;
              }
            }
     
            splitter.setSplitAtPage(Integer.parseInt(split));
            documents = splitter.split(document);
     
            for (int i = 0; i < documents.size(); i++) {
              PDDocument doc = (PDDocument) documents.get(i);
     
              k = t + j;
     
              if (j == 99) {
                j = 10;
                t = k;
              }
     
              f = new File(pdfFile);
              fileName = f.getName();
              fileName = dest + File.separator + fileName.substring(0, fileName.length() - 4) + "-" + k
                + ".pdf";
              j++;
     
              org.pdfbox.pdmodel.common.PDStream stream = new org.pdfbox.pdmodel.common.PDStream(doc);
              stream.addCompression();
              writeDocument(doc, fileName);
              doc.close();
            }
            success = 0;
          } finally {
            if (input != null) {
              input.close();
            }
            if (document != null) {
              document.close();
            }
            for (int i = 0; (documents != null) && (i < documents.size()); i++) {
              PDDocument doc = (PDDocument) documents.get(i);
              doc.close();
            }
          }
        }
     
        return success;
      }
     
    private static final void writeDocument(PDDocument doc, String fileName)
        throws IOException, COSVisitorException {
        FileOutputStream output = null;
        COSWriter writer = null;
        try {
          output = new FileOutputStream(fileName);
          writer = new COSWriter(output);
          writer.write(doc);
        } finally {
          if (output != null) {
            output.close();
          }
          if (writer != null) {
            writer.close();
          }
        }
      }
     
      private static PDDocument parseDocument(InputStream input)
        throws IOException {
        PDFParser parser = new PDFParser(input);
        parser.parse();
     
        return parser.getPDDocument();
      }
    En fait je ne vois pas trop quoi faire du stream ?

    J'ai également essayé d'utiliser itext et cela n'est pas mieux avec un setFullCompression().

    Je vais peut être m'orienter vers la 2ème solution notamment avec les polices embarquées sur le PDF.
    Avez vous une idée de comment je pourrais faire ?

    Par avance merci.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par titi42 Voir le message
    Je fais un calcul peut être bête mais 7190/2518 = 3ko environ comment je peux arriver à des PDF de 70ko ?
    Ben déjà, la taille minimum d'un PDF qui ne fait rien à par faire raler acrobat reader, c'est déjà 3Ko.
    Ensuite, derrière, la navigation, les metadatas, les polices si il y a des polices emarquées, etc. Bref tout un bouzin qui suit chaque PDF.
    En plus si ton document d'origine était du texte compressé, la compression ça marche bien avec la répétition. Il y a plus de chance de trouver des répétitions dans 2500 pages que dans une...


    Edit: pour te donner une idée, une page prise au hasard de notre dame de paris mise dans openoffce et exportée en PDF pèse 30Ko, deux pages pèsent 34Ko, 44 pages pèsent 171Ko. Pourtant 171Ko/44=3.8Ko. J'ai approximaivement un fixe de 28Ko + 3k / page.

    Donc découper page par page, ce n'est selon moi pas un bon plan Essaie de regrouper par 10 pages?

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 85
    Points
    85
    Par défaut
    Merci pour ton explication je comprends mieux.
    J'ai un soucis car je dois regrouper ces PDF selon une règle et je ne peux pas les regrouper par 10.
    Par contre est ce que tu sais comment je peux intervenir sur les métadatas du PDF afin de supprimer, sans trop détériorer la lisibilité du PDF, les polices embarquées ou autres données afin de réduire sa taille ?

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Je ne connais pas trop pdfbox et ca n'a pas l'air très clair chez eux.

    Tu peux tenter ça avec itext :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Document document = new Document(reader.getPageSizeWithRotation(1));
    PdfCopy writer = new PdfCopy(document, new FileOutputStream(outFile));
    document.open();
    PdfImportedPage page = writer.getImportedPage(reader, ++i);
    writer.setFullCompression();
    writer.addPage(page);
    document.close();
    writer.close();
    Pour voir si ça donne de meilleurs résultats.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 85
    Points
    85
    Par défaut
    Merci pour votre aide effectivement plus le PDF a de pages plus la compression est intéressante.
    J'ai utilisé PDFSmartCopy et cela fonctionne bien.


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

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/08/2013, 13h47
  2. [PDF] HTML2PS : Poid des rendus PDF
    Par dembroski dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/10/2008, 12h15
  3. Réponses: 7
    Dernier message: 17/04/2007, 12h48
  4. Split d'un fichier pdf
    Par nature dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 19/07/2006, 08h15
  5. Réponses: 2
    Dernier message: 12/07/2006, 17h19

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