Petit préambule.

L'histoire est simple : je récupère un article en pdf (Birkeland_1980.pdf), qui s'affiche correctement, mais qui ne veut pas s'imprimer correctement du tout. Le résultat ressemble à peu près à ça (cliquer sur les images pour les avoir en gros) :

Première impression

C'est là un des problèmes du pdf : quand c'est bien fait, il n'y a aucun problème, mais la partie affichée et la partie à imprimer ne sont pas forcément les mêmes (souvent ce genre de choses arrive avec des documents scannés, comme nous allons le voir).

Viva Linux !

Pour ne pas perdre de traces de tout ça, voici donc la méthode que j'ai du utiliser pour m'en sortir, le tout grâce essentiellement à des outils en ligne de commande sur Linux.

La 1e approche a été de transformer le fichier en ps pour retenter l'impression et voir d'où pouvait venir le problème :

pdftops Birkeland_1980.pdf

Le résultat n'est pas fameux mais permet de comprendre que la zone d'impression n'est pas définie de la même manière que la zone d'affichage. Il s'agit bien de documents scannés, sur une zone plus large que la page elle-même, et le travail d'affichage est effectué directement par le pdf plutôt que de découper avant tout les images scannées. Il va donc me falloir faire le boulot à la main.

Extraction des images

Un petit utilitaire du doux nom de pdfimages permet de faire ça très bien :

pdfimages Birkeland_1980.pdf Birk

Cette commande extrait 5 images (1 par page) dont le nom commence par Birk*, au format pbm (format monochrome, inversé) qui ressemblent à ça :

Image monochrome

Traitement des images

Par commodité, et comme il n'y a que 5 images, je fais cette étape sous Gimp (NB : il aurait été tout à fait possible d'automatiser tout ça via ImageMagick).

Avec Gimp, dans l'ordre, j'ai inversé le contraste (Calque > Couleurs > Inverser) avant de sélectionner la zone entourant le texte uniquement, sans les marges (Sélection rectangulaire). Copier la sélection puis créer un nouveau document (Fichier > Nouveau) en gardant les dimensions et les options proposées (par défaut, l'image aura un fond blanc). Coller dans le nouveau document.

Il s'agit ensuite de redimensionner l'image pour y ajouter des marges : je redimensionne en fait le canevas à une dimension de 1600×2263, pour conserver les proportions d'un A4 (Image > Taille du canevas), avant de mettre le calque aux dimensions du canevas (Calque > Calque aux dimensions de l'image). Et voilà le travail, il ne reste plus qu'à enregistrer au format png (Fichier > Enregistrer) en gardant les réglages proposés.

Le résultat est alors le suivant :

Image modifiée

Export en pdf

La dernière étape se fait en une seule ligne de commande, via l'utilitaire convert d'ImageMagick :

convert -page A4+0+0 -quality 90 -adjoin *.png Birkeland_1980final.pdf

La commande prend quelques secondes pour s'exécuter. Le paramètre page permet de spécifier le format de la page (ici A4), le paramètre quality règle le taux de compression de l'image (ici 90 pour une compression maximale, sans dégradation de la qualité visible à l'œil), et le paramètre adjoin spécifie qu'il faut intégrer toutes les images dans le pdf final.

Le résultat est magnifique et méritait bien une après-midi de foutue...