Produção de Livros

O checklist de 8 grupos que reprova o arquivo antes de a gráfica ver

Um arquivo que a gráfica aceita pode imprimir errado. Oito grupos de conferência, cada um com comando, limite e defeito que ele pega, e o teste de mutação que prova que o checklist reprova.

JonathanJonathan
7 min de leitura1.365 palavras
Capa do artigo: O checklist de 8 grupos que reprova o arquivo antes de a gráfica ver (eBuz, Produção de Livros)

Mandar o miolo para a gráfica e esperar que ela encontre o problema é o jeito mais caro de fazer preflight. A gráfica pode aceitar o arquivo e imprimir errado, porque o que ela confere é o que o programa dela consegue ver.

Na nossa casa, a regra é outra: o arquivo só sai quando a gente mede. Este é o checklist que usamos, em oito grupos. Cada grupo diz o que confere, o comando que mede e o limite que reprova.

A frase que organiza o checklist vem do nosso procedimento de pré-impressão: medir, nunca deduzir. Sem medição, "está pronto" não vale. E "não medi" não é o mesmo que "não achei".

Os oito grupos

1. Geometria

O que confere: cada página tem o tamanho do corte mais a sangria nos quatro lados; o TrimBox está no corte; o BleedBox está na borda do papel.

pdfinfo -box miolo.pdf

Em um 6 x 9 com sangria de 3 mm, o esperado é MediaBox 0 0 449,01 665,01, BleedBox igual ao papel e TrimBox 8,50 8,50 440,51 656,51. A explicação de cada número está em sangria, corte e zona de segurança.

2. Caderno e ficha

O que confere: o total de páginas é múltiplo de 4, e a ficha catalográfica declara o número real de páginas.

pdfinfo miolo.pdf | awk '/^Pages/{print $2 % 4}'

A saída precisa ser 0. Para a ficha, leia a página dela com pdftotext -f 2 -l 2 miolo.pdf - e compare o "N p." com o total. Campo que não existe (ISBN, editora, CDD) entra como "a definir", nunca inventado.

3. Páginas

O que confere: capítulo em página ímpar, nenhuma página sem texto, e as regras do seu modelo (por exemplo, Parte em página par).

total=$(pdfinfo miolo.pdf | awk '/^Pages/{print $2}')
for p in $(seq 1 "$total"); do
  n=$(pdftotext -f "$p" -l "$p" miolo.pdf - | wc -w)
  [ "$n" -eq 0 ] && echo "página $p sem texto"
done

O poppler imprime no word list em página sem texto. É normal. A medição da paridade dos capítulos está no artigo capítulo em página ímpar sem página em branco.

4. Cor e PDF/X

O que confere: nenhum RGB, perfil declarado (OutputIntent), fontes embutidas, texto de corpo em K puro, nenhum preto de quatro cores, sem link nem anotação.

pdffonts miolo.pdf                       # coluna "emb": yes em todas
gs -q -o - -sDEVICE=inkcov miolo.pdf     # C, M e Y devem ser 0 em página de texto

O restante (OutputIntent, chaves de identificação e anotações) usa a biblioteca pikepdf, como no artigo sobre CMYK, K puro e PDF/X-1a com Ghostscript.

5. Tinta total (TAC)

O que confere: a soma das quatro tintas no ponto mais carregado do miolo.

gs -dBATCH -dNOPAUSE -dSAFER -q -sDEVICE=tiff32nc -r40 \
   -sOutputFile=p%04d.tif miolo.pdf

Depois, leia cada TIFF com Pillow e numpy, some os canais e divida por 255 vezes 100. O teto do nosso miolo é 300%, provisório, porque o papel ainda não foi definido. A regra de bolso: papel sem revestimento segura 240 a 260% e couché, 300 a 330%. Acima disso a tinta não seca, repinta na folha seguinte e borra no vinco. O limite real é da gráfica.

6. Sangria de verdade

O que confere: onde há arte que deve sangrar, a cor chega à borda do papel; onde não há, a borda é branca. O comando de leitura do canto está no artigo de sangria.

7. Zona de segurança

O que confere: nenhum texto a menos de 5 mm do corte.

import re, subprocess, sys
pdf, sangria_mm, minimo_mm = sys.argv[1], 3, 5
PT = 72 / 25.4
x = subprocess.run(["pdftotext", "-bbox", pdf, "-"],
                   stdout=subprocess.PIPE, text=True).stdout
S = sangria_mm * PT
pior = (1e9, None)
for n, pg in enumerate(re.split(r"<page ", x)[1:], 1):
    w, h = [float(v) for v in re.match(
        r'width="([\d.]+)" height="([\d.]+)"', pg).groups()]
    for m in re.finditer(r'<word xMin="([\d.]+)" yMin="([\d.]+)" '
                         r'xMax="([\d.]+)" yMax="([\d.]+)">', pg):
        x0, y0, x1, y1 = [float(v) for v in m.groups()]
        d = min(x0 - S, (w - S) - x1, y0 - S, (h - S) - y1) / PT
        if d < pior[0]: pior = (d, n)
