Por qué unos PDF se comprimen un 90 % y otros casi nada
Dónde van realmente los bytes de un PDF (imágenes, fuentes y flujos de contenido), cómo funcionan los filtros Flate, DCT, JBIG2 y JPX, qué aportan los flujos de objetos y el MRC, y recetas prácticas para cada tipo de archivo.
Metes dos PDF en el mismo compresor: uno pasa de 40 MB a 3 MB y el otro de 2 MB a 1,9 MB. Parece que la herramienta es irregular, pero casi siempre la diferencia está en los archivos. Un PDF no es un formato de compresión, sino un contenedor con varios tipos de datos, cada uno comprimido a su manera, y un compresor solo puede actuar sobre lo que todavía tiene margen.
Dónde van los bytes
Un PDF es una colección de objetos numerados: páginas, fuentes, imágenes, marcadores. Todo lo grande se guarda como flujo (stream), y tres tipos de flujo concentran casi todo el peso.
| Componente | Qué contiene | Tamaño típico |
|---|---|---|
| Imágenes | Fotos, páginas escaneadas, capturas | De cientos de KB a varios MB por foto |
| Fuentes | Contornos de los glifos usados | Decenas de KB para un subconjunto latino; varios MB para una fuente china, japonesa o coreana completa |
| Flujos de contenido | Órdenes que colocan el texto y dibujan líneas y formas | Unos KB por página; megas en planos y mapas detallados |
Un informe de 30 páginas escrito en Word es casi todo texto, así que sus flujos de contenido son pequeños y mandan las fuentes. Un contrato escaneado es una imagen por página, y las imágenes superan el 95 %. Un plano exportado desde CAD puede no tener ninguna imagen y aun así cargar decenas de megas de contenido, porque cada uno de sus cientos de miles de segmentos es una orden. Antes de hacer nada, este reparto ya decide si un compresor servirá.
Los filtros de cada flujo
La norma PDF, ISO 32000, obliga a que cada flujo declare su codificación en la entrada /Filter, y el visor elige el decodificador por ese nombre. Los que encontrarás:
- FlateDecode es zlib/deflate (RFC 1950/1951), el mismo algoritmo sin pérdida de PNG. Lo usan la mayoría de flujos de contenido, fuentes e imágenes sin pérdida. En imágenes puede combinarse con un predictor al estilo PNG, que guarda cada fila como diferencias con los píxeles vecinos y mejora mucho la compresión.
- DCTDecode es JPEG. Los bytes dentro del PDF son literalmente un archivo JPEG.
- JPXDecode es JPEG 2000, añadido en PDF 1.5. Puede superar a JPEG con la misma calidad, pero menos herramientas lo procesan.
- CCITTFaxDecode es la compresión de fax para imágenes de 1 bit (UIT-T T.4 y T.6, Grupo 3 y Grupo 4). Lleva décadas siendo el estándar de los escaneos en blanco y negro.
- JBIG2Decode, añadido en PDF 1.4, también es para 1 bit. Puede guardar cada forma de glifo una sola vez en un diccionario de símbolos y registrar solo las posiciones, lo que deja las páginas de texto escaneadas diminutas.
- LZWDecode, RunLengthDecode, ASCIIHexDecode, ASCII85Decode son esquemas antiguos o codificaciones seguras para texto. Los ASCII de hecho agrandan los datos.
De todo esto, una consecuencia importa más que el resto: los datos que ya son JPEG o JBIG2 no se reducen apenas si los envuelves en Flate. Los datos comprimidos son estadísticamente casi aleatorios y un compresor sin pérdida no encuentra repeticiones. Es la misma razón por la que comprimir un PDF en ZIP casi no cambia su tamaño.
Cuándo un PDF baja mucho
Las grandes reducciones salen casi siempre de una de estas tres situaciones.
Imágenes guardadas con mucha más resolución de la que se muestra. Los móviles hacen fotos de 12 megapíxeles (4000×3000) sin pensarlo. Si una ocupa una página A4 entera, queda a unos 340 PPP. Para leer en pantalla o imprimir en la oficina bastan 150 PPP. Reducir a 150 PPP escala cada lado por 0,44 y conserva cerca del 19 % de los píxeles; como el tamaño de un JPEG sigue aproximadamente al número de píxeles, la imagen se queda en torno a una quinta parte. Si la foto ocupaba media página, los PPP de colocación se duplican y el ahorro es aún mayor.
Imágenes sin comprimir. Programas antiguos y algunos controladores de escáner guardan las imágenes en bruto, o con Flate pero sin predictor. Una página A4 completa en color de 24 bits a 300 PPP son 2481 × 3508 × 3 bytes, unos 26 MB. Pasarla a JPEG la reduce en un orden de magnitud o más.
Equipaje de edición. Un PDF guardado desde Illustrator conservando la capacidad de edición lleva dentro la ilustración original completa. Los archivos montados a partir de muchos PDF pueden contener las mismas fuentes y el mismo logotipo una vez por documento de origen. Ambas cosas se pueden quitar sin tocar la calidad de imagen.
Cuándo un PDF apenas baja
Los archivos que resisten a todos los compresores suelen tener un motivo igual de claro.
Fotos ya en JPEG a una resolución razonable. Una foto guardada cerca de 150 PPP a calidad 75 solo pierde unos pocos por ciento al recodificarla, y cada vuelta de JPEG añade bordes de bloque y manchas de color. Un buen compresor deja esas imágenes en paz cuando el ahorro es pequeño.
Fuentes asiáticas incrustadas completas. Una fuente latina necesita unos cientos de glifos, con acentos y ñ incluidos. Una fuente coreana con las 11 172 sílabas hangul precompuestas más caracteres chinos pesa varios megas, y las japonesas y chinas son parecidas. Incrustar solo los caracteres usados (un subconjunto) lo deja en unos cientos de KB o menos. Crear el subconjunto implica reconstruir la fuente, así que conviene hacerlo en la aplicación que genera el PDF; Word, InDesign y la mayoría de suites ofimáticas lo tienen en las opciones de exportación.
Dibujos vectoriales. Cada línea es una orden de mover y trazar, así que la complejidad se convierte directamente en bytes de contenido. Si esos flujos ya están en Flate, subir el nivel gana como mucho unos pocos por ciento. La solución real es exportar desde CAD sin capas innecesarias.
Escaneos en blanco y negro. Si el escáner ya guardó las páginas en JBIG2 o CCITT Grupo 4, son pequeñas de por sí y queda poco que rascar.
Flujos de objetos: comprimir la propia estructura
Hasta PDF 1.4, los objetos de tipo diccionario, como las descripciones de página o de fuente, se guardaban como texto sin comprimir, y la tabla de referencias cruzadas del final tenía una línea fija de 20 bytes por objeto. En un documento con decenas de miles de objetos, eso suma.
PDF 1.5 introdujo dos soluciones. Los flujos de objetos empaquetan muchos objetos en un solo flujo comprimido con Flate, y los flujos de referencias cruzadas guardan la propia tabla xref como binario comprimido. Los flujos (imágenes, datos de fuentes, etc.) no pueden ir dentro de un flujo de objetos, así que la ganancia se limita a los datos estructurales. Se nota en PDF accesibles con muchas etiquetas y en documentos muy largos, y casi nada en un archivo lleno de fotos.
Escaneos y MRC
Los escaneos en color son el caso difícil. El texto necesita bordes nítidos y los fondos y fotos, tonos suaves. Ningún códec hace bien las dos cosas. Un JPEG de baja calidad deja halos alrededor de cada letra, y uno sin pérdida mantiene el archivo enorme.
El Mixed Raster Content (MRC, UIT-T T.44) lo resuelve separando la página en capas. La forma de las letras va a una máscara de 1 bit en alta resolución (JBIG2 o Grupo 4), y el color del texto y el fondo, a imágenes en color de baja resolución (normalmente JPEG). La máscara decide qué capa se ve en cada píxel. En PDF se construye con funciones corrientes como las máscaras de imagen y las máscaras suaves, así que cualquier visor lo abre. El modo de «alta compresión» de los programas de escaneo comerciales suele ser MRC, y puede dejar un escaneo en color en decenas o cientos de KB por página.
Hay una advertencia. El modo con pérdida de JBIG2 fusiona en un solo símbolo los glifos que se parecen. En 2013, David Kriesel demostró que multifunciones Xerox cambiaban dígitos en silencio, por ejemplo un 6 por un 8, en documentos escaneados, y la causa era precisamente esa fusión de símbolos. Para documentos contables, médicos o legales en los que las cifras importan, JBIG2 sin pérdida o Grupo 4 es lo más seguro.
Recetas
Un informe de gastos con fotos que supera el límite del correo. Es el caso clásico de mucha imagen y muchos PPP de colocación. Pasar Comprimir PDF a 150 PPP lo resuelve casi siempre. Si las fotos aún no están en un PDF, reducirlas antes con el compresor de imágenes da un resultado más ligero y previsible.
Un informe que pesa por las fuentes. Olvida el compresor y revisa las opciones de exportación de la aplicación que lo creó. Mantén la incrustación de fuentes, pero solo de los caracteres usados.
Un documento en color que se imprimirá en blanco y negro. Convertirlo con PDF a escala de grises hace previsible el contraste en una impresora monocromo. Ten en cuenta que la conversión vuelve a guardar los JPEG en color como imágenes grises sin pérdida, así que los archivos con muchas fotos pueden crecer. Si el tamaño importa, convierte primero y comprime después. En el orden inverso, la conversión deshace tus JPEG recién comprimidos y los vuelve a guardar sin pérdida.
Un contrato escaneado. Si puedes, resuélvelo al escanear. Para páginas de solo texto, 300 PPP en blanco y negro (1 bit) guardado como Grupo 4 o JBIG2 sin pérdida es lo más pequeño y nítido. Si importan los sellos o las firmas en color, usa el modo MRC del escáner. Al comprimir un escaneo en color ya hecho, bajar de 150 PPP puede dificultar la lectura de la letra pequeña.
Un PDF firmado. Todo compresor reescribe el archivo, lo que invalida las firmas digitales. Comprime antes de firmar, nunca después.
Ideas equivocadas frecuentes
«Meter un PDF en un ZIP lo reduce». Los flujos internos ya están comprimidos, así que el archivo apenas cambia. La excepción es un raro PDF de solo texto sin comprimir.
«Comprimir varias veces lo sigue reduciendo». Cuando las imágenes ya están en la resolución objetivo no queda nada que reducir. Bajar más la calidad sí reduce el archivo, pero las pérdidas se acumulan en cada pasada.
«Cuantos más PPP, mejor». Los píxeles que sobran para el tamaño de colocación los descarta la impresora. Para la oficina bastan 150–200 PPP, y 300 PPP cubren casi toda la impresión de calidad.
Fuentes
- Adobe — ISO 32000-1:2008 (PDF 1.7), 7.4 Filters, 7.5.7 Object streams, 7.5.8 Cross-reference streams
- PDF Association — ISO 32000 (PDF) resources
- iText Knowledge Base — Which PDF filters are used to encode data?
- ITU-T T.44 — Mixed Raster Content (MRC)
- ITU-T T.6 — Facsimile coding schemes (Group 4)
- IETF RFC 1951 — DEFLATE Compressed Data Format
- D. Kriesel — Xerox scanners/photocopiers randomly alter numbers in scanned documents (2013)