Comment puis-je réduire la taille d'un fichier PDF numérisé?

372

J'ai un fichier PDF de 72,9 Mo que je dois réduire à moins de 500 Ko.

Le fichier était une image JPEG que j'avais scannée puis convertie au format PDF.

tamimym
la source
1
cela dépend de ce qui consomme de l'espace ... besoin de beaucoup plus d'informations. La compression de l'espace image peut aider, mais si vous essayez d'utiliser un spray de fichiers volumineux, cela ne fonctionnera pas. sérieusement besoin de plus d'informations.
RobotHumans
1
convertissez-le en DjVu, mais essayez plutôt de réduire le format PDF au format impossible (source)
zetah
le fichier était une image jpeg que j'avais scannée puis convertie en pdf.
tamimym
Cela ne semble aider qu'un peu la taille du fichier, mais pdfoptsa syntaxe est simple et il améliore le chargement et la vitesse de rotation des pages à l'ère iPad. :-)
Ari B. Friedman
1
PDF en PS n’est pas efficace dans les fichiers PDF numérisés, j’essaie de convertir un fichier PDF de 56 Mo en fichier ps, mais le fichier ps est converti en 1,3 Go, puis ps2pdf est converti en un fichier de 45 Mo

Réponses:

145

aking1012 a raison. Avec plus d'informations sur d'éventuelles images intégrées, hyperliens, etc., il serait beaucoup plus facile de répondre à cette question!

Voici quelques solutions de script et de ligne de commande. Utilisez comme bon vous semble.

v2r
la source
15
Merci beaucoup pour vos suggestions, le shell ghostscript a fait des merveilles et l'a réduit à 460KO :)
tamimym
Ce n'est pas nécessairement vrai. Si le contenu est passé d'une image à un texte, c'est plus que fessible. [Cela revient à supposer que le texte est correctement codé]
Monksy,
2
Je vous recommande le script shrinkpdf.sh, vous pouvez personnaliser le code pour utiliser la valeur ppi de votre choix (72 par défaut) et atteindre exactement la taille de fichier dont vous avez besoin pour sacrifier la moindre qualité. Cela m'a permis de télécharger un document numérisé de 11 Mo avec un max. taille de 3 Mo sans perdre beaucoup de qualité.
Severo Raz
4
shrinkpdf fonctionne très bien!
AmanicA
2
Où se trouve le shell ghostscript auquel le terminal opérateur fait référence ? Askubuntu.com/questions/113544/… ?
user13107
521

Utilisez la commande ghostscript suivante :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screenqualité inférieure, taille plus petite. ( 72 dpi )
  • -dPDFSETTINGS=/ebookpour une meilleure qualité, mais des pdfs légèrement plus grands. ( 150 dpi )
  • -dPDFSETTINGS=/prepresssortie similaire au paramètre "Prepress Optimized" d'Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/printersélectionne une sortie similaire au paramètre "Imprimer optimisé" d'Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/default sélectionne la sortie destinée à être utile pour une grande variété d'utilisations, éventuellement au détriment d'un fichier de sortie plus volumineux
