Como comprimir PDFs em C# usando IronPDF
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.
-
Instale IronPDF com o Gerenciador de Pacotes NuGet
-
Copie e execute este trecho de código.
PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); -
Implante para testar em seu ambiente de produção.
Comece a usar IronPDF em seu projeto hoje com uma avaliação gratuita
Fluxo de trabalho mínimo (3 etapas)
- Baixe a biblioteca C# para compressão de PDF do NuGet.
- Importe um PDF existente ou crie um novo PDF.
- Chame
CompressAndSaveAs(outputPath, quality, removeStructureTree)para comprimir imagens, opcionalmente remover a árvore de estrutura, e salvar o resultado
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)
Saída
Que resultados posso esperar da compressão de imagens?
Reduzido em 39.24% em uma renderização da Wikipedia.
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)
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.
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)
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. Passenullpara pular a compressão de imagem totalmente. removeStructureTree(bool, padrãofalse): quandotrue, 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.
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.
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
})
As duas propriedades que movem a agulha mais são JpegQuality e TargetImageDpi:
JpegQuality(int?, 1 a 100, padrãonull): recodifica as imagens com essa qualidade JPEG. Deixenullpara pular a recodificação de imagem inteiramente.TargetImageDpi(int?, padrão150): faz amostragem de imagens cuja DPI efetiva excede esse valor antes da recodificação. Defina paranullou0para 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 |
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)
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
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)
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.

