Editorial Craft Bible
Gotchas y troubleshooting
Inicio Herramientas y anti-patterns Gotchas y troubleshooting
Herramientas y anti-patterns

Gotchas y troubleshooting

12 reglas W3C CSS Paged Media L3 · Chromium print-to-PDF behaviorMDN print-color-adjust · W3C CSS Color Adjustment L1W3C CSS Fragmentation L3 · Paged.js docsMDN break-inside · W3C CSS Fragmentation L3
30

Gotchas y troubleshooting

12 reglas
321

Marcos blancos alrededor de un fondo oscuro

SINTOMA: el body de la pagina es oscuro pero un marco de papel blanco lo rodea en el PDF. CAUSA: @page conserva un margen de impresion por default (Chrome usa ~0.4in), asi que tu fondo solo llena el area de contenido y el margen de papel queda blanco. FIX: pon @page { margin: 0 } y mueve la zona segura del texto a padding de un contenedor interno para que el color llene toda la hoja.

@page { margin: 0 } /* mata el margen de papel */
.doc { padding: 15mm 16mm } /* la zona segura del texto va aqui */
Margen @page por default
El fondo para en la caja de contenido; queda un marco blanco de papel
@page margin: 0
El fondo llega a todos los bordes; el padding sostiene el texto adentro
W3C CSS Paged Media L3 · Chromium print-to-PDF behavior
322

Fondos y colores desaparecen al imprimir

SINTOMA: fondos de color, badges y cebra de tablas se ven bien en pantalla pero imprimen en blanco liso. CAUSA: para ahorrar tinta, el motor descarta colores de fondo e imagenes salvo que lo desactives. FIX: agrega print-color-adjust: exact (con el prefijo -webkit- para Chrome) en los elementos que llevan fondo, casi siempre html o body.

html {
  -webkit-print-color-adjust: exact;
  print-color-adjust: exact;
}
Default (economia)
Los rellenos se descartan; solo sobreviven bordes y texto
print-color-adjust: exact
Cada color de fondo imprime exactamente como se diseno
MDN print-color-adjust · W3C CSS Color Adjustment L1
323

Huecos enormes de blanco entre secciones

SINTOMA: las paginas terminan medio vacias y la siguiente seccion arranca en pagina nueva, desperdiciando un tercio del papel. CAUSA: cada seccion va envuelta en un div de pagina de alto fijo o lleva break-before: page, forzando un salto aunque la pagina anterior aun tenga espacio. FIX: deja fluir el contenido, quita los wrappers de pagina por seccion, y solo protege unidades chicas con break-inside: avoid.

/* mal: fuerza una pagina por bloque */
section { break-before: page; height: 100vh }

/* bien: fluir, proteger solo unidades chicas */
.card, figure, li { break-inside: avoid }
Una pagina por seccion
Cada bloque corto se come una hoja; el resto queda en blanco
El contenido fluye
Las secciones se apilan y llenan la hoja antes de saltar
W3C CSS Fragmentation L3 · Paged.js docs
324

Un bloque cortado a la mitad entre dos paginas

SINTOMA: una tarjeta, figura, bloque de codigo o fila de tabla queda partida por el salto de pagina, mitad al pie de una hoja y mitad al inicio de la siguiente. CAUSA: el motor de fragmentacion corta donde se le acaba el espacio salvo que le digas lo contrario. FIX: aplica break-inside: avoid al bloque. Nota: si el bloque es mas alto que una pagina el motor no tiene opcion y lo partira igual.

.card, figure, pre, tr, .callout {
  break-inside: avoid;
}
Tarjeta partida en el salto
La linea punteada es el salto de pagina rebanando la tarjeta
break-inside: avoid
La tarjeta entera se mueve intacta a la siguiente pagina
MDN break-inside · W3C CSS Fragmentation L3
325

Las fuentes cambian o caen a Times

SINTOMA: el PDF exportado muestra una serif generica (a menudo Times) en vez de tu tipografia, y el layout se reacomoda. CAUSA: la fuente no se embebio, o en un flujo HTML a PDF la web font no habia terminado de cargar cuando disparo la impresion. FIX: espera a document.fonts.ready (o sube el --virtual-time-budget del headless) antes de imprimir, y confirma el embebido en preflight.

await document.fonts.ready; // fuentes listas antes de imprimir

chrome --headless --print-to-pdf \
  --virtual-time-budget=5000 in.html
Cae a Times
Capítulo Uno
La fuente sin embeber se sustituye; espaciado y layout se mueven
Embebida, cargada
Capítulo Uno
La tipografia deseada renderiza y el layout se mantiene
Chromium headless docs · ISO 15930 (PDF/X embedding)
326

La imagen se ve pixelada en impresion

SINTOMA: una imagen que se veia nitida en pantalla imprime borrosa o dentada. CAUSA: su resolucion efectiva esta debajo de 300 PPI, ya sea porque el origen era de baja resolucion (un screenshot a 72 PPI) o porque se escalo hacia arriba en el layout. PPI efectivo = PPI original / factor de escala, asi que ampliar una imagen chica reduce a la mitad su resolucion real. FIX: entrega una imagen con al menos pulgadas finales × 300 pixeles; nunca escales una chica.

pixeles necesarios = pulgadas finales × 300
4 in de ancho → 1200 px minimo
PPI efectivo = PPI original / escala
Escalada 72 PPI
Debajo de 300 PPI efectivo; bordes suaves y cuadriculados en prensa
300 PPI a tamano final
Nitida: suficientes pixeles para las dimensiones impresas
Adobe print resolution guide · Ghent Workgroup image specs
327