Michael D
la source
5
Cela devrait être la réponse acceptée. Ghostscript est le PDF, XPS et la mise en œuvre PS pour unix et peut faire pratiquement tout livrer la meilleure qualité ...
dom0
7
@Sina: Il existe actuellement un script Nautilus avec une interface graphique simple basée sur Zenity qui utilise cette commande gs avec toutes ses options de niveau de qualité: launchpad.net/compress-pdf
Sadi
36
C’est la bonne réponse à cette question (compression d’un fichier PDF principalement constitué de données bitmap). J'ai trouvé que le screenparamètre était de qualité trop ebookmédiocre pour moi, mais qu'il fonctionnait bien, réduisant à 3,6 Mo un fichier PDF numérisé de 33 Mo et le rendant très lisible. Milan.kupcevic.net/ghostscript-ps-pdf est une autre -dPDFSETTINGSoption. Vous pouvez les inclure dans cette réponse.
naught101
5
gs paramètres de configuration disponibles: ghostscript.com/doc/current/Ps2pdf.htm
Antonios Hadjigeorgalis
3
le 17.10, 42 mb pdf à 127 mb :(
YaSh Chaudhary,
157

Ma manière préférée de faire ceci est de convertir le pdf en ps et en arrière. Cela ne marche pas toujours, mais quand ça marche, les résultats sont bons:

ps2pdf input.pdf output.pdf

Cela fonctionne aussi directement sur les pdf, comme suggéré dans les commentaires.

Certains utilisateurs signalent également plus de succès lorsqu’ils utilisent les paramètres du livre électronique comme suit:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 
don.joey
la source
4
C'est un moyen très simple et efficace de le faire. J'ai été surpris de voir à quel point cette méthode compressait les fichiers. Merci!
Gabriel le
16
Bien que cette approche soit devenue ma solution préférée pour la compression de fichiers pdf, elle rompt les liens que le document peut avoir (ce qui ne se produit pas avec l'approche de @Michael D). En dehors de cela, je ne peux que penser à la génialité de cet extrait! (:
Rubens
1
@Rubens Ah. Ne savait pas sur le fait qu'il rompt les liens URL. Merci d'avoir ajouté ça.
don.joey
3
Cela contourne la protection par mot de passe ... just sayin '
jojo
8
ps2pdf prendra pdfs comme entrées, vous pouvez donc le faire en une seule étape:ps2pdf intput.pdf output.pdf
frabjous
127

Si vous avez un pdf avec des images numérisées , vous pouvez utiliser convertpour créer un pdf avec compression jpeg (vous pouvez utiliser cette méthode sur n’importe quel pdf, mais vous perdrez toutes les informations textuelles).

Par exemple:

convert -density 200x200 -quality 60 -compress jpeg input.pdf output.pdf

Ajustez la densité (par exemple 100x100) et la qualité à vos besoins.

En fonction de votre entrée, la compression JPEG peut ne pas être le meilleur choix en raison d'artefacts de compression. Vous avez le choix entre BZip, Fax, Groupe4, JPEG, JPEG2000, Sans perte, LZW, RLE ou Zip comme méthodes de compression alternatives (certaines n'autorisant que les images en noir et blanc). Pour plus de détails voir ici .

J'ai pu obtenir d'excellents taux de compression pour les documents numérisés / photographiés (en fonction des paramètres). Selon la source du document, vous souhaiterez peut-être réduire le nombre de couleurs ( -depthargument).

quelqu'un
la source
3
Pour un document numérisé où le texte correspond à ce qui vous intéresse et non les images et la préservation de la profondeur n'est pas un problème, la compression JPEG n'est pas une bonne idée car les artefacts ont tendance à être extrêmement perceptibles. Si vous utilisez pdfimages input.pdf pagespour extraire les fichiers pbm, alors vous pouvez faire quelque chose comme: for page in *.pbm; do convert $page -compress Group4 -type bilevel TIFF:- | convert - output.pdf. Toute OCR sera alors perdue pdfsandwich output.pdf, ce qui semble réduire encore plus la taille du fichier.
Brian Z
1
@BrianZ sure que la compression JPEG n'est pas toujours le meilleur choix, mais pour moi, c'était la meilleure approche pour les documents de type mixte. J'ai ajouté des informations sur d'autres méthodes de compression à la réponse.
Certains
2
Cette méthode utilise finalement gsles coulisses.
alfC
2
Je devais utiliser le double tableau de bord pour les options pour exécuter la commande --density --quality --compressvs -density -quality -compress.
Rotareti
1
Si la qualité d'image ne constitue pas une préoccupation majeure (et que vous souhaitiez simplement que la pièce jointe dang soit suffisamment petite pour être envoyée), vous pouvez -resize 50%également l' ajouter , modifiez le pourcentage en fonction de la quantité de DPI utilisée lors de la numérisation
chrki
41

J'avais besoin de réduire la taille d'un PDF contenant des numérisations couleur d'un document. Chacune de mes pages était une image en couleur dans la mesure où le fichier était concerné. C'étaient des images de pages contenant du texte et des images, mais elles ont été créées en numérisant une image.

J'ai utilisé une combinaison de la commande ghostscript ci-dessous et une d'un autre thread.

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true \
-dColorImageResolution=150 -dNOPAUSE  -dBATCH -sOutputFile=output.pdf input.pdf

Cela a réduit la résolution de l'image à 150 ppp, réduisant de moitié la taille de mon fichier. En regardant le document, il n'y avait presque aucune perte notable de qualité d'image. Le texte est toujours parfaitement lisible sur mon Nexus7 2012.

Mitty
la source
3
+1 pour les images d’échantillonnage descendant mais en conservant le texte comme vecteurs. Fait une énorme différence de côté sans rendre mon texte pixelisé.
Jason O'Neil
Fantastique de pouvoir régler la résolution avec cette commande - cela m’a donné de meilleurs résultats que d’utiliser simplement dPDFSETTINGS = \ screen
échange
29

Voici un script pour réécrire des fichiers PDF numérisés:

#!/bin/sh

gs  -q -dNOPAUSE -dBATCH -dSAFER \
    -sDEVICE=pdfwrite \
    -dCompatibilityLevel=1.3 \
    -dPDFSETTINGS=/screen \
    -dEmbedAllFonts=true \
    -dSubsetFonts=true \
    -dColorImageDownsampleType=/Bicubic \
    -dColorImageResolution=72 \
    -dGrayImageDownsampleType=/Bicubic \
    -dGrayImageResolution=72 \
    -dMonoImageDownsampleType=/Bicubic \
    -dMonoImageResolution=72 \
    -sOutputFile=out.pdf \
     $1

Vous pouvez le personnaliser un peu pour le rendre plus réutilisable, mais si vous n’avez qu’un seul $1fichier PDF, vous pouvez simplement le remplacer par votre nom de fichier pdf et le placer dans un terminal.

Oli
la source
1
Travaille un régal, merci Oli. Vous avez répondu à peu près à tout ce que j'ai demandé jusqu'ici :-D
Rob Cowell
C’est une bonne réponse, mais dans mon cas au moins, la conversion d’un fichier PDF plutôt volumineux (> 10 Mo) prend beaucoup de temps (plus d’une minute).
Gabriel
Je ne sais pas trop ce qui se passe, mais un fichier PDF de 30 Mo génère un fichier de 68 Mo. Au lieu de réduire, il grossit. Même résultat si vous utilisez directement ps2pdf comme indiqué dans la réponse suivante.
Ed Villegas
@ EdVillegas La seule chose à laquelle je puisse penser (pour expliquer ce type d’augmentation) est que les images ont une résolution inférieure à celles générées (72 ppp). Ou en quelque sorte, intégrer les polices, c'est aspirer toutes les polices.
Oli
21

J'utilise habituellement ps2pdf pour ce faire (syntaxe plus simple), quelque chose comme ceci:

ps2pdf -dPDFSETTINGS=/ebook BiggerPdf SmallerPDF

J'utilise le script python suivant pour réduire la taille de tous les fichiers pdf d'un répertoire d'un serveur de production (8.04). Donc ça devrait marcher.

#!/usr/bin/python

import os

for fich in os.listdir('.'):
        if fich[-3:]=="pdf":
                os.system("ps2pdf -dPDFSETTINGS=/ebook %s reduc/%s" % (fich,fich))
Javier Rivera
la source
Merci pour la solution alternative. J'ai d'abord essayé Oli et cela m'a donné le résultat dont j'avais besoin, mais je vais également garder celui-ci pour référence ultérieure.
Rob Cowell
1
-dPDFSETTINGS = L'option / printer effectue un redimensionnement à 50%. ebook faire 90% de redimensionnement.
neouyghur
17
  1. J'utilise LibreOffice Draw pour ouvrir le pdf.
  2. J'exporte ensuite en format pdf
  3. Et réglez la "qualité de compression JPEG" à 50% et la "résolution d'image" à 150 dpi

Cela aura un bon résultat.

Marius4674
la source
La pire solution possible au problème! Il a totalement foiré mon dossier!
9

Le meilleur pour moi était

convert -compress Zip -density 150x150 input.pdf output.pdf

D'autres moyens:

#### gs
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

### pdf2ps && ps2pdf
pdf2ps input.pdf output.ps && ps2pdf output.ps output.pdf

### Webservice
http://compress.smallpdf.com/de

Cordialement

oxydation
la source
Excellente solution. Facile à retenir, le pdf est passé de 32 à 3,5 Mo sans perte sensible de lisibilité.
Immanuel Weihnachten
J'ai aimé la deuxième voie pdf2ps input.pdf temp.ps && ps2pdf14 temp.ps output.pdf && rm temp.ps
McPeppr
5

Je viens de rencontrer ce problème moi-même. Si vous utilisez une numérisation simple, sélectionnez le mode texte pour les numérisations à basse résolution. Vous n'aurez plus à vous soucier de la ligne de commande. Je dis juste.

utilisateur179584
la source
1
Ceci est la seule réponse dans ce fil qui a résolu mon problème. J'ai minimisé Simplescan, mais c'était vraiment la solution pour moi, au lieu de me battre contre Xsane dans ce qui semblait être une agonie sans fin.
versvs
4

Contrôler la qualité de la compression:

#!/bin/sh
INPUT=$1; shift
OUTPUT=$1; shift
GS_BIN=/usr/bin/gs
QFACTOR="0.40"

# Image Compression Quality
#
# Quality HSamples VSamples QFactor
# Minimum [2 1 1 2] [2 1 1 2] 2.40
# Low     [2 1 1 2] [2 1 1 2] 1.30
# Medium  [2 1 1 2] [2 1 1 2] 0.76
# High    [1 1 1 1] [1 1 1 1] 0.40
# Maximum [1 1 1 1] [1 1 1 1] 0.15 

${GS_BIN} -dBATCH -dSAFER -DNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=${OUTPUT} -c "<< /ColorImageDict << /QFactor ${QFACTOR} /Blend 1 /HSample [1 1 1 1] /VSample [1 1 1 1] >> >> setdistillerparams" -f ${INPUT}
utilisateur525719
la source
... donc INPUT et OUTPUT sont les mêmes arguments? Vous voudrez peut-être ajouter des directives d'utilisation.
mikew Whatever
2
Notez le shift. Le premier paramètre est le fichier d'entrée, le second est le fichier de sortie et le reste des paramètres est passé gstel quel.
Mikko Rantalainen
Je pense que vous voulez / HSample s et / VSample s , pas / HSample et / VSample. Voir, par exemple, la documentation ps2pdf ou le manuel de référence du langage PostScript. Il convient également de noter que la plage autorisée de QFactor est comprise entre 0 et 1 000 000 et que des valeurs inférieures produisent une qualité supérieure.
Pont
3

Comme ce lien était le premier pour moi lorsque j'ai effectué une recherche dans Google, j'ai pensé ajouter une possibilité supplémentaire. Aucune des solutions ci-dessus ne fonctionnait pour moi sur un fichier PDF exporté d'Inkscape (15 Mo), mais j'ai enfin pu le réduire à 1 Mo en l'ouvrant dans GIMP et en l'exportant à nouveau au format PDF.

Une autre option proche (mais le texte était un peu flou) était l'utilitaire de conversion d'ImageMagick:

convert -compress Zip input.pdf output.pdf
mbroshi
la source
Je suppose que cela est ce que vous vouliez dire par « un peu floue », mais juste pour clarifier les choses, convert -compress Zipsembliez rasterise tous les vecteurs.
Sparhawk
3

En fin de compte, j'ai écrit mon propre script bash pour résoudre ce problème, il utilise mogrify, convertet gspour extraire des pages de pdf comme .png, les redimensionner, les convertir en 1 bit bmp puis les reconstruire en format pdf. La réduction de la taille du fichier peut être supérieure à 90%. Disponible à l' adresse http://www.timedicer.co.uk/programs/help/pdf-compress.sh.php .

Scooby Doo
la source
3

Je recommande fortement pdfsizeopt .

Il est beaucoup plus efficace en termes de réduction de la taille que l' un des anciens logiciels CLI et GUI que j'ai essayé (y compris convert, gs, pdftk, etc.) - mais peut - être plus lent avec pngoutactivé -, et ne dispose pas certains de leurs problèmes (pas très images pixélisées / dégradées, pas de perte de marque-pages, etc.).

Maintenant, si vous devez atteindre une certaine taille quelles que soient les conséquences (y compris la dégradation des images jusqu'à un point d'illisibilité), il ne s'agit peut-être pas de l'outil dont vous avez besoin, mais en tant que solution évolutive pour réduire les grandes tailles inutiles Dans les PDF sans perdre en lisibilité, en information et en qualité d'image acceptable, je pense que c'est la meilleure option. (Remarque: j'ai tendance à l'utiliser après avoir d'abord effectué une OCR de vectorisation dans Adobe Acrobat [cette fonction s'appelait auparavant "CleanScan"], ce qui peut avoir un impact dramatique sur la taille de certains documents texte numérisés.)


