Qu'est-ce que le langage PDFLang ?
PDFLang est un langage de script avec une seule fonction : écrire à quoi ressemble un PDF correct, pour qu’une machine puisse y confronter des fichiers.
Les scripts portent l’extension .pdfl. Ils sont exécutés par pdfl, un outil
en ligne de commande écrit en Rust.
Le problème qu’il résout
Section intitulée « Le problème qu’il résout »Quelqu’un doit décider si un PDF peut partir à l’impression, être déposé, ou être envoyé à un client.
Les règles derrière cette décision sont concrètes. Taux d’encrage sous 300 %. Toutes les polices intégrées. Une boîte de rognage sur chaque page. Le code-barres qui correspond au numéro imprimé à côté. Aucune page pivotée par accident.
Ces règles vivent en général à trois endroits à la fois : dans la tête de la personne qui fait ce travail depuis le plus longtemps, dans une checklist que personne n’ouvre, et dans un script que seul son auteur sait maintenir. Puis cette personne part, la checklist se périme, et le script devient intouchable.
PDFLang existe pour que les règles tiennent dans un seul fichier, lisible par la personne qui les connaît.
À quoi ressemble un script
Section intitulée « À quoi ressemble un script »profile "press-ready" {
check "Encre dans la limite" tags: ["prepress"] { require prepress::validate_tac_limits(300) }
check "Polices intégrées" { doc.fonts.each { |font| assert font.is_embedded, "La police #{font.name} n'est pas intégrée" } }}Quatre mots portent l’essentiel du langage :
profileregroupe les checks et nomme l’ensemble.checkest une règle, et devient une section du rapport.requireinterrompt le check quand une condition préalable n’est pas remplie.assertenregistre un constat, avec le message que vous avez écrit.
Pourquoi il se lit ainsi
Section intitulée « Pourquoi il se lit ainsi »Ni classes, ni héritage, ni déclarations de type, ni points-virgules. C’est une décision et non un oubli : le lecteur visé connaît la prépresse, pas la programmation.
La même intention se voit dans de plus petits détails. Les pages se comptent à
partir de 1, comme tout le monde en dehors d’un compilateur. Les mesures
acceptent directement 3mm et 1in. Les pourcentages s’écrivent 300%.
Ce qu’il sait vérifier
Section intitulée « Ce qu’il sait vérifier »Sept espaces de noms, un par type de travail :
text::— extraction, normalisation, recherche, validations, données personnellesstruct::— objets, métadonnées, XMP, sécurité, empreintesvisual::— résolution, comparaison visuelle, empreinte perceptuelle, qualitéprepress::— taux d’encrage, séparations, tons directs, polices, boîtescodes::— détection, décodage et validation des codes-barres et QRfix::— boîtes, pages, filigranes, fusion et découpe, optimisationdata::— glossaires, jeux de données et tables de correspondance externes
Ce qui revient
Section intitulée « Ce qui revient »Un rapport. En abrégé, un check en échec ressemble à ceci :
{ "script_name": "prepress.pdfl", "input_file": "magazine.pdf", "status": "FAIL", "error_count": 2, "diagnostics": [ { "id": "PDFL-093751a2", "severity": "error", "check_name": "Ink coverage", "message": "page 7: 324% ink (limit 300%)" } ]}Regardez ce message. Ce n’est pas une trace d’exécution. C’est une phrase que
quelqu’un peut transmettre au fournisseur qui a envoyé le fichier — et c’est
pour cela que le langage vous la fait écrire vous-même, à côté de la règle
concernée.
JSON est le format par défaut. CSV, HTML et PDF existent pour les personnes qui doivent lire le rapport plutôt que l’analyser, et SARIF et JUnit pour quand le constat doit atterrir là où l’équipe regarde déjà.
L’exécuter dans une chaîne
Section intitulée « L’exécuter dans une chaîne »pdfl run press-ready.pdfl magazine.pdf > report.jsonLe code de sortie porte le verdict : un script shell ou un job de CI s’y branche sans rien analyser.
| Code | Signification |
|---|---|
0 |
tout est passé |
1 |
avertissements seulement |
2 |
erreurs de validation |
3 |
erreur de syntaxe dans le script |
10 |
le document n’a même pas pu être lu |
L’outil parle anglais, vos scripts n’y sont pas tenus
Section intitulée « L’outil parle anglais, vos scripts n’y sont pas tenus »Les messages que pdfl imprime lui-même — diagnostics, erreurs, aide en ligne
de commande — sont en anglais, comme le veut l’usage des outils en ligne de
commande. Cette documentation est traduite en sept langues, mais un check en
échec rapporte toujours page 7: 324% ink (limit 300%).
Les messages à l’intérieur de vos scripts sont les vôtres. Écrivez-les dans la langue de la personne qui lira le rapport.
Par où commencer
Section intitulée « Par où commencer »Le manuel du langage est le seul chapitre à lire d’un bout à l’autre. Tout le reste sert de référence : un chapitre par espace de noms, les commandes du CLI et les recettes, bâties sur des cas complets — un imprimeur, un éditeur juridique, un laboratoire, une chaîne d’intégration continue.
Si vous préférez lire du code que de la prose, les exemples sont des profils exécutables, commentaires compris.