Cómo comprimir PDFs en C# usando IronPDF
IronPDF comprime PDFs en C# a través del método CompressAndSaveAs, que re-codifica imágenes incrustadas como JPEG y opcionalmente elimina el árbol de estructura del PDF para reducir el tamaño del archivo en una sola llamada. Los métodos CompressPdfToBytes y CompressPdfToStream complementarios hacen el mismo trabajo en memoria cuando no se desea tocar el disco.
Las imágenes generalmente representan la mayor parte del tamaño de un PDF, y los documentos con muchas tablas llevan un árbol de estructura que añade más peso. IronPDF apunta a ambos, por lo que la misma llamada funciona en PDFs cargados desde el disco o en un flujo de memoria.
Guía rápida: Comprimir archivos PDF con IronPDFCargue su PDF con PdfDocument.FromFile y llame a CompressAndSaveAs para re-codificar sus imágenes y escribir la copia reducida en un solo paso. El segundo argumento es la calidad del JPEG.
-
1Install IronPDF with NuGet Package Manager
-
2Copie y ejecute este fragmento de código.
PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);C# -
3Despliegue para probar en su entorno real
Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita
Flujo de trabajo mínimo (3 pasos)
- Descargue la biblioteca de C# para compresión de PDF desde NuGet
- Importe un PDF existente o genere un nuevo PDF
- Llame a
CompressAndSaveAs(outputPath, quality, removeStructureTree)para comprimir imágenes, opcionalmente eliminar el árbol de estructura, y guardar el resultado
CompressImages, CompressStructTree, y Compress(CompressionOptions) están obsoletos.¿Cómo comprimo imágenes en PDFs?
Pase un valor de JPEG quality como segundo argumento a CompressAndSaveAs e IronPDF re-codificará cada imagen incrustada a esa calidad. Los valores varían de 0 (compresión máxima) a 100 (mínima pérdida), y el motor subyacente decide cómo cada valor se mapea al resultado. Este es el método al que acudir siempre que un documento lleve imágenes incrustadas.
Como guía general:
- 90 y más: alta calidad
- 80 a 90: calidad media
- 70 a 80: baja calidad
Un número más bajo comprime más fuerte pero puede introducir artefactos visibles, y cuánto disminuya la claridad depende de la imagen de origen, por lo que pruebe algunos ajustes contra su propio contenido para encontrar el equilibrio que desee.
Entrada
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");
// Quality 40 re-encodes every embedded image as a low-quality JPEG, which is
// where most of the file-size saving comes from in image-heavy PDFs
pdf.CompressAndSaveAs("compressed.pdf", 40);
Salida
¿Qué resultados puedo esperar de la compresión de imágenes?
Reducido en un 39.24% en una representación de Wikipedia.

¿Cómo comprimo la estructura del árbol PDF?
Pase removeStructureTree: true como tercer argumento a CompressAndSaveAs para eliminar la estructura del árbol que el motor de Chrome escribe en un PDF. El ahorro es mayor en PDFs del motor de Chrome que contienen extensos datos de tablas. Algunos motores de renderizado no emiten tal estructura, lo que deja nada para que la función elimine.
Eliminar el árbol puede debilitar la selección y el resaltado de texto, por lo que considere eso frente a la ganancia de tamaño si los lectores más tarde necesitarán extraer texto e imágenes del resultado.
Pruebe CompressAndSaveAs con la eliminación de la estructura del árbol usando este PDF con datos de tabla.
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("table.pdf");
// Pass null quality to skip image compression and true to drop the structure
// tree, which is the bulk of the size in table-heavy Chrome-rendered PDFs
pdf.CompressAndSaveAs("compressedTable.pdf", null, true);
¿Qué reducción del tamaño de archivo puede lograr la compresión de la estructura del árbol?
Reduced by 67.90%. La cifra aumenta a medida que crece el PDF de la tabla.

