v0.6.0 · lenguaje .pdfl + CLI pdfl
PDFLang cambia la lista que alguien repasa en pantalla por un script versionado. Cobertura de tinta, fuentes incrustadas, cláusulas obligatorias, códigos de barras, datos personales: se declaran una vez y se comprueban en cada archivo, en la terminal o en 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(", ")}" } }
Cada espacio de nombres cubre una clase de problema. Usas lo que necesitas: un script que nunca toca codes:: no paga el coste del barrido de las páginas.
TAC exacto de cobertura de tinta, separaciones, tintas planas, negro rico, filetes finos, sustitución de fuentes, cuerpo mínimo, cajas y sangrado. Lo que la plancha te habría mostrado, antes de la plancha.
Extracción, normalización, búsqueda por expresiones regulares y validación del contenido que de verdad está en el archivo, incluida la detección de datos personales.
El archivo en sí: metadatos, XMP, objetos internos, cifrado y permisos, huellas. Responde si el PDF es lo que dice ser.
Cajas, rotación y orden de páginas, marcas de agua, unión y división, optimización. Escribe un PDF nuevo; el original no se toca nunca.
Resolución efectiva, calidad, hash perceptual y comparación por SSIM entre dos versiones. Detecta el logotipo de baja resolución que el ojo aprueba al 100%.
Detecta y decodifica EAN, UPC, Code 128/39, ITF, código QR, Data Matrix, Aztec y PDF417, y coteja lo leído con lo que debería estar ahí.
Cruza el contenido del documento con tus propios glosarios, conjuntos de datos y tablas de consulta: números de lote, referencias, terminología aprobada.
Todo comando de validación sigue la misma convención: 0 todo pasó, 1 solo advertencias, 2 errores de validación, 3 error de sintaxis en el script. El informe sale en JSON, CSV, HTML o PDF de auditoría: uno para el pipeline y otro para el cliente.
# .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
El archivo llega del cliente y alguien tiene que revisar tinta, fuentes, imágenes y sangrado antes de pasar a plancha. Un error descubierto después cuesta la tirada entera.
Un perfil por tipo de papel. pdfl watch valida lo que cae en la carpeta vigilada y devuelve un informe HTML que puedes reenviar tal cual.
Los contratos y las políticas deben incluir cláusulas obligatorias, no pueden filtrar datos personales y tienen que mantener los metadatos coherentes en cada revisión.
Las cláusulas se convierten en aserciones con tus propios mensajes de error. pdfl compare muestra qué cambió entre dos revisiones del mismo documento.
El prospecto debe llevar los textos que exige el organismo regulador y un código de lote que corresponda al lote realmente en producción.
text:: comprueba la redacción obligatoria y codes:: decodifica el Data Matrix impreso y lo compara con el conjunto de datos de producción.
La licencia es por dispositivo: pdfl fingerprint identifica la máquina y pdfl license la activa. El mismo binario en el puesto del operador y en el agente de compilación.