Je recommande l' installation Unix générique :

  1. Installez toutes les dépendances requises:

  2. Téléchargez et installez l'exécutable:

    curl -L -o https://raw.githubusercontent.com/pts/pdfsizeopt/master/pdfsizeopt.single
    cp pdfsizeopt.single /usr/local/bin/pdfsizeopt
    

Usage:

pdfsizeopt original.pdf [compressed.pdf]

Note pour les utilisateurs de Mac ayant trouvé ce post (ou les utilisateurs de Linuxbrew): il existe une formule d'installation Homebrew:

brew install --HEAD pts/utils/pdfsizeopt
iNyar
la source
2

Je faisais face au même problème et j'étais heureux de trouver ce fil. Plus précisément, j'avais un fichier PDF généré à partir d'images numérisées et j'avais besoin de réduire sa taille en octets d'un facteur 6.

Malheureusement, aucune des solutions ci-dessus n'a fonctionné :(. Ensuite, j'ai réalisé que quelque part dans le processus de numérisation-> jpeg-> pdf, la taille de la page avait été gonflée d'un facteur de 4 environ. Les documents scannés étaient tous de format Lettre, mais le pdf avait la taille de

identify -verbose doc_orig.pdf | grep "Print size"
 Print size: 35.4167x48.7222

J'ai finalement obtenu les résultats souhaités avec une commande "convertir" qui redimensionnait et compressait en une étape:

