Redimensionner et compresser des fichiers PDF par lots

15

J'ai besoin d'un moyen de réduire et de compresser des lots de fichiers PDF. Je préférerais le faire sous Windows, mais Linux serait bien si cela signifiait un flux de travail plus fluide.

Je sais qu'il existe des programmes tels que NitroPDF et Acrobat qui vous permettent d'accomplir cela, mais je crains que cela ne doive être fait fichier par fichier. Ces programmes ne sont pas non plus bon marché et je préférerais ne pas les acheter juste pour pouvoir utiliser une ou deux fonctionnalités.

Informations générales: j'utilise CamScanner pour numériser les reçus et les factures pour la saisie des comptes (FreeAgent). Les fichiers PDF CamScanner sont tous de format A4 et ceux de plusieurs pages dépassent souvent la limite de pièces jointes de 2 Mo.

Stan
la source

Réponses:

15

Je propose ici un outil en ligne de commande, qui peut être facilement groupé avec des boucles dans les langages de script intégrés sous Windows, Linux, OS X, etc.


ImageMagick prend en charge les fichiers PDF et dispose d'une resizeoption avec son outil de conversion . Je ne l'ai jamais utilisé personnellement, mais vous pouvez essayer de jouer avec.

Vous pouvez également utiliser l' compressoption (il y a un exemple ici ):

Faire pivoter un PDF

$ convert -rotate 270 -density 300x300 -compress lzw in.pdf out.pdf

Cela suppose un PDF soutenu par TIFF. Le paramètre de densité est important car sinon ImageMagick sous-échantillonne l'image (pour une raison quelconque). L'ajout de l'option de compression permet de réduire la taille globale du PDF, sans perte de qualité.

Pour les PDF multipages, vous pouvez utiliser pdftk, puis utiliser mogrifydepuis ImageMagick pour convertir chaque page en place:

$ pdftk in.pdf burst
$ mogrify -rotate 270 -density 300x300 -compress lzw pg_*.pdf
$ pdftk pg*.pdf cat output out.pdf
$ rm pg*.pdf


Pour convertir des fichiers PDF avec ImageMagick, vous devez avoir GhostScript installé.


ImageMagick peut convertir des fichiers PDF multipages. Bien que la mogrifyconversion soit en place, je vous recommande de l'utiliser convertafin de pouvoir conserver les originaux en cas d'accident.


J'ai fait quelques tests sur votre exemple de PDF fourni. Cela a très bien fonctionné pour moi:

convert -density 200 -compress jpeg -quality 20 test.pdf test2.pdf

La densité par défaut est 72DPI. En le réglant plus haut, nous pouvons obtenir une résolution plus élevée et donc une qualité acceptable. Il avait l'air bien 150et était un peu plus petit, mais si vous voulez répondre à une gamme de PDF 200devrait fonctionner.

La compression JPEG doit soit automatiquement choisir un niveau ou à défaut 92sur une échelle de 1à 100avec 100être le meilleur. En le réglant sur 20, il semble presque aussi bon que l'original (un peu plus flou et le petit texte en bas est un peu difficile à lire, mais il était à l'origine de toute façon).

Ces options apporter votre 1.7MB échantillon jusqu'à 0,5 Mo , tout en gardant lisible. Vous pouvez expérimenter un peu.

Si vous voulez une taille plus petite (à la fois du fichier et de l'image / PDF), vous pouvez utiliser -resize #%, par exemple -resize 75%. Sur votre exemple de PDF, cela rend cependant les petits caractères en bas à peu près illisibles.

Si vous manquez d'espace, en particulier pour les PDF multipages, vous pouvez compresser davantage en ajoutant les fichiers à une archive ZIP (ou autre). Cela a ramené la taille du fichier à 0,43 Mo sur ce PDF de test (la réduction de la qualité de compression JPEG a un effet beaucoup plus drastique). Vous pouvez également diviser le fichier PDF en pages avec pdftk, comme @glallen l'a suggéré dans sa modification, ou diviser l'archive et la recombiner à l'autre extrémité.

2 Mo est également une limite de pièce jointe assez petite, vous voudrez peut-être examiner d'autres fournisseurs de messagerie. De mémoire, GMail fournit plus de 10 Mo par e-mail.

Ces options, et bien plus, sont entièrement documentées sur leur site Web .

Bob
la source
Cela semble être une excellente approche, mais je ne pense pas que mes fichiers PDF soient soutenus par TIFF. CamScanner prend d'abord des photos JPEG, puis les convertit en PDF pour l'exportation. Le traitement de ces fichiers PDF semble les sous-échantillonner comme l'indique le billet de blog, quelle que soit la compression. La conversion de PDF en TIFF, puis de nouveau en PDF semble préserver la qualité, mais gonfle la taille du fichier et gâche la taille et la densité de la page.
Stan
@paganompu Si je comprends bien, vous voulez réduire la taille du fichier. Que diriez-vous de compresser en tant que JPEG? Comment ça s'est resizepassé? Avez-vous un exemple de fichier (non sensible) avec lequel nous pourrions jouer? Le sous-échantillonnage est-il acceptable?
Bob
JPEG aurait été bien, mais je dois télécharger des documents de plusieurs pages et je ne peux avoir qu'une pièce jointe par entrée de compte. Le sous-échantillonnage est sévère: ce document de test est illisible après conversion avec compression sans perte.
Stan
@paganompu J'ai moi-même expérimenté un peu et j'ai mis à jour la réponse avec une commande qui fonctionne. Voir ici pour un test sur votre dossier.
Bob
Cette commande fonctionne comme un charme. On dirait que mon "sous-échantillonnage" était dû à l'omission density... Je jure que je peux lire et suivre les instructions! Un peu gêné maintenant: S Merci d'avoir pris le temps de m'aider Bob
Stan
19

Ainsi, à convertpartir d'ImageMagick produira un PDF tramé et de nombreuses personnes seraient intéressées à conserver les graphiques vectoriels et le texte intacts afin que seules les images intégrées soient compressées. Donc, une bonne alternative à la compression consiste à utiliser gsun ghostscriptexemple d'utilisation du package :

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf

dans le paramètre de commande ci-dessus: -dPDFSETTINGS=/ebookest important. Il peut avoir 3 valeurs:

-dPDFSETTINGS=/screen   (screen-view-only quality, 72 dpi images)
-dPDFSETTINGS=/ebook    (low quality, 150 dpi images)
-dPDFSETTINGS=/printer  (high quality, 300 dpi images)
-dPDFSETTINGS=/prepress (high quality, color preserving, 300 dpi imgs)
-dPDFSETTINGS=/default  (almost identical to /screen)
aNeutrino
la source