119 votes

Option de compression pdftk

J'utilise pdftk pour compresser un pdf en utilisant la ligne de commande suivante

pdftk file1.pdf output file2.pdf compress

Cela fonctionne car le poids de mon dossier a diminué.

Existe-t-il des [options] permettant de modifier la compression ???

Ou peut-être d'autres solutions pour compresser mon fichier ? Il est lourd car certains graphiques ont beaucoup de points . Existe-t-il un moyen de convertir ces graphiques en jpg par exemple et d'adapter la compression ?

2 votes

D'après mon expérience, cela dépend du contenu de votre pdf. Si c'est un graphique avec beaucoup de points par exemple, la meilleure solution est de convertir le graphique en png et d'inclure ce png dans le pdf.

147voto

nullglob Points 3257

J'ai eu le même problème et j'ai trouvé deux solutions différentes (voir ceci filetage pour plus de détails). Les deux ont permis de réduire considérablement la taille de mon PDF non compressé.

  • Pixellisé (avec perte) :

    convert input.pdf -compress Zip output.pdf
  • Non pixellisé (sans perte, mais peut s'afficher légèrement différemment) :

    gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dBATCH  -dQUIET -sOutputFile=output.pdf input.pdf

Modifier : Je viens de découvrir une autre option (pour la compression sans perte), qui évite la méchante commande gs. qpdf est un outil soigné qui convertit les PDF (compression/décompression, cryptage/décryptage), et est beaucoup plus rapide que la commande gs :

qpdf --linearize input.pdf output.pdf

3 votes

Génial. gs a fonctionné pour moi, convertissant un fichier de 4MB en 339K. Il y a eu une perte de qualité, mais cela a suffisamment servi mon objectif.

38 votes

Vous pouvez utiliser le paramètre PDF "imprimante" pour une meilleure qualité : gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.5 -dPDFSETTINGS=/printer -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf

11 votes

Pour ajuster la qualité (et donc la taille), faites varier la valeur de PDFSETTINGS. Voir ghostscript.com/doc/current/Ps2pdf.htm#Options

48voto

hmj6jmh Points 40

J'essaie de compresser un PDF que j'ai créé avec des tiffs de 400ppi, la plupart en 8 bits, quelques-uns en 24 bits, avec la compression PackBits, en utilisant tiff2pdf compressé avec Zip/Deflate. J'ai rencontré un problème avec chacune de ces méthodes : aucune d'entre elles n'a préservé la table des matières des signets que j'ai laborieusement créée manuellement dans Acrobat Pro X. Pas même la méthode recommandée par l'OMS. ebook pour gs . Bien sûr, je pourrais ouvrir une copie de l'original avec la table des matières intacte et faire un Replace pages mais malheureusement, aucune de ces méthodes n'a fait un travail satisfaisant au départ. Soit elles réduisaient tellement la taille que la qualité était inacceptable, soit elles ne réduisaient pas du tout la taille et, dans un cas, l'augmentaient malgré la perte de qualité.

pdftk compress :

no change in size
bookmarks TOC are gone

gs screen :

takes a ridiculously long time and 100% CPU
errors:
    sfopen: gs_parse_file_name failed.                                 ? 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->10.2MB hideously pixellated
bookmarks TOC are gone

gs printer :

takes a ridiculously long time and 100% CPU
no errors
74.8MB-->66.1MB
light blue background on pages 1-4
bookmarks TOC are gone

gs ebook :

errors:
    sfopen: gs_parse_file_name failed.
      ./base/gsicc_manage.c:1050: gsicc_open_search(): Could not find default_rgb.ic 
    | ./base/gsicc_manage.c:1651: gsicc_set_device_profile(): cannot find device profile
74.8MB-->32.2MB
badly pixellated
bookmarks TOC are gone

qpdf --linearize :

very fast, a few seconds
no size change
bookmarks TOC are gone

pdf2ps :

took very long time
output_pdf2ps.ps 74.8MB-->331.6MB

ps2pdf :

pretty fast
74.8MB-->79MB
very slightly degraded with sl. bluish background
bookmarks TOC are gone

3 votes

Il s'agit d'une recherche extrêmement précieuse (merci !), mais ce n'est tellement pas une réponse que pendant un moment j'ai pensé à voter moins.

7 votes

En quoi ce n'est pas une réponse ?

39voto

jortizromo Points 145

Cette procédure fonctionne assez bien

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

Essayez-le.

12 votes

Il ne s'agit pas d'une solution générale. Dans de nombreux cas, la fdp résultante est plus grande.

5 votes

De toutes les solutions mentionnées, c'est celle qui a le mieux fonctionné pour moi. Quelques grandes images sont passées de 23 Mo à 1,4 Mo avec de loin la plus faible perte de qualité.

1 votes

@rotskoff Il n'y a probablement pas de solution générale car il existe différents types de documents. Cependant, je comprends votre point de vue. Ce serait bien d'avoir un logiciel qui détermine ce qui fonctionne le mieux pour nous.

3voto

shootingstars Points 774

Après avoir essayé gpdf comme nullglob suggéré, j'ai constaté que j'obtenais les mêmes résultats de compression (un fichier de ~900mb réduit à ~30mb) en utilisant simplement l'imprimante cups-pdf. Cela peut être plus facile/préféré si vous êtes déjà en train de visualiser un document et que vous n'avez besoin de compresser qu'un ou deux documents.

Dans Ubuntu 12.04, vous pouvez l'installer de la manière suivante

sudo apt-get install cups-pdf

Après l'installation, assurez-vous de vérifier Outils système > Administration > Impression > Cliquez avec le bouton droit de la souris sur "PDF" et activez l'option "enable".

Par défaut, la sortie est enregistrée dans un dossier nommé PDF dans votre répertoire personnel.

1 votes

Je suis arrivé ici parce que cups-pdf n'a pas compressé mon pdf il l'a rendu 5 fois plus grand :-)

0 votes

Peut-être est-ce un problème avec la version que vous utilisez, car je suppose que j'utilisais une version différente lorsque j'ai écrit ceci.

-2voto

Tom Points 11

Je n'ai pas vu une grande réduction de la taille du fichier en utilisant qpdf. La meilleure solution que j'ai trouvée est d'utiliser ghostscript pour convertir le pdf en postscript puis de nouveau en pdf, une fois que pdftk est terminé. En PHP, vous pouvez utiliser exec :

$ps = $save_path.'/psfile.ps';
exec('ps2ps2 ' . $pdf . ' ' . $ps);
unlink($pdf);
exec('ps2pdf ' .$ps . ' ' . $pdf);
unlink($ps);

Je l'ai utilisé il y a quelques minutes pour faire passer la sortie de pdftk de 490k à 71k.

5 votes

PHP ajoute une complexité complètement inutile et réduit l'applicabilité de cette réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X