convert -density 135x135 -quality 70 -compress jpeg -resize 22.588% doc_orig.pdf doc_lowres.pdf

Notez que doc_orig avait une densité de 72x72 dpi.

Kalpit
la source
1

Si la conversion en djvu serait également acceptable et si aucune couleur n'est impliquée, vous pouvez essayer les solutions suivantes:

Convertissez le pdf en jpg en utilisant pdfimages -j

Si vous obtenez des fichiers pbm à la place, vous devez effectuer l'étape intermédiaire:

for FILENAME in $(ls *.pbm); do convert $FILENAME ${FILENAME%.*}.jpg ;done

La commande convert provient du paquet imagemagick.

Ensuite, utilisez scantailor pour en faire des tif.

Dans une dernière étape, vous allez dans le répertoire des scantailors out (où sont situés les tif) et appliquez djvubind à ce répertoire.

Cela devrait réduire considérablement la taille du fichier sans perte importante de qualité du texte. Si vous voulez un contrôle plus précis du back-end d'ocr, vous pouvez djvubind --no-ocrutiliser ocrodjvu pour ajouter la couche ocr par la suite.

Si vous avez de la couleur dans votre document, les choses se compliquent un peu. Au lieu de djvubind, vous pouvez utiliser didjvu et, dans Scantailor, vous devez passer en mode mixte et sélectionner parfois les images couleur manuellement.

