#1 Le 02/03/2020, à 15:18
- bergeronnette
script avec pdftk plante et tourne longtemps
Voici une ligne de code, qui m'a été donnée il y a assez longtemps, pour modifier la mise en page d'un fichier pdf réalisé avec LaTeX.
$(echo -n "pdftk S=DOC.pdf cat";for k in {1..X/2..2};do echo -n " S$k S$((X/2+k)) S$((X/2+1+k)) S$((k+1))";done;echo " output DOC-FINAL.pdf")
En général, ce code fonctionne très bien mais ici, ça bloque.
Mon fichier fait 340 pages et 3,3 Mo. J'obtiens ce message que je ne sais pas interpréter.
Le fichier est-il trop lourd ?
Error: Unexpected Exception in open_reader()
java.lang.OutOfMemoryError: GC overhead limit exceeded
at pdftk.com.lowagie.text.pdf.ByteBuffer.toByteArray(ByteBuffer.java:543)
at pdftk.com.lowagie.text.pdf.PdfName.encodeName(PdfName.java:1935)
at pdftk.com.lowagie.text.pdf.PdfName.<init>(PdfName.java:1814)
at pdftk.com.lowagie.text.pdf.PdfReader.readDictionary(PdfReader.java:1533)
at pdftk.com.lowagie.text.pdf.PdfReader.readPRObject(PdfReader.java:1570)
at pdftk.com.lowagie.text.pdf.PdfReader.readObjStm(PdfReader.java:1203)
at pdftk.com.lowagie.text.pdf.PdfReader.readDocObj(PdfReader.java:1115)
at pdftk.com.lowagie.text.pdf.PdfReader.readPdf(PdfReader.java:508)
at pdftk.com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:172)
at pdftk.com.lowagie.text.pdf.PdfReader.<init>(PdfReader.java:161)
at com.gitlab.pdftk_java.TK_Session.add_reader(TK_Session.java:122)
at com.gitlab.pdftk_java.TK_Session.add_reader(TK_Session.java:217)
at com.gitlab.pdftk_java.TK_Session.<init>(TK_Session.java:1201)
at com.gitlab.pdftk_java.pdftk.main(pdftk.java:171)
Error: Failed to open PDF file:
DOC.pdf
Internal Error: unable to add reader
Errors encountered. No output created.
Done. Input errors, so no output created.
Y a-t-il une solution ?
Je pensais à qpdf mais je ne sais pas plus comment adapter ce code.
Je suis sous xubuntu 18.04 à jour.
Merci
Hors ligne
#2 Le 02/03/2020, à 18:06
- kamaris
Re : script avec pdftk plante et tourne longtemps
Un peu bizarre ta commande, tu dois être obligé de remplacer X/2 par sa valeur, au moins pour la première occurrence, dans : {1..X/2..2}.
Tu ferais mieux de l'écrire comme ça :
pdftk S=DOC.pdf cat $(for ((k=1;k<=X/2;k+=2)); do echo -n "S$k S$((X/2+k)) S$((X/2+1+k)) S$((k+1)) "; done) output DOC-FINAL.pdf
Comme ça, il te suffit d'affecter à X une valeur paire au préalable, et c'est bon.
Maintenant, concernant ton message d'erreur, on y voit
Error: Failed to open PDF file:
DOC.pdf
Es-tu sûr que le fichier DOC.pdf existe là où tu exécutes cette commande ?
Hors ligne
#3 Le 02/03/2020, à 18:53
- bergeronnette
Re : script avec pdftk plante et tourne longtemps
Je modifie manuellement le nombre X/2 après création du fichier pdf.
Le fichier est bien là.
Le code fonctionne jusqu'à X/2=120 puis à 130 donne une erreur. Je n'ai pas fait entre chaque valeur. Il faut à peu près 5 minutes de traitement (échec ou pas).
Je vais devoir couper en 2 le fichier pour faire le traitement mais à la sortie de la photocopieuse j'aurai un manipulation de tri supplémentaire.
Hors ligne
#4 Le 02/03/2020, à 19:04
- kamaris
Re : script avec pdftk plante et tourne longtemps
Ah oui, j'avais commencé à lire le message d'erreur par le bas (logique…), mais en haut, on a :
java.lang.OutOfMemoryError: GC overhead limit exceeded
Donc il faudrait probablement couper ton fichier pdf en deux, oui.
Hors ligne