v0.6.0 · linguagem .pdfl + CLI pdfl
O PDFLang troca o checklist que alguém lê na tela por um script versionado. Cobertura de tinta, fontes embarcadas, cláusulas obrigatórias, códigos de barras, dados pessoais — declarados uma vez, conferidos em todo arquivo, no terminal ou na 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 namespace cobre uma classe de problema. Você usa o que precisa: um script que nunca toca em codes:: não paga o custo da varredura das páginas.
TAC exato de cobertura de tinta, separações, cores especiais, preto rico, fios de cabelo, substituição de fonte, corpo mínimo, boxes e sangria. O que a chapa mostraria — antes da chapa.
Extração, normalização, busca por regex e validação do conteúdo que está de fato no arquivo — inclusive documentos brasileiros e detecção de dados pessoais.
O arquivo em si: metadados, XMP, objetos internos, criptografia e permissões, hashing. Responde se o PDF é o que diz ser.
Boxes, rotação e ordem de páginas, marca d'água, junção e divisão, otimização. Grava um PDF novo; o original nunca é tocado.
Resolução efetiva, qualidade, hash perceptual e comparação por SSIM entre duas versões. Pega o logo em baixa que o olho aprova a 100%.
Detecta e decodifica EAN, UPC, Code 128/39, ITF, QR Code, Data Matrix, Aztec e PDF417 — e confere o conteúdo lido contra o que deveria estar ali.
Cruza o conteúdo do documento com seus próprios glossários, datasets e tabelas de consulta. Números de lote, SKUs, terminologia aprovada.
Todo comando de validação segue a mesma convenção: 0 passou, 1 só avisos, 2 erros de validação, 3 erro de sintaxe no script. O relatório sai em JSON, CSV, HTML ou PDF de auditoria — um para o pipeline, outro para o 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
O arquivo chega do cliente e alguém precisa conferir tinta, fontes, imagens e sangria antes de ir para a chapa. Erro descoberto depois custa a tiragem inteira.
Um perfil por tipo de papel. O pdfl watch valida o que cai na pasta e devolve um relatório HTML que você encaminha como está.
Contratos e políticas precisam conter cláusulas obrigatórias, não podem vazar dados pessoais e devem manter os metadados coerentes a cada revisão.
Cláusulas viram asserções com a sua mensagem de falha. O pdfl compare mostra o que mudou entre duas revisões do mesmo documento.
A bula precisa trazer os textos exigidos pelo órgão regulador e um código de lote que corresponda ao lote realmente em produção.
O text:: confere a redação obrigatória e o codes:: decodifica o Data Matrix impresso e compara com o dataset da produção.
A licença é por dispositivo: o pdfl fingerprint identifica a máquina e o pdfl license ativa. O mesmo binário na estação do operador e no agente de build.