Como compactar PDFs em C#

Como comprimir PDFs em C# usando IronPDF

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

IronPDF comprime PDFs em C# através do método CompressAndSaveAs, que recodifica imagens incorporadas como JPEG e opcionalmente remove a árvore estrutural do PDF para reduzir o tamanho do arquivo em uma única chamada. Os métodos acompanhantes CompressPdfToBytes e CompressPdfToStream fazem o mesmo trabalho em memória quando você nunca quer tocar no disco.

Imagens geralmente representam a maior parte do tamanho de um PDF, e documentos pesados em tabelas têm uma árvore de estrutura que adiciona peso adicional. IronPDF direciona ambos, então a mesma chamada funciona em PDFs carregados do disco ou mantidos em um fluxo de memória.

Início rápido: Comprima arquivos PDF com o IronPDF

Carregue seu PDF com PdfDocument.FromFile e chame CompressAndSaveAs para recodificar suas imagens e gravar a cópia reduzida em um passo. O segundo argumento é a qualidade JPEG.

  1. Instale IronPDF com o Gerenciador de Pacotes NuGet

    PM > Install-Package IronPdf
  2. Copie e execute este trecho de código.

    PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);
  3. Implante para testar em seu ambiente de produção.

    Comece a usar IronPDF em seu projeto hoje com uma avaliação gratuita

    arrow pointer


ObserveMétodos anteriores para compressão como CompressImages, CompressStructTree, e Compress(CompressionOptions) estão obsoletos.

Como comprimir imagens em PDFs?

Passe um valor quality JPEG como o segundo argumento para CompressAndSaveAs e o IronPDF recodifica cada imagem incorporada com essa qualidade. Os valores variam de 0 (máxima compressão) a 100 (mínima perda), e o motor subjacente decide como cada valor mapeia para a saída. Este é o método a que recorrer sempre que um documento contém imagens incorporadas.

Como guia aproximado:

  • 90 e acima: alta qualidade
  • 80 a 90: qualidade média
  • 70 a 80: baixa qualidade

Um número menor comprime mais, mas pode introduzir artefatos visíveis, e o quanto a clareza diminui depende da imagem de origem, então teste algumas configurações em seu próprio conteúdo para encontrar o equilíbrio desejado.

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");

// 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);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim pdf As PdfDocument = 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)
$vbLabelText   $csharpLabel

Saída

Que resultados posso esperar da compressão de imagens?

Reduzido em 39.24% em uma renderização da Wikipedia.

Comparação de arquivos mostrando compressed.pdf (449 KB) versus nonCompress.pdf (739 KB), demonstrando os resultados da compressão de imagem.

Como faço para comprimir a estrutura em árvore de um PDF?

Passe removeStructureTree: true como o terceiro argumento para CompressAndSaveAs para remover a estrutura da árvore que o Chrome Engine escreve em um PDF. A economia é maior em PDFs do motor Chrome que possuem dados extensos de tabelas. Alguns motores de renderização não emitem tal estrutura, o que deixa nada para o recurso remover.

Remover a árvore pode enfraquecer a seleção e o destaque de texto, portanto, pondere isso contra o ganho de tamanho se leitores posteriormente precisarem extrair texto e imagens do resultado.

Teste CompressAndSaveAs com remoção de estrutura de árvore usando este PDF com dados de tabela.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-tree-structure.cs
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);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf")

' Pass Nothing 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", Nothing, True)
$vbLabelText   $csharpLabel

Que redução no tamanho do arquivo a compressão de estrutura em árvore pode alcançar?

Reduzido em 67.90%. A figura aumenta conforme o PDF de tabela cresce.

Comparação de arquivos mostrando compressedTable.pdf (52 KB) versus table.pdf (162 KB), demonstrando os resultados da compressão.

Como posso aplicar os dois métodos de compressão simultaneamente?

Forneça um valor quality e defina removeStructureTree para true na mesma chamada CompressAndSaveAs para encolher ambas as fonte de inchaço de uma vez. Este emparelhamento se justifica em documentos que misturam imagens com dados estruturados, como relatórios com gráficos ou faturas com tabelas incorporadas.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-compress.cs
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);
Imports IronPdf

Dim pdf As PdfDocument = 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)
$vbLabelText   $csharpLabel

Quais Parâmetros CompressAndSaveAs Aceita?

  • outputPath (string): o caminho do arquivo onde o PDF compactado é escrito.

  • quality (int?, 0 a 100): qualidade JPEG aplicada a cada imagem incorporada. Valores mais baixos geram arquivos menores. Passe null para pular a compressão de imagem totalmente.

  • removeStructureTree (bool, padrão false): quando true, remove a estrutura da árvore do PDF para reduzir ainda mais o tamanho do arquivo. Mais eficaz para PDFs gerados em HTML com tabelas.

Deixe o caso de uso definir o grau. Cópias arquivais muitas vezes favorecem a qualidade sobre o tamanho, enquanto a distribuição na web recompensa o arquivo menor. A mesma troca se aplica quando você comprime documentos compatíveis com PDF/A, onde a fidelidade da imagem pode ser a prioridade.