étudiant
la source
1

charger une image ou même un fichier pdf dans inkscape.

À partir d’Inkscape: enregistrez au format vectoriel (en tant que fichier .svg natif).

Importez des fichiers vectoriels dans scribus, modifiez la mise en page et exportez / enregistrez au format .pdf à partir de là.

singe
la source
0

Outil de compression PDF très simple: page GitHub.

Installation sur Ubuntu:

sudo add-apt-repository ppa:jfswitz/released

sudo apt-get update

sudo apt-get install pdf-compressor

Il utilise ghostscript.

John
la source
0

Vous pouvez essayer ceci:

$ time pdftk myFile.pdf output myFile__SMALLER.pdf compress
GC Warning: Repeated allocation of very large block (appr. size 16764928):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 11837440):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 8384512):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 7254016):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 34041856):
    May lead to memory leak and poor performance.
GC Warning: Repeated allocation of very large block (appr. size 33525760):
    May lead to memory leak and poor performance.

real    0m23.677s
user    0m23.142s
sys     0m0.540s
$ du myFile*.pdf
108M    myFile.pdf
74M     myFile__SMALLER.pdf

Il est plus rapide gsmais compresse jusqu’à 30% dans ce cas pour un fichier d’entrée de 107.5MiB.

SebMa
la source
0

Pour moi, l' screenoption gs était trop mauvaise et ebooktrop grande.

Mon document original contenait du texte sous forme d'images couleur et noir et blanc (selon la page).

La meilleure solution que j'ai trouvée a été:

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dDownsampleColorImages=true -dDownsampleGrayImages=true -dDownsampleMonoImages=true -dColorImageResolution=130 -dGrayImageResolution=130 -dMonoImageResolution=130 -r130 -dNOPAUSE  -dBATCH -sOutputFile=output_lr.pdf input.pdf

Notez que le niveau de compression n’est pas linéaire. Si j’ai spécifié 135, il n’a pas été compressé, mais 130 a été (dans mon cas) la résolution maximale permettant d’obtenir une compression.

Antonello
la source
-1

J'ai utilisé les commandes ci-dessous mais il n'a pas compressé mon fichier pdf de manière substantielle. Parfois, une partie de la portion était noircie après compression.

  1. gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf $INPUTFILE

  2. "ps2pdf -dPDFSETTINGS=/ebook %s %s" % (input_file_path, out_file_path)

Après avoir trop erré sur le Web, je ne trouvais tout simplement pas la bonne bibliothèque de compression. Je suis venu à travers pdfcompressor.com. C'est juste un site génial. Il compresse le pdf de 95% (15 Mo de fichiers). J'ai donc utilisé le sélénium et Tor pour automatiser la compression. Commander mon dépôt Github. [GITHUB] ( https://github.com/gugli28/PdfCompressor )

Prince
la source