El Iron Suite juega un papel crucial en nuestras operaciones. Estas son herramientas que aumentan la eficiencia en toda la empresa, incluyendo la creación de planos y la mejora en la gestión de inventario.
¿Cómo puedo aplicar ambos métodos de compresión juntos?
Proporcione un valor quality y configure removeStructureTree en true en la misma llamada CompressAndSaveAs para reducir ambas fuentes de exceso al mismo tiempo. Esta combinación vale la pena en documentos que mezclan imágenes con datos estructurados, como informes con gráficos o facturas con tablas incrustadas.
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// Shrink both sources of bloat in one pass: re-encode images at quality 80
// and strip the structure tree (true) for the largest size reduction
pdf.CompressAndSaveAs("compressed.pdf", 80, true);
¿Qué parámetros acepta CompressAndSaveAs?
-
outputPath(string): la ruta del archivo donde se escribe el PDF comprimido. -
quality(int?, 0 a 100): calidad JPEG aplicada a cada imagen incrustada. Valores más bajos producen archivos más pequeños. Pasenullpara omitir la compresión de imágenes por completo. -
removeStructureTree(bool, valor por defectofalse): cuandotrue, elimina la estructura del árbol del PDF para reducir aún más el tamaño del archivo. Más efectivo para PDFs generados en HTML con tablas.
Deje que el caso de uso ajuste la configuración. Las copias de archivo a menudo prefieren la calidad sobre el tamaño, mientras que la distribución web recompensa el archivo más pequeño. El mismo compromiso se aplica cuando comprimes documentos compatibles con PDF/A, donde la fidelidad de la imagen puede ser la prioridad.
¿Cómo obtengo un control detallado sobre la compresión?
Para la mayoría de los documentos, la llamada de dos argumentos es suficiente, pero archivos con muchas imágenes y presupuestos de tamaño estrictos a veces necesitan más control. Pase un objeto AdvancedCompressionOptions a CompressAndSaveAs para ajustar la tubería de compresión, incluyendo la submuestreo DPI de imagen, la calidad de re-codificación JPEG, y el nivel de compresión zlib. La sobrecarga más simple CompressAndSaveAs(outputPath, quality, removeStructureTree) aún funciona sin cambios y produce el mismo resultado que antes.
using IronPdf;
var pdf = PdfDocument.FromFile("input.pdf");
// Web or email: strong size reduction
pdf.CompressAndSaveAs("compressed.pdf", new AdvancedCompressionOptions
{
JpegQuality = 70,
TargetImageDpi = 150,
RemoveStructureTree = true
});
// Print quality: minimal quality loss
pdf.CompressAndSaveAs("print.pdf", new AdvancedCompressionOptions
{
JpegQuality = 90,
TargetImageDpi = 300
});
Las dos propiedades que mueven más la aguja son JpegQuality y TargetImageDpi:
JpegQuality(int?, 1 a 100, valor por defectonull): recodifica imágenes a esta calidad JPEG. Déjelonullpara omitir completamente la recodificación de imágenes.TargetImageDpi(int?, valor por defecto150): submuestrea imágenes cuya DPI efectiva supera este valor antes de recodificar. Configúrelo ennullo0para desactivar el submuestreo y mantener la resolución original.
Valores recomendados de JpegQuality (solo aplica cuando está configurado):
| Valor | Caso de uso |
|---|---|
null (por defecto) | Sin re-codificación de imágenes |
95 | Archivo, mínimas artefactos |
85 | Alta calidad |
70 | Equilibrado, bueno para uso general |
50 | Web o email, archivos más pequeños con artefactos visibles |
Valores recomendados de TargetImageDpi (perdidosos):
| Valor | Caso de uso |
|---|---|
300 | Calidad de impresión, sin pérdida a la vista a distancia normal |
200 | Nítido en pantallas de alta DPI y retina |
150 (por defecto) | Mejor equilibrio de tamaño y calidad para pantalla y correo electrónico |
96 | Agresivo, texto suave pero aún legible |
null o 0 | Desactivado, preserva la resolución original |
TargetImageDpi el submuestreo es con pérdida: una vez que una imagen es submuestreada, su resolución original no puede ser restaurada. Decida por adelantado si desea reducción de resolución o solo recodificación de calidad, y configure TargetImageDpi en consecuencia.¿Cómo comprimo PDFs sin guardarlos en el disco?
Las respuestas del API, funciones en la nube y archivos adjuntos de correo electrónico rara vez necesitan un PDF comprimido en disco. CompressPdfToBytes devuelve el resultado como un arreglo de bytes, así que usted decide dónde van los bytes a continuación.
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// Return the compressed PDF as bytes so it can go straight into an HTTP
// response, a database varbinary column, or a queue message with no temp file
byte[] compressedBytes = pdf.CompressPdfToBytes();
File.WriteAllBytes("compressed.pdf", compressedBytes);
Si necesita un Stream en lugar de un arreglo de bytes, llame a CompressPdfToStream y cópielo a su destino. Esto es adecuado para redirigir la salida al cuerpo de respuesta HTTP, una carga de almacenamiento en la nube, o cualquier flujo de trabajo basado en flujos.
using IronPdf;
using System.IO;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// Stream output so the compressed bytes can be piped straight to an HTTP
// response or cloud upload without first buffering the whole file as byte[]
using Stream compressedStream = pdf.CompressPdfToStream();
// CompressPdfToStream returns a read-only Stream, so copy it to the destination
using FileStream fileStream = File.Create("compressed.pdf");
compressedStream.CopyTo(fileStream);
Qué opciones CompressionModo están disponibles?
Tanto CompressPdfToBytes como CompressPdfToStream aceptan un argumento opcional CompressionModo que decide cómo se hace el trabajo. Los objetivos de implementación difieren en si permiten acceso al disco, y el modo le permite escoger la compensación correcta:
| Modo | Acceso al disco | Re-muestreo de imagen | Tamaño de salida |
|---|---|---|---|
Automático (por defecto) | Intenta disco, cae a la memoria | Cuando el disco está disponible | El más pequeño donde está permitido |
FastMemory | None | No | Más grande |
AltaCalidad | Directorio temporal requerido | Sí | El más pequeño |
Automatic intenta HighQuality primero y cae a FastMemory cuando el directorio temporal está fuera de los límites. El ejemplo a continuación fuerza HighQuality para el menor tamaño de salida, lo que requiere acceso de escritura al directorio temporal del sistema en tiempo de ejecución.
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// HighQuality resamples images using the system temp directory, so it produces
// the smallest output but needs write access to that directory at runtime
byte[] compressedBytes = pdf.CompressPdfToBytes(50, false, CompressionMode.HighQuality);
File.WriteAllBytes("compressed.pdf", compressedBytes);
Salida
CompressPdfToBytes y CompressPdfToStream ahora están disponibles en todas las plataformas de IronPDF, incluyendo Java, Node.js, y Python.
Conclusión
Ahora tiene un método, CompressAndSaveAs, que re-codifica imágenes y elimina el árbol de estructura, además de CompressPdfToBytes y CompressPdfToStream para el mismo trabajo en memoria bajo un CompressionModo elegido. Un paso natural siguiente es convertir esas páginas reducidas en miniaturas con rasterización de PDF.
Preguntas Frecuentes
¿Cuánto se puede reducir el tamaño de un archivo PDF con la compresión?
Los resultados varían según el contenido. En los ejemplos mostrados, la compresión de imágenes redujo un archivo en 39.24% y la eliminación del árbol de estructuras redujo un PDF con muchas tablas en 67.90%. Los documentos con muchas imágenes y tablas ven los mayores ahorros.
¿Cómo comprime IronPDF los archivos PDF en C#?
IronPDF gestiona la compresión mediante un único método: CompressAndSaveAs. Reduce el tamaño de las imágenes incrustadas utilizando una calidad JPEG configurable (0-100) y, opcionalmente, puede eliminar el árbol de estructura interna del PDF estableciendo removeStructureTree: true, lo cual resulta especialmente eficaz para documentos con muchas tablas.
¿Qué niveles de calidad debo utilizar para la compresión JPEG en los PDF?
IronPDF admite una calidad de compresión JPEG del 1% al 100%. Los niveles recomendados son: 90% y más para alta calidad, 80%-90% para calidad media, y 70%-80% para baja calidad. El ajuste óptimo depende de su equilibrio entre el tamaño del archivo y los requisitos de calidad visual.
¿Puedo comprimir un PDF con una sola línea de código?
Sí, IronPDF permite comprimir archivos PDF con una sola línea de código: PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); Esto carga un PDF, comprime las imágenes con una calidad del 40 % y guarda el resultado.
¿Funciona la compresión con PDF creados a partir de HTML?
Sí, la compresión de IronPDF funciona con PDFs creados a través de varios métodos incluyendo conversiones de cadenas HTML a PDF, conversiones de URL a PDF, y conversiones de archivos HTML, así como archivos PDF existentes.
¿Qué tipos de contenido se benefician más de la compresión de PDF?
Las imágenes suelen consumir la mayor parte del tamaño de los archivos PDF, por lo que los documentos con muchas imágenes son candidatos ideales para la compresión. Además, los PDF con estructuras de tablas complejas se benefician de la función de compresión de árbol de estructuras de IronPDF.
¿Puedo comprimir un PDF sin guardarlo en el disco?
Sí, IronPDF proporciona los métodos CompressPdfToBytes y CompressPdfToStream, que devuelven el PDF comprimido como una matriz de bytes o un Stream, respectivamente. Ambos aceptan un parámetro opcional CompressionMode con opciones de compresión Automática, FastMemory o Alta calidad.
¿Está disponible la compresión de PDF en otros lenguajes además de C#?
Sí, CompressPdfToBytes y CompressPdfToStream ya están disponibles en todas las plataformas de IronPDF, incluidas Java, Node.js y Python.
¿Cómo obtengo un control detallado sobre la compresión de PDF en C#?
Pasa un objeto AdvancedCompressionOptions a CompressAndSaveAs para ajustar la línea de producción, incluyendo el muestreo de baja resolución de imágenes mediante TargetImageDpi, la calidad de re-codificación JPEG mediante JpegQuality, y el CompressionLevel de zlib. La sobrecarga original CompressAndSaveAs(outputPath, quality, removeStructureTree) todavía funciona y produce el mismo resultado que antes.
How can I achieve fine-grained control over PDF compression in IronPDF?
For fine-grained control, IronPDF allows you to pass an `AdvancedCompressionOptions` object to the `CompressAndSaveAs` method, letting you adjust JPEG quality, image DPI downsampling, and zlib compression levels.

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.