web-dev-qa-db-fra.com

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

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.

355
tamimym

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.

140
v2r

Utilisez la commande suivante ghostscript :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
  • -dPDFSETTINGS=/screen qualité inférieure, taille plus petite. ( 72 dpi )
  • -dPDFSETTINGS=/ebook pour une meilleure qualité, mais des fichiers PDF légèrement plus volumineux. ( 150 dpi )
  • -dPDFSETTINGS=/prepress résultat similaire au paramètre "Prepress Optimized" d'Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/printer sélectionne une sortie similaire au paramètre "Imprimer optimisé" d'Acrobat Distiller ( 300 dpi )
  • -dPDFSETTINGS=/default sélectionne une sortie destinée à être utile pour une grande variété d'utilisations, éventuellement au détriment d'un fichier de sortie plus volumineux
490
Michael D

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 paramètres du livre électronique comme suit:

ps2pdf -dPDFSETTINGS=/ebook input.pdf output.pdf 
147
don.joey

Si vous avez un pdf avec des images numérisées , vous pouvez utiliser convert pour 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 densité (par exemple 100x100) et qualité à vos besoins.

Selon votre entrée jpeg compression pourrait 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 (argument -depth).

122
someonr

J'avais besoin de réduire la taille d'un PDF contenant des documents numérisés en couleur. 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.

39
mlitty

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 fichier PDF, vous pouvez simplement remplacer $1 par votre nom de fichier pdf et le placer dans un terminal.

28
Oli

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))
20
Javier Rivera
  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.

16
Marius4674

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

8
oxidworks

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.

5
user179584

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}
3
user525719

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

3
scoobydoo

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
3
mbroshi

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 numérisé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.

2
Kalpit

J'ai récemment découvert et recommande fortement pdfsizeopt.

Il est beaucoup plus efficace que tous les logiciels CLI et GUI précédents que j'ai essayés (y compris convert, gs, pdftk, etc.) - bien qu’il soit peut-être plus lent avec pngout activé - et ne présente pas certains de leurs problèmes (pas très pixelisé/images dégradées, pas de perte de marque-pages, etc.).

Je recommande le 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]
1
Serge B.

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à.

1
ape

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 souhaitez un contrôle plus précis du back-end d'ocr, vous pouvez essayer djvubind --no-ocr et utiliser 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 didjv et vous devez passer en mode mixte et sélectionner parfois les images couleur manuellement.

1
student

Super simple PDF outil de compression: 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.

0
John

Pour moi, l'option gs screenétait trop mauvaise, et celle de ebookétait trop 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.

0
Antonello

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 que gs mais compresse jusqu’à 30% dans ce cas pour un fichier d’entrée de 107,5 Mo.

0
SebMa