Cómo comprimir PDFs en C#

Cómo comprimir PDFs en C# usando IronPDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

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.

  1. Instala IronPDF con el Administrador de Paquetes NuGet

    PM > Install-Package IronPdf
  2. Copie y ejecute este fragmento de código.

    PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);
  3. Despliegue para probar en su entorno real

    Comienza a usar IronPDF en tu proyecto hoy mismo con una prueba gratuita

    arrow pointer


Por favor notaLos métodos anteriores para compresión como 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)
$vbLabelText   $csharpLabel

Salida

¿Qué resultados puedo esperar de la compresión de imágenes?

Reducido en un 39.24% en una representación de Wikipedia.

Comparación de archivos mostrando compressed.pdf (449 KB) vs nonCompress.pdf (739 KB) demostrando resultados de compresión de imágenes

¿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)
$vbLabelText   $csharpLabel

¿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.

Comparación de archivos mostrando compressedTable.pdf (52 KB) vs table.pdf (162 KB) demostrando resultados de compresión

¿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)
$vbLabelText   $csharpLabel

¿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. Pase null para omitir la compresión de imágenes por completo.

  • removeStructureTree (bool, valor por defecto false): cuando true, 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.

Icon Quote related to ¿Qué parámetros acepta CompressAndSaveAs?

Mi biblioteca favorita de este tipo es IronPDF. Permite una manipulación rápida y eficiente de archivos PDF. También tiene muchas funciones valiosas, como exportar al formato PDF/A y firmar documentos PDF digitalmente.

Milan Jovanovic related to ¿Qué parámetros acepta CompressAndSaveAs?

Milan Jovanovic

Microsoft MVP

Ver estudio de caso
Icon Quote related to ¿Qué parámetros acepta CompressAndSaveAs?

IronOCR significa que podemos ahorrar $40,000 anualmente en el procesamiento manual, mientras mejoramos la productividad y liberamos recursos para tareas de alto impacto. Lo recomendaría encarecidamente.

Brent Matzelle related to ¿Qué parámetros acepta CompressAndSaveAs?

Brent Matzelle

Director de Tecnología, OPYN

Ver estudio de caso
Icon Quote related to ¿Qué parámetros acepta CompressAndSaveAs?

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.

David Jones related to ¿Qué parámetros acepta CompressAndSaveAs?

David Jones

Ingeniero de Software Principal, Agorus Build

Ver estudio de caso

¿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
})
$vbLabelText   $csharpLabel

Las dos propiedades que mueven más la aguja son JpegQuality y TargetImageDpi:

  • JpegQuality (int?, 1 a 100, valor por defecto null): recodifica imágenes a esta calidad JPEG. Déjelo null para omitir completamente la recodificación de imágenes.
  • TargetImageDpi (int?, valor por defecto 150): submuestrea imágenes cuya DPI efectiva supera este valor antes de recodificar. Configúrelo en null o 0 para 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

Por favor notaTargetImageDpi 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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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 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)
$vbLabelText   $csharpLabel

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.

Curtis Chau
Escritor Técnico

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 ...

Leer más
Revisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente Principal de Programas - Equipo de la Comunidad .NET
Jeff también es Gerente Principal de Programas para los equipos de .NET y Visual Studio. Es el productor ejecutivo de la serie de conferencias virtuales .NET Conf y anfitrión de 'Fritz and Friends', una transmisión en vivo para desarrolladores que se emite dos veces a la semana donde habla sobre tecnología y escribe código junto con la audiencia. Jeff escribe talleres, presentaciones, y planifica contenido para los eventos de desarrolladores más importantes de Microsoft, incluyendo Microsoft Build, Microsoft Ignite, .NET Conf y la Cumbre de Microsoft MVP.
¿Listo para empezar?
Nuget Descargas 20,296,129 | Versión: 2026.7 recién publicada
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida? PM > Install-Package IronPdf
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.