Faire sous Linux un PDF "propre" au format A5

Cette page présente une méthode pour produire sous Linux® un pdf "propre" au format A5 (14,85 cm x 21 cm) utilisable en production par un éditeur ou pour faire son auto-édition et, en particulier, en principe, conforme aux exigences de lulu.com. Elle est facile à adapter à d'autres formats de page. Elle est mise en œuvre sous Ubuntu (diverses distributions) mais la technique est plus générale.

L'auteur de cette page fait de son mieux pour partager son expérience en la matière mais ne garantit pas l'absence d'erreurs. Par ailleurs, des évolutions techniques des logiciels peuvent survenir et obliger à adapter les opérations effectuées. L'auteur ne pourra pas être tenu responsable de résultats incorrects. Il appartient à l'utilisateur d'exercer son esprit critique et de tester.

Sommaire

Vue d'ensemble

Besoin

Comme la plupart des ouvrages publiés, les livres que l'on peut éditer chez lulu.com ne sont pas au format A4. Ils sont fabriqués par l'impression d'un pdf qui peut être effectuée chez divers prestataires non connus à l'avance. Le fichier pdf doit donc être très robuste pour permettre l'obtention d'une version papier conforme aux attentes de l'auteur, indépendamment de l'imprimante utilisée.

A cet effet, il doit contenir TOUTES les polices utilisées, de préférence rien que les polices utilisées, et, SURTOUT, CHAQUE POLICE UTILISEE NE DOIT APPARAITRE QU'UNE FOIS DANS LE FICHIER, sous peine de désagréments. Malheureusement, les nombreux logiciels qui permettent à tout un chacun de produire son pdf aujourd'hui ne respectent pas forcément ces exigences et l'auteur de cette page a pu faire l'expérience que ceci peut conduire à des résultats aléatoires.

A titre d'exemple, voici un extrait d'une page polluée par des signes parasites qui sont appparus seulement dans le onzième exemplaire imprimé d'un ouvrage !

Exemple d'erreur

Comme le montre l'image précédente, la présence redondante d'une police avec deux codages différents produit une salade de caractères indésirables...

Principe

Les utilisateurs de Windows® trouveront leur voie à l'aide des solutions expliquées par Don Campbell dans sa FAQ sur le PDF et, notamment, dans son guide sur le PostScript.

Sous Linux®, il est aussi possible de faire les choses proprement et sans débourser un centime mais cela demande de mettre un peu les mains sous le capot pour disposer d'une méthode qui permette de maîtriser à la fois les polices et le format de page.

En fait, après quelques préliminaires effectués une fois pour toutes, il faut procéder en deux étapes :

  1. Imprimer son document dans un fichier POSTCRIPT,
  2. Transformer le fichier ps obtenu en un fichier pdf répondant aux spécifications énoncées.

C'est maintenant qu'on retrousse ses manches.

Préliminaires

Modification du pilote (PPD)

Pour produire le fichier Postscript requis dans le premier temps, il ne faut pas utiliser n'importe quel pilote. Il FAUT utiliser celui d'Adobe qui est spécialement optimisé pour la fabrication ultérieure d'un pdf.
Malheureusement, le fichier de description des caractéristiques Postscript de "l'imprimante" correspondante, connu sous le doux nom de adist.ppd (ppd = Printer Postscript Description), ne contient, en dehors des formats anglo-saxons classiques, que les formats A3 et A4.
Toutefois, ce fichier est un simple fichier texte facile à modifier pour y ajouter le format de son choix. Dans ce qui suit, deux manipulations vont être faites simultanément:
- changer le format par défaut de Letter à A4,
- ajouter le format personnalisé A5 parmi les formats offerts.
Le A5, demi A4, mesure
- en largeur :
148,5 mm, soit en pouces 148,5/25,4 = 5,846456693 in, soit en points à raison de 72 dpi 5,846456693*72 = 420,94488189 arrondi à 421 points,
- en hauteur :
210 mm, soit en pouces 210/25,4 = 8,267716535 in, soit en points à raison de 72 dpi 8,267716535*72 = 595,275590551 arrondi à 595 points.
Pour un autre format, il suffit de choisir un nom simple et de faire les mêmes calculs. Dans la suite, on prend l'exemple de A5 [421, 595].

