PDFtk est un outil puissant pour la manipulation de fichiers PDF. J'ai eu besoin de ce genre d'outil pour l'impression du manuel de programmation de la Game Boy. Il devait être aux normes, et cela n'a pas été une mince affaire.

Le fichier source est GameBoyProgManVer1.1.pdf (3,3 Mio).
Le fichier corrigé et optimisé : gameboy-programming-v1.1.pdf (1,8 Mio).


Orienter

Les pages 301, 302 et 303 du manuel sont en mode paysage alors que toutes les autres sont en mode portrait. Voici comment réorienter ces 3 pages :

pdftk \
    "GameBoyProgManVer1.1.pdf" \
    cat \
    1-300 \
    301-303left \
    304-end \
    output \
    "manual-fixed.pdf"

Redimensionner

Pour vérifier que toutes les pages ont les même marges :

cat -v "GameBoyProgManVer1.1.pdf" | grep MediaBox | sort | uniq
/MediaBox [0 0 595 842]
/MediaBox [0 0 612 792]

Redimensionnons toutes les pages :

sed 's/MediaBox \[0 0 595.*/MediaBox \[0 0 612 792\]/g' \
    "GameBoyProgManVer1.1.pdf" \
    > "manual-fixed.pdf"

Fusionner

Pour fusionner plusieurs fichiers PDF en un seul :

pdftk \
    "cover.pdf" \
    "manual-fixed.pdf" \
    cat \
    output \
    "book.pdf"

Incorporer les Polices Manquantes

Il manquait quelques polices (que j'ai du convertir au format postscript). Les fichiers sont placés dans le dossier "pdf-fonts" :

gs \
    -o "manual-fixed.pdf" \
    -sDEVICE=pdfwrite \
    -dPDFSETTINGS=/prepress \
    -dEmbedAllFonts=true \
    -sFONTPATH="./pdf-fonts" \
    "GameBoyProgManVer1.1.pdf"

En réalité, cette commande a été prise de tête, j'ai donc ouvert le PDF sur un Mac, et fait un nouvel export. Les polices manquantes furent intégrées automatiquement.


Optimiser

GhostScript permet de réduire grandement le poids du fichier final :

gs \
    -o "gameboy-programming-v1.1.pdf" \
    -sDEVICE=pdfwrite \
    -dPDFSETTINGS=/prepress \
    -dEmbedAllFonts=true \
    "manual-fixed.pdf"