Folhas Peninérveas - Classificação das folhas | PPTX
Classificação das folhas | PPTX

O que são folhas peninérveas na prática

Quem trabalha com geração de PDFs para impressão já se deparou com o problema: você tem vários documentos de uma página só — cupons, comprovantes, etiquetas — e quer imprimir tudo numa única folha A4 para economizar papel e cortar depois. Isso é uma folha peninérveas. O nome vem da estrutura em que múltiplas páginas menores são dispostas numa grade dentro de uma página maior, como nervuras numa folha. A coisa vira complicada quando o PDF precisa ser aberto digitalmente também, porque cada subpágina fica esmagada num espaço pequeno demais pra ler. Eu trabalho com isso todo dia. No meu caso, geramos recibos fiscais em lote para uma operação de e-commerce, e o volume costumava ser de 200 a 500 recibos por dia. A solução que encontrei foi montar folhas peninérveas 2x4 num A4, ou seja, oito recibos por folha. Na hora da impressão física funciona bem, mas o problema real apareceu quando o cliente pediu pra gente gerar um PDF separado com apenas um recibo por página para consulta no sistema. Duas tarefas, dois formatos, um único arquivo fonte.

Gerando folhas peninérveas com Python

A abordagem mais comum envolve criar um canvas A4 em branco e desenhar cada subpágina nele usando coordenadas fixas. O código abaixo mostra o básico: Exemplo prático:

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

c = canvas.Canvas("folha_peninervada.pdf", pagesize=A4)
width, height = A4

receito_width = width / 2   2 colunas
receito_height = height / 4  4 linhas

for i in range(8):
    col = i % 2
    row = i // 2
    x = col * receito_width + 10
    y = height - (row + 1) * receito_height + 10
    c.rect(x, y, receito_width - 20, receito_height - 20)
    c.drawString(x + 5, y + 5, f"Recibo #{i+1}")

c.save()

Isso gera um PDF com oito recibos dispostos em grade. O truque é acertar as margens e os espaçamentos. Se você deixar pouco espaço entre as linhas, a tesoura não vai obedecer. Recomendo pelo menos 5mm de margem interna e 3mm de espaço entre cada subpágina para facilitar o corte manual.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Divisão de volta para páginas individuais

A parte mais chatinha é o caminho inverso: transformar essa folha peninérveas de volta em páginas separadas. A biblioteca PyPDF2 faz isso sem sofrimento: Split para páginas individuais:

from PyPDF2 import PdfReader, PdfWriter
import math

reader = PdfReader("folha_peninervada.pdf")
writer = PdfWriter()

page = reader.pages[0]
width, height = page.mediabox.width, page.mediabox.height

cols = 2
rows = 4
sub_w = width / cols
sub_h = height / rows

for row_idx in range(rows):
    for col_idx in range(cols):
        new_page = writer.add_blank_page(sub_w, sub_h)
        page.mergeTranslatedPage(
            page,
            col_idx * sub_w,
            (rows - row_idx - 1) * sub_h
        )
        writer.pages[-1] = page

with open("recibos_separados.pdf", "wb") as f:
    writer.write(f)

Na prática, eu já vi gente perder horas tentando fazer isso com coordenadas erradas porque não consideravam que o sistema de coordenadas do PDF começa no canto inferior esquerdo, não no superior. Esse detalhe te quebra se não prestar atenção desde o início.

Problema real que encontrei

Uma vez precisei gerar folhas peninérveas com recibos de tamanhos diferentes — alguns eram mais altos que outros porque continham mais linhas de itens. O padrão 2x4 simplesmente não funcionava. Minha solução foi usar uma grade variável, calculando a altura de cada linha baseada no maior recibo daquela linha antes de desenhar anything. O processo que antes levava 2 horas para 300 recibos caiu pra cerca de 15 minutos com essa otimização, porque passei a gerar os layouts em lote ao invés de um por um. O custo disso é que o código fica mais complexo e mais difícil de manter. Se o seu fluxo for sempre com recibos do mesmo tamanho, não vale o esforço. Mas quando a variação entra no jogo, a grade dinâmica é a única saída que não gasta papel à toa.

Dicas que ninguém conta

Primeiro: sempre teste com uma folha real antes de subir pra produção. PDFs podem ter bordas e margens que não aparecem no visualizador mas somem na impressão. Segundo: use unidades em milímetros internamente e converta só na hora de renderizar. Terceiro: se for distribuir o PDF digitalmente, considere gerar também uma versão com apenas uma subpágina por página — senão seu cliente vai reclamar que não consegue ler nada na tela. Se você está começando agora com folhas peninérveas, comece simples. Um A4 com 4 recibos 2x2. Entenda o sistema de coordenadas, domine o merge de páginas, e só depois aumente a complexidade. A curva de aprendizado é curta se você não tentar resolver tudo de uma vez.