Télécharger le fichier adist5.ppd sur le site de Don Campbell ou bien sur le site d'Adobe où il se trouve dans le fichier adobe.zip (clic droit sur le lien puis "Enregistrer sous...").

Oui, c'est un fichier qui est présenté dans un contexte d'utilisation sous Windows® mais, pas de panique, tout va bien se passer.

Enregistrer adist5.ppd ou adobe.zip à un endroit facile à retrouver. Si nécessaire, extraire adist5.ppd puis en faire une copie qui va être modifiée, en la nommant différemment, par exemple adist_avec_A5.ppd. Ce fichier peut se trouver n'importe où, du moment qu'il est facile à retrouver. Avec un éditeur de texte, par exemple gedit, ouvrir la copie adist_avec_A5.ppd et lui apporter les modifications suivantes qui ont pour effet, de manière évidente, de mettre A4 comme format par défaut et d'ajouter A5 dans les formats disponibles.

=== début de manipulation ===

Dans la rubrique *% Paper Handling , changer la taille par défaut en :

*DefaultPageSize: A4

Dans la liste des définitions de formats, ajouter les lignes suivantes, qui utilisent les calculs précédents (on peut faire un copier coller des lignes relatives à A4 et les modifier) :

*PageSize A5: "
2 dict dup /PageSize [421 595] put dup /ImagingBBox null put
setpagedevice"
*End

Conpléter la rubrique *?PageSize: " par la ligne indiquée en gras ci-dessous :

save
...
dup [421 595] (A5) put
...
{ exch aload pop 4 index sub abs 5 le exch
5 index sub abs 5 le and
{ exch pop exit } { pop } ifelse
} bind forall
= flush pop pop
restore
"

Dans la rubrique *OpenUI *PageRegion: PickOne, modifier la taille par défaut pour lire :

*DefaultPageRegion: A4

et ajouter :

*PageRegion A5: "
2 dict dup /PageSize [421 595] put dup /ImagingBBox null put
setpagedevice"
*End

Dans la rubrique *% The following entries provide information about specific paper keywords, modifier :

*DefaultImageableArea: A4

et ajouter :

*ImageableArea A5: "0.0 0.0 421.0 595.0"

Dans la rubrique *% These provide the physical dimensions of the paper (by keyword)

Changer :

*DefaultPaperDimension: A4

et ajouter :

*PaperDimension A5: "421 595"

=== fin de manipulation ===

Enregistrer et refermer le fichier ainsi modifié.

Il ne reste plus qu'à installer une nouvelle imprimante virtuelle qui va utiliser ce ppd pour produire un fichier postscript. Sous Ubuntu, ceci se fait en déroulant le menu Système > Administration > Impression (ou Imprimantes).

Installation d'une nouvelle imprimante virtuelle

Ancienne génération (testé sous Gutsy Gibbon)

(pour les distributions récentes, la méthode est légèrement différente, comme indiqué plus bas.)

Dans la fenêtre qui s'ouvre, un clic sur "Nouvelle imprimante" ouvre une nouvelle boîte de dialogue dans laquelle on sélectionne "Print into PDF file" et on clique sur suivant.
Nouvelle imprimante step 1

Dans la boîte suivante: on sélectionne "fournir un fichier ppd" et d'un clic sur la petite imprimante on parcourt le système de fichiers pour aller chercher le ppd modifié précédemment.

Nouvelle imprimante step 2

On clique sur suivant et dans la boîte suivante, il faut donner un nom à l'imprimante, simple mais explicite, et il est possible d'ajouter un commentaire

Nouvelle imprimante step 3

Cliquer sur "Appliquer", l'imprimante est disponible. Sortir de l'utilitaire d'administration de l'impression.

Nouvelle génération (testé sous Lucid Lynx)

Après avoir déroulé le menu Système > Administration > Impression, un clic sur "+Ajouter" ouvre la boîte "nouvelle imprimante" pré-remplie.