Icon Quote related to Quais Parâmetros CompressAndSaveAs Aceita?

Minha biblioteca favorita desse tipo é o IronPDF. Ele permite a manipulação rápida e eficiente de arquivos PDF. Além disso, possui muitos recursos valiosos, como a exportação para o formato PDF/A e a assinatura digital de documentos PDF.

Milan Jovanovic related to Quais Parâmetros CompressAndSaveAs Aceita?

Milan Jovanovic

Microsoft MVP

Veja o estudo de caso
Icon Quote related to Quais Parâmetros CompressAndSaveAs Aceita?

Com o IronOCR, podemos economizar US$ 40.000 por ano em processamento manual, ao mesmo tempo que aumentamos a produtividade e liberamos recursos para tarefas de alto impacto. Eu o recomendo fortemente.

Brent Matzelle related to Quais Parâmetros CompressAndSaveAs Aceita?

Brent Matzelle

Diretor de Tecnologia, OPYN

Veja o estudo de caso
Icon Quote related to Quais Parâmetros CompressAndSaveAs Aceita?

O IronSuite desempenha um papel crucial nas nossas operações. Estas são ferramentas que aumentam a eficiência no negócio, incluindo a criação de plantas baixas e melhoria na gestão de inventário.

David Jones related to Quais Parâmetros CompressAndSaveAs Aceita?

David Jones

Engenheiro(a) de Software Líder, Agorus Build

Veja o estudo de caso

Como Obtenho Controle Detalhado Sobre a Compressão?

Para a maioria dos documentos a chamada com dois argumentos é suficiente, mas arquivos pesados em imagens e orçamentos estritos de tamanho às vezes precisam de mais controle. Passe um objeto AdvancedCompressionOptions para CompressAndSaveAs para ajustar o pipeline de compressão, incluindo amostragem de DPI de imagem, qualidade de recodificação JPEG e nível de compressão zlib. A sobrecarga mais simples CompressAndSaveAs(outputPath, quality, removeStructureTree) ainda funciona inalterada e produz o mesmo resultado de 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

As duas propriedades que movem a agulha mais são JpegQuality e TargetImageDpi:

  • JpegQuality (int?, 1 a 100, padrão null): recodifica as imagens com essa qualidade JPEG. Deixe null para pular a recodificação de imagem inteiramente.
  • TargetImageDpi (int?, padrão 150): faz amostragem de imagens cuja DPI efetiva excede esse valor antes da recodificação. Defina para null ou 0 para desativar a amostragem e manter a resolução original.

Valores recomendados para JpegQuality (aplica-se apenas quando definido):

Valor Caso de uso
null (padrão) Sem recodificação de imagem
95 Arquivamento, mínimos artefatos
85 Alta qualidade
70 Equilibrado, bom para uso geral
50 Web ou e-mail, arquivos menores com artefatos visíveis

Valores recomendados para TargetImageDpi (com perdas):

Valor Caso de uso
300 Qualidade de impressão, sem perdas à vista a distância normal de visualização
200 Nítida em telas de alta DPI e retina
150 (padrão) Melhor equilíbrio de tamanho e qualidade para tela e e-mail
96 Agressivo, texto suave mas ainda legível
null ou 0 Desativado, preserva a resolução original

ObserveO downsampling TargetImageDpi é com perdas: uma vez que uma imagem é amostrada, sua resolução original não pode ser restaurada. Decida de antemão se você deseja redução de resolução ou recodificação de qualidade apenas, e defina TargetImageDpi adequadamente.

Como faço para compactar PDFs sem salvá-los no disco?

Respostas de API, funções em nuvem e anexos de e-mail raramente precisam de um PDF comprimido no disco. CompressPdfToBytes retorna o resultado como um array de bytes, então você decide para onde os bytes irão em seguida.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-bytes.cs
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);
Imports IronPdf

Dim pdf As PdfDocument = 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
Dim compressedBytes As Byte() = pdf.CompressPdfToBytes()

File.WriteAllBytes("compressed.pdf", compressedBytes)
$vbLabelText   $csharpLabel

Se você precisar de um Stream em vez de um array de bytes, chame CompressPdfToStream e copie-o para o seu destino. Isso se adequa ao canalizar a saída para um corpo de resposta HTTP, um upload de armazenamento em nuvem ou qualquer fluxo de trabalho baseado em fluxo.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-stream.cs
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);
Imports IronPdf
Imports System.IO

Dim pdf As PdfDocument = 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 compressedStream As Stream = pdf.CompressPdfToStream()
    ' CompressPdfToStream returns a read-only Stream, so copy it to the destination
    Using fileStream As FileStream = File.Create("compressed.pdf")
        compressedStream.CopyTo(fileStream)
    End Using
End Using
$vbLabelText   $csharpLabel

Quais Opções CompressionMode Estão Disponíveis?

Ambos CompressPdfToBytes e CompressPdfToStream aceitam um argumento opcional CompressionMode que decide como o trabalho é feito. Os alvos de implantação diferem em permitir ou não acesso ao disco, e o modo permite escolher a troca certa:

