Table des matières

Manipulations de fichiers PDF

Page créée le 29 mars 2023

Manipulation de fichiers pdf en ligne de commande, par exemple pour des traitements par lots. Il existe de nombreux utilitaires sous linux dont les fonctions sont parfois identiques. Cette page présente différents exemples d'utilisation qui nous ont été utiles au fil du temps!

Le paquet poppler-utils comprend plusieurs utilitaires dont pdfseparate, pdffonts, pdfattach, pdfunite, etc.

pdfjam fait partie du paquet texlive-extra-utils, et permet d'utiliser les fonctions de pdfpages pour LaTeX. «pdfjam is a shell-script front end to the LaTeX 'pdfpages' package»

pdfjam --help

ghostscript

Autres logiciels utiles

Extraire des feuillets d'un document pdf

Extraire toutes les pages

pdfseparate -f 1 document.pdf pages_%d.pdf

Extraire la page 3

pdfseparate -f 3 -l 3 document.pdf page3.pdf

-f (first) : première page à extraire
-l (last) : dernière page à extraire

Divers

Ajouter un fond perdu

En anglais, fond perdu = bleed
La commande suivante ajoute un fond perdu de 3mm sur chaque côté d'une page A5 (148x210mm), un cadre entoure la page originale (–frame true), les fichiers embedded sont conservés.

pdfjam --scale 1.0 --frame true --noautoscale true --papersize '{154mm,216mm}' -o document.pdf document_avec_fond_perdu.pdf

–frame true : cadre noir autour de la page originale

Ajouter des pages vides

pdfjam document.pdf '1-111,{}' -o document_complet.pdf

Ici, une page vide est ajoutée après la page 111 du document original, on peut moduler (par ex. '1,{},3-4,{},5-' ) cf. https://equa.space/notes/pdfjam/

Infos sur les polices d'un document

pdffonts document.pdf

Ces infos permettent de savoir si le fichier de fonte est intégré (embedded) dans le fichier pdf, son type, etc. cf. doc pdffonts

Optimiser un pdf pour réduire la taille du fichier (avec ghostscript)

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dEncodeColorImages=false -dNOPAUSE -dQUIET -dBATCH -sOutputFile=optimized.pdf document.pdf

-dEncodeColorImages=false : ne pas réencoder les images JPEG
Si on souhaite qu'aucune modification ne soit appliquée aux images on peut ajouter (source) :

  -dColorConversionStrategy=/LeaveColorUnchanged \
  -dEncodeColorImages=false \
  -dEncodeGrayImages=false \
  -dEncodeMonoImages=false \

Lister toutes les images d'un pdf

Avec leurs caractéristiques (colorspace, width, height, x-ppi, y-ppi, etc.)

pdfimages -list document.pdf

Extraire toutes les images d'un pdf

pdfimages -all document.pdf /chemin/absolu/racine

-all : conserver les formats d'origine

Il faut absolument indiquer un chemin absolu valide!

Conversion de profil de couleur

(KO par abandon)

On dirait bien que c'est un sujet complexe… Avec imagemagick on peut obtenir des informations sur le profil icc utilisé :

identify -format '%[colorspace]' document.pdf

Mais d'autres lectures indiquent que chaque élément d'un pdf peuvent avoir des profils associés différents.
Pour une conversion en CMJN, je fais un essai avec

gs -o document_cmjn.pdf -sDEVICE=pdfwrite -sProcessColorModel=DeviceCMYK -sColorConversionStrategy=CMYK -sColorConversionStrategyForImages=CMYK document.pdf 

Mais identify le détecte toujours comme du sRGB …
En revanche avec pdfimages -list document_cmjn.pdf on peut voir que les images sont bien reconnues comme étant en CMJN

Test avec ghostscript et un profil ICC

gs -o test_fogra.pdf -sDEVICE=pdfwrite -dOverrideICC=true -sOutputICCProfile=Coated_Fogra39L_VIGC_300.icc -sColorConversionStrategy=CMYK -sColorConversionStrategyForImages=CMYK -dProcessColorModel=/DeviceCMYK -dRenderIntent=3 -dDeviceGrayToK=true document.pdf

Mais ghostscript transforme toutes les images en JPEG…
nb : un pdf ne peut pas contenir d'iamges au format PNG.

Je laisse tomber pour cette fois

Ressources

Télécharger des profils de couleur (dont Fogra39) : https://www.color.org/registry/index.xalter