v0.6.0 · langage .pdfl + CLI pdfl
PDFLang remplace la liste que quelqu'un parcourt à l'écran par un script versionné. Taux d'encrage, polices incorporées, clauses obligatoires, codes-barres, données personnelles : déclarés une fois, vérifiés sur chaque fichier, dans le terminal ou dans la CI.
profile "offset-magazine" { const TAC_LIMIT = 300% const MIN_DPI = 300 check "Ink coverage" tags: ["prepress"] { doc.pages.each { |page| tac = prepress::calculate_exact_tac(page.number) assert tac <= TAC_LIMIT, "page #{page.number}: #{tac}% ink" } } check "Fonts" tags: ["fonts"] { loose = prepress::detect_text_substitution() assert loose.length == 0, "fonts not embedded: #{loose.join(", ")}" } }
Chaque espace de noms couvre une classe de problème. Vous n'utilisez que ce dont vous avez besoin : un script qui ne touche jamais à codes:: ne paie pas le coût du balayage des pages.
Taux d'encrage exact, séparations, tons directs, noir riche, filets maigres, substitution de police, corps minimal, boîtes et fonds perdus. Ce que la plaque vous aurait montré, avant la plaque.
Extraction, normalisation, recherche par expression régulière et validation du contenu réellement présent dans le fichier, détection de données personnelles comprise.
Le fichier lui-même : métadonnées, XMP, objets internes, chiffrement et permissions, empreintes. Répond à la question : ce PDF est-il bien ce qu'il prétend être ?
Boîtes, rotation et ordre des pages, filigranes, fusion et découpe, optimisation. Écrit un nouveau PDF ; l'original n'est jamais modifié.
Résolution effective, qualité, empreinte perceptuelle et comparaison SSIM entre deux versions. Repère le logo basse définition que l'œil valide à 100 %.
Détecte et décode EAN, UPC, Code 128/39, ITF, QR Code, Data Matrix, Aztec et PDF417 — puis compare la charge utile lue à ce qui devrait s'y trouver.
Recoupe le contenu du document avec vos propres glossaires, jeux de données et tables de correspondance : numéros de lot, références, terminologie validée.
Toute commande de validation suit la même convention : 0 tout est passé, 1 avertissements seulement, 2 erreurs de validation, 3 erreur de syntaxe dans le script. Le rapport sort en JSON, CSV, HTML ou PDF d'audit — l'un pour le pipeline, l'autre pour le client.
# .github/workflows/preflight.yml - run: pdfl run profiles/offset.pdfl artwork.pdf \ --output html --output-file report.html \ --fail-on warning # 0 ok · 1 warnings · 2 validation errors · 3 syntax error $ pdfl run profiles/offset.pdfl artwork.pdf $ echo $? 2
Le fichier arrive du client et quelqu'un doit vérifier encrage, polices, images et fonds perdus avant le passage sur plaque. Une erreur découverte après coûte le tirage entier.
Un profil par type de papier. pdfl watch valide ce qui arrive dans le dossier surveillé et renvoie un rapport HTML transmissible tel quel.
Contrats et politiques doivent contenir des clauses obligatoires, ne pas laisser fuir de données personnelles et conserver des métadonnées cohérentes à chaque révision.
Les clauses deviennent des assertions avec vos propres messages d'échec. pdfl compare montre ce qui a changé entre deux révisions du même document.
La notice doit porter les mentions exigées par l'autorité et un code de lot correspondant au lot réellement produit.
text:: vérifie les mentions obligatoires, codes:: décode le Data Matrix imprimé et le compare au jeu de données de production.
La licence est liée au poste : pdfl fingerprint identifie la machine, pdfl license l'active. Le même binaire sur le poste de l'opérateur et sur l'agent de build.