Modo Acesso ao disco Reamostragem de imagem Tamanho de saída
Automatic (padrão) Tenta o disco, recorre à memória Quando o disco está disponível O menor onde permitido
FastMemory Nenhum Não Maior
HighQuality Diretório temporário exigido Sim O menor

Automatic tenta HighQuality primeiro e cai para FastMemory quando o diretório temporário é restrito. O exemplo abaixo força HighQuality para o menor resultado, o que precisa de acesso de gravação ao diretório temp do sistema em tempo de execução.

: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

Saída

CompressPdfToBytes e CompressPdfToStream agora estão disponíveis em todas as plataformas IronPDF, incluindo Java, Node.js e Python.

Conclusão

Agora você tem um método, CompressAndSaveAs, que recodifica imagens e remove a estrutura da árvore, mais CompressPdfToBytes e CompressPdfToStream para o mesmo trabalho em memória sob um CompressionMode escolhido. Um próximo passo natural é transformar essas páginas redimensionadas em miniaturas com rasterização de PDF.

Perguntas frequentes

Qual a redução máxima possível no tamanho de um arquivo PDF com a compressão?

Os resultados variam de acordo com o conteúdo. Nos exemplos mostrados, a compressão de imagem reduziu um arquivo em 39,24% e a remoção da árvore de estrutura reduziu um PDF pesado em tabelas em 67,90%. Documentos pesados em imagens e tabelas veem as maiores economias.

Como o IronPDF comprime PDFs em C#?

O IronPDF lida com a compressão através de um único método — CompressAndSaveAs . Ele reduz o tamanho das imagens incorporadas usando uma qualidade JPEG configurável (0–100) e pode opcionalmente remover a árvore de estrutura interna do PDF definindo removeStructureTree: true , o que é especialmente eficaz para documentos com muitas tabelas.

Quais níveis de qualidade devo usar para a compressão JPEG em PDFs?

O IronPDF suporta compressão JPEG com qualidade de 1% a 100%. Os níveis recomendados são: 90% ou mais para alta qualidade, 80% a 90% para qualidade média e 70% a 80% para baixa qualidade. A configuração ideal depende do equilíbrio entre o tamanho do arquivo e os requisitos de qualidade visual.

Posso comprimir um PDF com apenas uma linha de código?

Sim, o IronPDF permite a compressão de PDFs com uma única linha de código: `PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);` Isso carrega um PDF, comprime as imagens com 40% de qualidade e salva o resultado.

A compressão funciona com PDFs criados a partir de HTML?

Sim, a compressão do IronPDF funciona com PDFs criados através de vários métodos, incluindo conversões de string HTML para PDF, conversões de URL para PDF e conversões de arquivo HTML, bem como arquivos PDF existentes.

Que tipos de conteúdo se beneficiam mais da compressão de PDF?

As imagens geralmente ocupam a maior parte do tamanho dos arquivos PDF, tornando os documentos com muitas imagens candidatos ideais para compressão. Além disso, PDFs com estruturas de tabelas complexas se beneficiam do recurso de compressão em árvore de estrutura do IronPDF.

Posso compactar um PDF sem salvá-lo no disco?

Sim, o IronPDF oferece os métodos CompressPdfToBytes e CompressPdfToStream , que retornam o PDF compactado como uma matriz de bytes ou um fluxo (Stream), respectivamente. Ambos aceitam um parâmetro opcional CompressionMode com opções para compressão Automática, FastMemory ou HighQuality.

A compressão de PDF está disponível em outras linguagens além de C#?

Sim, CompressPdfToBytes e CompressPdfToStream agora estão disponíveis em todas as plataformas IronPDF , incluindo Java, Node.js e Python.

Como obtenho controle granular sobre a compressão de PDFs em C#?

Passe um objeto AdvancedCompressionOptions para CompressAndSaveAs para ajustar o pipeline, incluindo a redução de DPI da imagem através de TargetImageDpi, qualidade de re-encode de JPEG através de JpegQuality, e o CompressionLevel do zlib. A sobrecarga original CompressAndSaveAs(outputPath, quality, removeStructureTree) ainda funciona e produz o mesmo resultado de antes.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais
Analisado por
Jeff Fritz
Jeffrey T. Fritz
Gerente de Programa Principal - Equipe da Comunidade .NET
Jeff também é Gerente de Programa Principal das equipes do .NET e do Visual Studio. Ele é o produtor executivo da série de conferências virtuais .NET Conf e apresenta o "Fritz and Friends", uma transmissão ao vivo para desenvolvedores que vai ao ar duas vezes por semana, onde ele conversa sobre tecnologia e escreve código junto com os espectadores. Jeff cria workshops, apresentações e planeja conteúdo para os maiores eventos de desenvolvedores da Microsoft, incluindo o Microsoft Build, o Microsoft Ignite, a .NET Conf e o Microsoft MVP Summit.
Pronto para começar?
Nuget Downloads 19,936,792 | Versão: 2026.7 recém-lançado
Still Scrolling Icon

Ainda está rolando a tela?

Quer provas rápidas? PM > Install-Package IronPdf
executar um exemplo Veja seu HTML se transformar em um PDF.