option de compression pdftk

94

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

pdftk file1.pdf output file2.pdf compress

Cela fonctionne lorsque le poids de mon fichier diminue.

Y a-t-il des [options] pour changer la compression ???

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

RockScience
la source
1
D'après mon expérience, cela dépend de ce qu'il y a dans votre pdf. S'il s'agit d'un graphique avec de nombreux points par exemple, la meilleure solution est de convertir le graphique en png et d'inclure ce png dans le pdf.
RockScience

Réponses:

122

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

  • Pixélisé (avec perte):

    convert input.pdf -compress Zip output.pdf
    
  • Sans pixel (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
    

Edit : 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
nullglob
la source
3
Impressionnant. gs a fonctionné pour moi, convertissant un fichier de 4 Mo en 339 Ko. Il y a eu une perte de qualité, mais cela a suffisamment servi mon objectif.
Sridhar Sarnobat
27
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
imriss
10
Pour ajuster la qualité (et donc la taille), faites varier la valeur PDFSETTINGS. Voir ghostscript.com/doc/current/Ps2pdf.htm#Options
1in9ui5t
6
Notez que la gscommande dans la réponse n'est pas exactement sans perte, car elle réduit la résolution et la qualité des JPG intégrés. Mais c'est re sans perte. texte, en le conservant sous forme de texte, tandis que la convertcommande le convertit en graphiques raster.
tanius
14
L'option de réglage -dPDFSETTINGS=sur /ebookdonne une très belle sortie pour moi: bien sûr, c'est compressé et certains artefacts jpg sont visibles, mais c'est totalement lisible pour une taille raisonnable. Merci!
Joël
35

cette procédure fonctionne plutôt bien

pdf2ps large.pdf very_large.ps

ps2pdf very_large.ps small.pdf

Essaie.

jortizromo
la source
8
Ce n’est pas une solution générale. Dans de nombreux cas, le pdf résultant est plus grand.
rotskoff
4
Cela a fonctionné le mieux de toutes les solutions mentionnées pour moi. Quelques grandes images sont passées de 23 Mo à 1,4 Mo avec de loin la moindre perte de qualité.
AerandiR
1
@rotskoff Il n'y a probablement pas de solution générale car il existe différents types de documents. Cependant, je vois votre point. Ce serait bien d'avoir un logiciel qui détermine ce qui fonctionne le mieux pour nous.
tiktak
Merci, cela a fonctionné pour moi, alors que qpdf et gs n'ont pas réduit la taille du fichier de sortie.
sebastian
1
Comme mentionné ici, un autre inconvénient de cette méthode est qu'elle cassera les liens URL à l'intérieur du document.
ptomato
30

Essayer de compresser un PDF que j'ai fait avec des tiffs 400ppi, principalement 8 bits, quelques 24 bits, avec compression PackBits, en utilisant tiff2pdfcompressé avec Zip / Deflate. Un problème que j'ai eu avec chacune de ces méthodes: aucune des méthodes ci-dessus n'a conservé la table des matières des signets que j'ai minutieusement créée manuellement dans Acrobat Pro X. Pas même le ebookparamètre recommandé pour gs. Bien sûr, je pourrais simplement ouvrir une copie de l'original avec la table des matières intacte et faire un Replace pagesmais malheureusement, aucune de ces méthodes n'a fait un travail satisfaisant pour commencer. Soit ils ont tellement réduit la taille que la qualité a été pixellisée de manière inacceptable, soit ils n'ont pas du tout réduit la taille et, dans un cas, l'ont en fait augmentée 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
hmj6jmh
la source
2
C'est une recherche extrêmement précieuse (merci!) Mais ce n'est pas non plus une réponse que pendant un moment j'ai pensé au vote à la baisse.
ndemou
3
Comment n'est-ce pas une réponse?
hmj6jmh
22

Si la taille du fichier est encore trop grande, l'utilisation de ps2pdf peut aider à réduire la résolution du fichier pdf produit:

pdf2ps input.pdf tmp.ps
ps2pdf -dPDFSETTINGS=/screen -dDownsampleColorImages=true -dColorImageResolution=200 -dColorImageDownsampleType=/Bicubic tmp.ps output.pdf

Ajustez la valeur de l' option -dColorImageResolution pour obtenir un résultat qui correspond à vos besoins (la valeur décrit la résolution de l'image en PPP). Si votre fichier d'entrée est en niveaux de gris, remplacer Couleur par Gris ou utiliser les deux options de la commande ci-dessus peut également aider. Un réglage plus fin est possible en modifiant l' option -dPDFSETTINGS sur / default ou / printer . Pour des explications sur toutes les options possibles, consultez le manuel ps2pdf .