Nouvelle imprimante step NG3

Cependant, à ce stade, si l'on clique sur "Suivant", le système cherche puis installe automatiquement le pilote sans jamais laisser la possibilité de choisir son propre fichier ppd.

Il faut donc sélectionner "Autre", entrer manuellement la même URI cups-pdf:/ (copier-coller) puis cliquer sur "Suivant". Là, le système permet de choisir l'option de fournir le fichier ppd.

Nouvelle imprimante step NG4

Dans le champ idoine, on choisit le fichier voulu puis on clique sur suivant. La boîte de dialogue propose le nom "Acrobat-Distiller" et une description.

Nouvelle imprimante step NG5

Il ne reste plus qu'à cliquer sur "Appliquer". Dans "Impression", deux nouvelles imprimantes font surface : PDF et "Acrobat-Distiller", qu'on va utiliser.

Nouvelle imprimante step NG6

Le plus dur est fait !

Génération du fichier postscript

Cas général

Ouvrir le document à transformer dans son application d'origine (si elle était déjà ouverte, il faudra peut-être la fermer et la réouvrir pour qu'elle voit la nouvelle imprimante).

Lancer l'impression du fichier et choisir la nouvelle imprimante qui vient d'être créée, en cochant "Imprimer dans un fichier" (voir le cas particulier de Trusty Tahr avec le bureau MATE), et dans la boîte de dialogue "propriétés" choisir le format de papier souhaité et spécifier le langage de sortie de l'imprimante.

Par exemple dans OpenOffice :
Langage 1Langage 2

Enregistrer le fichier voulu, par exemple mon_fichier.ps, dans le dossier adéquat.

Ce fichier peut être transféré à lulu.com qui offre la possibilité de produire le pdf. Cependant, si l'on veut tout faire soi même, il reste une étape à accomplir. Cela peut être intéressant pour réduire les temps de téléchargements, par exemple, les fichiers pdf étant considérablement moins volumineux que leurs homologues en postscript.

Cas de Trusty Tahr avec le bureau MATE

Problème

L'auteur constate que sous Trusty (Ubuntu 14.04.5 LTS), avec le bureau MATE (MATE Desktop Environment 1.8.2), en utilisant LibreOffice (Version: 5.2.7.2 Build ID: 1:5.2.7-0ubuntu1~trusty1), la case à cocher "Imprimer dans un fichier" n'apparaît plus lorsqu'une imprimante est sélectionnée, comme le montre l'illustration suivante rassemblant tous les onglets de la boite de dialogue "Imprimer".
Imprimer sous Trusty+MATE+LibreOffice

Bien que la boite de dialogue "Propriétés" permette toujours de choisir Postscript comme langage de l'imprimante, l'impression est directement traduite en PDF.
Propriétés sous Trusty+MATE+LibreOffice

Exemple avec les options ci-dessus :
Exemple Distiller sous Trusty+MATE+LibreOffice Exemple de Fichier Distiller sous Trusty+MATE+LibreOffice

et, pour ceux qui douteraient, la commande file permet de vérifier :

$ file A5_LO_doc.pdf

A5_LO_doc.pdf: PDF document, version 1.4

Avec cette méthode, l'utilisateur ne maîtrse pas vraiment le processus. Observons aussi que le PDF est en version 1.4, alors qu'il est préférable d'utiliser le 1.3 pour une meilleure compatibilité avec les éditeurs. Que se passe-t-il si l'on emploie directement le langage pdf ?
Distiller avec langage PDF sous Trusty+MATE+LibreOffice Fichier Distiller PDF sous Trusty+MATE+LibreOffice

$ file A5_LO_doc_langPDF.pdf

A5_LO_doc_langPDF.pdf: PDF document, version 1.4