print(f"texto mais próximo do corte: {pior[0]:.1f} mm "
      f"(página {pior[1]}), mínimo {minimo_mm} mm")
sys.exit(1 if pior[0] < minimo_mm else 0)

Lembrete: a caixa que o pdftotext -bbox devolve é a da fonte, e não a da tinta. Ela é conservadora. Se ela passa, a tinta passa. Se reprova, olhe a página antes de mudar o desenho.

8. Texto

O que confere: o texto do autor chegou inteiro ao PDF final e nada foi acrescentado. O script e a lógica estão em conferir o PDF final do livro.

Um checklist que nunca reprovou nada não vale

Esta é a parte que a maioria dos checklists não tem. Um gate que nunca foi visto reprovando pode estar quebrado sem ninguém saber. A prova é o teste de mutação: estragar o arquivo de propósito, de seis jeitos, e conferir que o gate reprova, e no grupo certo.

Montamos esse teste para este cluster, com um miolo de 16 páginas em 6 x 9 e um script que roda os grupos 1, 2, 4, 5 e 7. O arquivo bom foi aprovado. Os seis estragados foram reprovados, cada um no grupo esperado:

Defeito introduzidoGrupo que reprovou
Sem TrimBox em todas as páginasGeometria
PDF cru do compilador, em RGB, sem fechamentoGeometria, PDF/X e cor
Uma página a menos (15 páginas)Caderno
Texto em preto de quatro coresCor e tinta (400% contra o teto de 300%)
Um link clicávelLink e anotação
Texto fora da zona de segurançaZona de segurança

No nosso gate de produção, o teste de mutação tem seis arquivos também, e os seis foram reprovados, incluindo um capítulo em página par e um painel com 400% de tinta. Regra: se você escrever um gate novo, estrague um arquivo para ele antes de confiar nele.

Registre o que foi medido

O resultado do checklist não deve ficar na cabeça de quem rodou. O pacote que entregamos à gráfica leva o miolo, a capa e um arquivo de especificação com as medidas lidas do próprio PDF e com o SHA-256 de cada arquivo:

sha256sum miolo.pdf
pdfinfo -box miolo.pdf

Guardar o SHA-256 resolve uma dúvida clássica: "o arquivo que a gráfica imprimiu é o mesmo que nós aprovamos?". Se o código bate, é. Se alguém trocar o arquivo depois da conferência, o código muda. E o campo que a gráfica ainda não respondeu, como o papel ou o perfil de cor, entra como "a definir", e nunca como um valor deduzido.

O erro que custa caro

Confiar que a conferência da gráfica substitui a sua. Ela é uma segunda leitura, com o programa dela, e não a primeira. E o outro erro, que é o oposto: montar um checklist que aprova tudo, porque ninguém o testou contra um arquivo defeituoso.

Quando NÃO usar

Para um arquivo apenas digital, os grupos 1, 4, 5, 6 e 7 não se aplicam. Eles são do miolo de impressão. Os grupos 2, 3 e 8 valem para qualquer PDF paginado.

Alternativa sem o nosso ambiente

Todos os comandos usam poppler, Ghostscript, pikepdf, numpy e Pillow, que são gratuitos. O preflight do Acrobat e o pdfToolbox fazem uma conferência comercial parecida. Nenhum deles substitui medir os números do seu livro. Não há nada que exija a nossa conta ou o nosso servidor.

O que o Claude faz hoje, e como fazer sem ele

Hoje o Claude roda o gate completo e o teste de mutação a cada versão do miolo e relata o que reprovou. Sem ele, você roda os comandos do checklist na ordem e registra o resultado de cada grupo.

Onde entra na operação

O checklist é o último filtro antes de o miolo entrar no pacote da gráfica, que reúne miolo, capa e uma especificação com as medidas lidas do próprio PDF. O desenho completo da esteira está no guia Como produzimos o miolo de um livro profissional sem InDesign.

Baixe, para guardar: checklist de preflight do miolo, com comando e limite por item (PDF).

Versões usadas neste artigo: veja a matriz de versões.

Perguntas frequentes

O que é preflight de um livro?

É a conferência técnica do arquivo antes da impressão: tamanho de página, sangria, cor, fontes, tinta e texto. O objetivo é achar o defeito antes que ele vire papel impresso errado.

Quanto de tinta total posso ter em uma página de miolo?

Depende do papel e da gráfica. Papel sem revestimento costuma segurar 240 a 260%, e couché, 300 a 330%. Nós usamos 300% como teto provisório, até a gráfica definir o papel. O limite real é o da gráfica.

O que é teste de mutação em um checklist de arquivo?

É estragar o arquivo de propósito, de formas conhecidas, e conferir que o checklist reprova. Prova que o checklist funciona. Um gate que nunca foi visto reprovando pode estar quebrado sem ninguém saber.

Se a gráfica fizer preflight, ainda preciso conferir o arquivo?

Sim. A conferência da gráfica é uma segunda leitura, feita com o programa dela. Conferir antes evita ciclos de devolução e deixa registrado o que foi medido, com os números lidos do próprio PDF.