Filos blancos en el borde tras cortar

SINTOMA: tras cortar el tiraje, aparece una linea blanca fina en uno o mas bordes de un diseno a borde. CAUSA: sin sangrado, el arte paro justo en el trim y el vaiven de ±1mm de la guillotina expuso papel desnudo. FIX: extiende todo elemento que toca un borde 3mm mas alla del trim, y declara bleed: 3mm en @page para flujos HTML.

@page {
  size: 216mm 279mm; /* trim */
  marks: crop;
  bleed: 3mm; /* el arte rebasa hasta aqui */
}
Sin sangrado
El arte para en el trim; un marco blanco sobrevive al corte
Sangrado 3mm
El arte entra al bleed rojo; el corte siempre cae sobre color
Ghent Workgroup · W3C CSS Paged Media L3 (bleed)
328

Colores apagados en prensa vs pantalla

SINTOMA: colores vivos en pantalla (azules brillantes, verdes neon, naranja saturado) imprimen apagados y mas grises. CAUSA: RGB tiene un gamut mas amplio que CMYK; convertir a color de prensa recorta lo que CMYK no reproduce, y nunca previsualizaste el shift. FIX: haz soft-proof en el perfil CMYK destino (activa el aviso de gamut) y convierte antes de entregar para aprobar el resultado real, no la fantasia de pantalla.

Soft-proof: simula perfil FOGRA39 / GRACoL
Aviso de gamut: marca RGB fuera de gamut
Convierte a CMYK antes de entregar, revisa shift
RGB, sin proof
El RGB de pantalla que apruebas, esperando esto en prensa
Soft-proof CMYK
La realidad CMYK apagada que deberias aprobar en su lugar
Adobe color management · ISO 12647 (FOGRA/GRACoL)
329

Un titulo huerfano solo al pie de pagina

SINTOMA: un titulo imprime hasta el fondo de una pagina mientras el parrafo que introduce arranca en la siguiente. CAUSA: nada mantiene el titulo pegado a su contenido. FIX: agrega break-after: avoid a h2, h3, h4 para que el motor empuje el titulo adelante y quede con su texto. Complementa con orphans/widows para control por linea.

h2, h3, h4 { break-after: avoid }
p { orphans: 3; widows: 3 }
Titulo al pie
El titulo queda solo abajo, su texto en la vuelta
break-after: avoid
El titulo se adelanta y se queda con su parrafo
MDN break-after · W3C CSS Fragmentation L3
330

Columnas y paginas que no se alinean

SINTOMA: las lineas base de texto en columnas contiguas, o entre paginas enfrentadas, quedan a alturas ligeramente distintas y el pliego se ve tembloroso. CAUSA: el interlineado es inconsistente, imagenes y titulos empujan el flujo fuera de un ritmo comun, asi que no hay baseline grid compartido. FIX: fija el line-height del cuerpo a un valor constante y haz que cada espacio vertical sea multiplo de el para que todo el texto caiga en una rejilla.

body { line-height: 24px } /* la unidad de rejilla */
h2 { margin: 24px 0 12px } /* solo multiplos */
figure { margin-bottom: 24px }
Sin baseline grid
Las lineas se desfasan entre las dos columnas
Baseline grid compartido
Ambas columnas caen en el mismo ritmo, linea por linea
thebookdesigner.com · Butterick's Practical Typography
331

Chrome ignora el size de @page

SINTOMA: pones @page { size: A4 } pero el print-to-PDF de Chrome exporta Carta (o el papel seleccionado). CAUSA: el Chrome interactivo amarra la hoja al dropdown de papel del dialogo y no honra del todo size (issue 238303 de Chromium). FIX: en headless pasa el tamano explicito (--print-to-pdf si lee el @page size); interactivo, elige el papel a mano; o renderiza con Paged.js / WeasyPrint / Prince, que respetan size.

/* Chrome headless si honra size en @page: */
@page { size: 210mm 297mm } /* A4 */

# interactivo: elige el papel en el dialogo
# o usa Paged.js / WeasyPrint / Prince
El dialogo pisa el size
@page A4
PDF: Carta
Pediste A4; la Carta del dialogo gana la salida
Headless / Paged.js
@page A4
PDF: A4
El motor honra size; el PDF es realmente A4
Chromium issue 238303 · W3C CSS Paged Media L3 (size)
332

Los folios del indice no coinciden con las paginas

SINTOMA: el indice dice que un capitulo esta en la pagina 12 pero en realidad cae en la 14. CAUSA: el TOC se armo (o se genero por ultima vez) antes de que el contenido repaginara; ediciones, cambios de imagen o carga de fuentes corrieron cada pagina posterior. FIX: regenera el TOC despues de la paginacion final. En CSS Paged Media, target-counter() saca la pagina real de cada enlace para que los numeros nunca se desfasen.

/* numero de pagina automatico, siempre sincronizado */
.toc a::after {
  content: target-counter(attr(href), page);
}
A mano, desfasado
Introduccion4
Capitulo 11214
Capitulo 22023
La repaginacion movio todo; los numeros escritos ahora mienten
target-counter()
Introduccion4
Capitulo 114
Capitulo 223
Los numeros se calculan de la pagina real, siempre correctos
W3C CSS Generated Content for Paged Media (target-counter) · Prince docs