Dominik
la source
1
Merci pour le tuyau. Avec -dPDFSETTINGS, je pourrais réduire la taille de mon PDF numérisé
eshwar
2
MERCI. Je ne pense pas qu'il existe une solution générale pour le cas d'utilisation de tout le monde - mais j'ai essayé presque toutes les solutions sur ce fil et c'est la seule qui a fonctionné pour moi !!! Être capable de "régler" le paramètre dColorImageResolution était essentiel - il fallait que la taille du document soit suffisamment petite pour que ce site gouvernemental l'accepte, mais suffisamment grande pour être lisible. Merci, oncle Sam, pour un autre cerceau douloureux à franchir :)
Michael Klear
4

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

Dans Ubuntu 12.04, vous pouvez l'installer en

sudo apt-get install cups-pdf

Après l'installation, assurez-vous de vérifier dans Outils système > Administration > Impression > cliquez avec le bouton droit sur 'PDF' et réglez-le sur 'activer'

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

Ryanjdillon
la source
4

L'option pdf2ps en une ligne (de Lee) a en fait augmenté la taille du pdf. Cependant, les deux étapes ont fait mieux. Et il peut être combiné en un seul en utilisant la redirection de et vers l'entrée / sortie standard et les tuyaux:

pdf2ps large.pdf - | ps2pdf - petit.pdf

a réduit un PDF généré par xsane de 18 Mo à 630 ko!

Les liens sont perdus, mais pour le présent exemple, ce n'est pas un problème ... et c'était le moyen le plus simple d'obtenir le résultat souhaité.

E. Curis
la source
Vous pouvez essayer à la ps2pdfplace, voir mon commentaire sur la réponse de @ Lee.
myrdd
3

pdf2ps large.pdf small.pdf suffit, au lieu de deux étapes

pdf2ps large.pdf very_large.ps 
ps2pdf very_large.ps small.pdf

Cependant, ps2pdf large.pdf small.pdfc'est un meilleur choix.

  • ps2pdf est beaucoup plus rapide
  • sans paramètres supplémentaires spécifiés, pdf2psproduit parfois un fichier plus volumineux.
Lee
la source
Où avez-vous trouvé cette option? Est-ce une fonctionnalité dans une version récente? Cela n'a pas fonctionné pour moi. Même si je nommé le fichier de sortie out.pdf, il est devenu un fichier PS ( mimetype out.pdfdit out.pdf: application/postscript).
myrdd
le mien est la version 9.xx la plus récente. pas sûr que votre.
Lee
J'utilise la version packagée Debian stable ("stretch"), qui est 9.25. Pouvez-vous vérifier si vous avez bien un fichier pdf en tapant mimetype small.pdf?
myrdd
la sortie de mimetype small.pdfest small.pdf: application/pdf. Je pense que le programme peut déterminer le type de fichier automatiquement en fonction du suffixe.
Lee
1
@myrdd ouais, j'ai fait des tests. ps2pdfest mieux.
Lee
1

Je n'ai pas vu beaucoup de réduction de la taille du fichier en utilisant qpdf. Le meilleur moyen que j'ai trouvé est après que pdftk ait fini d'utiliser ghostscript pour convertir le pdf en postscript puis de nouveau en pdf. En PHP, vous utiliseriez 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 prendre la sortie pdftk de 490k à 71k.

À M
la source
1
PHP ajoute une complexité complètement inutile et réduit l'applicabilité de cette réponse
ndemou
-2

J'ai eu le même problème et j'ai utilisé cette fonction pour compresser des pages individuelles, ce qui entraîne la compression de la taille du fichier jusqu'à 1/3 de la taille d'origine.

for (int i = 1; i <= theDoc.PageCount; i++)
{
       theDoc.PageNumber = i;
       theDoc.Flatten();
}
Gabbar
la source
1
utilisez-vous la bibliothèque C ++ de pdftk?
RockScience
-3

Dans le cas où vous souhaitez compresser un PDF qui contient beaucoup de texte sélectionnable, sous Windows, vous pouvez utiliser NicePDF Compressor - choisissez l'option "Flate". Après avoir tout essayé (cpdf, pdftk, gs), cela m'a finalement aidé à compresser mes 1360 pages PDF de 500 Mo à 10 Mo.

solf
la source