Les deux fichiers ont exactement la même taille (pour info, l'odt source fait 409,4 ko) :
Comparaison Distiller sous Trusty+MATE+LibreOffice

MAIS, pour ceux qui se poseraient la question, la commande cmp permet de comparer les deux fichiers octet par octet :

$ cmp -l A5_LO_doc.pdf A5_LO_doc_langPDF.pdf

2285227 60 61
2285228 70 141
2285229 61 64
2285230 142 141
2285231 65 143
2285232 66 64
2285233 141 63
2285234 67 64
2285239 143 146
[...]

et de conclure que les deux PDF produits sont différents.

Quoiqu'il en soit, les méthodes appliquées pour les élaborer ne permettent pas de garantir qu'ils répondent au besoin.

L'histoire ne s'arrête cependant pas là car il existe deux autres façons de produire un PDF depuis LibreOffice.

En effet, en tête de la liste des imprimantes utilisables dans la boite de dialogue "Imprimer" figure une option "Imprimer dans un fichier...". Par défaut, cette option propose de créer un PDF en utilisant le pilote de l'imprimante par défaut du système, comme le montre l'illustration suivante.
Imprimer dans un fichier sous Trusty+MATE+LibreOffice

Cette manière de produire le PDF n'offre pas non plus la maîtrise suffisante pour répondre au besoin. Cependant, elle donne l'idée d'une procédure satisfaisante.

Solution

La solution consiste à :

La commande file permet de vérifier la nature du fichier :

$ file A5_LO_doc_Imprimer_PS.ps

A5_LO_doc_Imprimer_PS.ps: PostScript document text conforming DSC level 3.0, Level 3

Cette fois, on a bien obtenu le résultat voulu, un fichier Postscript produit par le pilote Adobe-Distiller. Il ne reste plus qu'à le convertir en un fichier PDF plat et propre en lui appliquant ghostscript, sous la forme du script pdf2ps13, comme expliqué au paragraphe suivant. Il est à noter que le pdf obtenu est beaucoup plus léger (170,9 ko !) que ceux obtenus par les méthodes précédentes.

Remarque

Cette façon de gérer la commande "Imprimer dans un fichier..." résulte d'un patch rapidement produit pour corriger le Bug 94097 - Make 'Print to File' button always visible in print dialog. Elle semble avoir été ensuite abandonnée puisque dans Xenial Xerus, par exemple, on retrouve la case à cocher dans les options de l'imprimante (capture suivante). C'est quand même plus facile.
Imprimer dans un fichier sous xenial xerus

Génération du fichier pdf

Une page de lulu.com recommande d'utiliser la version 1.3 de PDF car elle ne gère pas les transparences et garantit le fichier plat voulu.

Par suite, ouvrir le terminal, aller dans le dossier où se trouve le fichier et lancer sa transformation en pdf par la commande ad hoc, en précisant le format de page souhaité, par exemple:

ps2pdf13 -sPAPERSIZE=a5 mon_fichier.ps

L'utilitaire ps2pdf connait un certain nombre de formats de papier (les mêmes que ghostscript, voir le manuel de ghostscript) mais si celui souhaité n'est pas normalisé, il est possible de forcer directement la taille du papier (en 1/72"). Par exemple, certains livres de lulu.com exigent un format un peu plus petit que le US letter: 8,25" x 10,75" soit 594 points x 774 points. La commande devient alors:

ps2pdf13 -dDEVICEWIDTHPOINTS=594 -dDEVICEHEIGHTPOINTS=774 -dFIXEDMEDIA mon_fichier.ps

Par ailleurs, par défaut, ps2pdf décide de l'orientation portrait/paysage de chaque page d'après son contenu. Il est possible d'empêcher les rotations en complétant la commande comme suit :

ps2pdf13 -dDEVICEWIDTHPOINTS=594 -dDEVICEHEIGHTPOINTS=774 -dFIXEDMEDIA -dAutoRotatePages=/None mon_fichier.ps

Après un petit moment dont la longueur dépend évidemment de la taille du fichier, cela produit mon_fichier.pdf. Voilà, c'est fini.

Les utilisateurs du logiciel Acrobat Reader ou d'un visionneur analogue pourront vérifier facilement dans les propriétés du fichier que la taille de la page est correcte et que toutes les polices y figurent et une seule fois chacune.


Retour à l'accueil LINUX

Valid HTML 4.01 Transitional