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 IronPDF
Cargue 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.
-
Instala IronPDF con el Administrador de Paquetes NuGet
-
Copie y ejecute este fragmento de código.
PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); -
Despliegue 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
:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-image.cs
using IronPdf;
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");
// Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40);
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")
' Compress images in the PDF
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.
:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-tree-structure.cs
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("table.pdf");
// Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", null, true);
Imports IronPdf
Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf")
' Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", Nothing, 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.
¿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.
:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-compress.cs
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, true);
Imports IronPdf
Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")
' Configure compression with automatic optimization
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.
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 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
});
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
});
Imports IronPdf
Dim pdf = PdfDocument.FromFile("input.pdf")
' Web or email: strong size reduction
pdf.CompressAndSaveAs("compressed.pdf", New AdvancedCompressionOptions With {
.JpegQuality = 70,
.TargetImageDpi = 150,
.RemoveStructureTree = True
})
' Print quality: minimal quality loss
pdf.CompressAndSaveAs("print.pdf", New AdvancedCompressionOptions With {
.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.
:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-bytes.cs
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// Compress and return as byte array
byte[] compressedBytes = pdf.CompressPdfToBytes();
File.WriteAllBytes("compressed.pdf", compressedBytes);
Imports IronPdf
Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")
' Compress and return as byte array
Dim compressedBytes As Byte() = 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.
:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-stream.cs
using IronPdf;
PdfDocument pdf = PdfDocument.FromFile("sample.pdf");
// Compress and return as Stream
using var compressedStream = pdf.CompressPdfToStream();
using var fileStream = File.Create("compressed.pdf");
compressedStream.CopyTo(fileStream);
Imports IronPdf
Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")
' Compress and return as Stream
Using compressedStream = pdf.CompressPdfToStream()
Using fileStream = File.Create("compressed.pdf")
compressedStream.CopyTo(fileStream)
End Using
End Using
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.
:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-mode.cs
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);
Imports IronPdf
Dim pdf As PdfDocument = 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
Dim compressedBytes As Byte() = 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.

