Como compactar arquivos PDF usando Node.js
Arquivos PDF grandes desaceleram transferências, aumentam os custos de armazenamento e degradam o desempenho em aplicações com muitos documentos. IronPDF for Node.js oferece o método compressSize, que reduz a qualidade da imagem incorporada e, opcionalmente, redimensiona imagens para suas dimensões visíveis no documento, muitas vezes reduzindo o tamanho do arquivo em 50% ou mais sem alterar a estrutura do documento.
Início rápido: Comprimir um PDF no Node.js
Instale o pacote, carregue um PDF e chame compressSize com um valor de qualidade entre 1 e 100:
```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/quickstart.js import { PdfDocument } from "@ironsoftware/IronPDF";
// Carregar um PDF existente const pdf = await PdfDocument.fromFile("report.pdf");
// Comprimir imagens incorporadas para 60% da qualidade JPEG aguarde pdf.compressSize(60);
// Salvar o resultado aguarde pdf.saveAs("report-compressed.pdf");
<div class="hsg-featured-snippet">
<h3>Fluxo de trabalho mínimo (5 etapas)</h3>
1. Instale IronPDF: `npm install @ironsoftware/ironpdf`
2. Importe `PdfDocument` de `@ironsoftware/ironpdf`
3. Carregue o arquivo fonte com `PdfDocument.fromFile(path)`
4. Chame `await pdf.compressSize(quality)` -- faixa de qualidade 1-100
5. Salve o resultado com `await pdf.saveAs(outputPath)`
</div>
## Por Que o Tamanho do Arquivo PDF Importa para Aplicações Node.js?
O tamanho do PDF afeta diretamente duas preocupações operacionais: velocidade de entrega e custo de armazenamento. Um relatório PDF de 20 MB enviado por um endpoint de API adiciona latência mensurável em conexões móveis. Em pipelines de processamento em lote que lidam com milhares de documentos diariamente, mesmo uma redução de 30% nos tamanhos se transforma em economia significativa de armazenamento.
O método `compressSize` do IronPDF tem como alvo o principal contribuinte para grandes arquivos PDF: imagens incorporadas. Texto e gráficos vetoriais comprimem bem no nível de objeto do PDF durante a renderização, mas imagens rasterizadas incorporadas na resolução original representam a maior parte do excesso de peso em documentos comerciais típicos. Reduzir a qualidade do JPEG do padrão (geralmente 95-100%) para 60-85% oferece a maior redução de tamanho com a menor perda visível de qualidade.
PontasValores de qualidade iguais ou superiores a 80 geralmente são indistinguíveis da origem na resolução normal da tela. Reserve valores abaixo de 60 para casos de uso de arquivamento ou visualização onde o tamanho do arquivo é a restrição principal.
## Como Funciona o Método `compressSize`?
O método `compressSize` aceita dois parâmetros: `quality` (obrigatório, inteiro 1-100) e `scaleImages` (opcional, booleano). Quando `scaleImages` é `false` (o padrão), o método re-encoda cada JPEG incorporado na qualidade alvo. Quando `scaleImages` é `true`, ele também reduz a amostragem das imagens para corresponder ao seu tamanho visível no layout do PDF, reduzindo a resolução para imagens renderizadas em pequena escala na página.
```javascript {.line-numbers}
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-with-scaling.js
import { PdfDocument } from "@ironsoftware/IronPDF";
// Carregar o documento de origem
const pdf = await PdfDocument.fromFile("product-catalog.pdf");
// Comprimir imagens para 90% de qualidade e reduzir para o tamanho visível
aguarde pdf.compressSize(90, true);
// Salvar o documento otimizado
aguarde pdf.saveAs("product-catalog-optimized.pdf");
O argumento scaleImages é particularmente eficaz para PDFs gerados a partir de digitalizações de alta DPI ou de modelos HTML que incorporam imagens em resolução total, independentemente do seu tamanho de exibição. Habilitá-lo pode reduzir o tamanho do arquivo mais do que apenas ajustando a qualidade, sem qualquer degradação visível em resoluções de impressão ou tela típicas.
O método modifica o objeto PdfDocument no local. Se precisar preservar o original, clone o documento antes de chamar compressSize, ou use caminhos de salvamento separados.
Qual Configuração de Qualidade Devo Usar?
O valor de qualidade adequado depende de como o PDF será usado após a compressão:
- 90-100: Quase sem perda. Use quando o documento for ser impresso ou visualizado com zoom total.
- 80-89: Alta qualidade, arquivo visivelmente menor. O ponto de partida padrão para a maioria dos documentos empresariais.
- 60-79: Qualidade média. Aceitável para exibição na tela, entrega pela web e anexos de e-mail.
- Abaixo de 60: Baixa qualidade. Adequado para miniaturas de preview, cópias de arquivo ou casos onde o tamanho do arquivo é crítico.
Como Eu Meço o Resultado da Compressão no Node.js?
Verificar se a compressão alcançou a redução esperada é simples utilizando o módulo fs do Node.js. Leia o tamanho do arquivo antes e depois de chamar compressSize, depois calcule a proporção para confirmar que o resultado atende aos requisitos de sua aplicação.
```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/measure-compression.js import { PdfDocument } from "@ironsoftware/IronPDF"; import { statSync } from "fs";
const inputPath = "annual-report.pdf"; const outputPath = "annual-report-compressed.pdf";
const beforeBytes = statSync(inputPath).size;
const pdf = await PdfDocument.fromFile(inputPath); aguarde pdf.compressSize(75); await pdf.saveAs(outputPath);
const afterBytes = statSync(outputPath).size; const reduction = (((beforeBytes - afterBytes) / beforeBytes) * 100).toFixed(1);
console.log(Before: ${(beforeBytes / 1024).toFixed(1)} KB);
console.log(After: ${(afterBytes / 1024).toFixed(1)} KB);
console.log(Reduced by ${reduction}%);
A [API `fs.statSync` do Node.js](https://nodejs.org/api/fs.html#fsstatsynspath-options) retorna um objeto `Stats` que inclui a propriedade `size` em bytes. Para pipelines de produção, registre esta proporção por documento para identificar outliers onde a compressão não reduziu o tamanho como esperado -- tipicamente documentos escaneados já comprimidos na fonte.
ImportanteDefina a variável de ambiente `IRONPDF_ENGINE_PATH` ou configure `IronPdfGlobalConfig` antes de processar arquivos em um ambiente de servidor. Veja a [documentação IronPDF Node.js](https://ironpdf.com/nodejs/docs/) para detalhes de configuração do motor.
## Como Eu Comprimir Múltiplos PDFs em Lote?
Aplicações de produção raramente comprimem um único documento isoladamente. O exemplo abaixo processa uma matriz de caminhos de arquivos simultaneamente usando `Promise.all`, que permite ao loop de eventos do Node.js lidar com várias operações `compressSize` sem bloquear:
```javascript {.line-numbers}
//:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/batch-compress.js
import { PdfDocument } from "@ironsoftware/IronPDF";
importar caminho de "caminho";
função assíncrona compressPdfFiles(inputPaths, qualidade = 80) {
const results = await Promise.all(
inputPaths.map(async (inputPath) => {
const pdf = await PdfDocument.fromFile(inputPath);
aguarde pdf.compressSize(qualidade);
const outputPath = inputPath.replace(".pdf", "-compressed.pdf");
aguarde pdf.saveAs(outputPath);
retornar { entrada: inputPath, saída: outputPath };
)}
);
retornar resultados;
}
// Uso
const files = ["report-q1.pdf", "report-q2.pdf", "report-q3.pdf"];
const compressed = await compressPdfFiles(files, 75);
compressed.forEach(r => console.log(`Saved: ${r.output}`));
Cada chamada para PdfDocument.fromFile e compressSize é independente, tornando-as seguras para paralelização. Para lotes muito grandes (centenas de arquivos), considere dividir a matriz para evitar exceder os limites de memória do Node.js. A documentação do Node.js sobre o loop de eventos explica como Promise.all agenda I/O concorrente sem bloquear o thread principal.
Como Eu Combino Compressão com Outras Operações de PDF?
A compressão se encaixa naturalmente em uma cadeia maior de processamento de documentos. Um padrão comum é gerar um PDF a partir de HTML, adicionar uma marca d'água ou assinatura, depois comprimir antes da entrega:
```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-after-render.js import { PdfDocument, ChromePdfRenderer } from "@ironsoftware/IronPDF";
// Renderizar HTML para PDF const renderizador = novo ChromePdfRenderer(); const pdf = await renderer.renderHtmlAsPdf("
Montante devido: $540,00
");// Comprimir antes de salvar -- reduz o peso da imagem do conteúdo renderizado pelo Chrome aguarde pdf.compressSize(85);
// Salvar o documento final aguarde pdf.saveAs("invoice-1042.pdf");
O `ChromePdfRenderer` frequentemente incorpora imagens de fundo e ativos referenciados pelo CSS em resolução total. Chamar `compressSize` após a renderização reduz consistentemente o tamanho do arquivo para PDFs de origem HTML. O [tutorial de HTML para PDF IronPDF](https://ironpdf.com/nodejs/tutorials/html-to-pdf/) cobre a configuração do renderer em detalhes.
Para documentos que também precisam de [assinaturas digitais](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/), aplique a assinatura após a compressão. Assinatura bloqueia o fluxo de bytes do documento, e uma modificação posterior invalidaria a assinatura.
Ao trabalhar com documentos de várias páginas, junte-os com [`PdfDocument.merge()`](https://ironpdf.com/nodejs/examples/merge-pdfs/) antes de comprimir. Comprimir o resultado mesclado é mais eficiente do que comprimir arquivos individuais e mesclar novamente.
PontasMesclar documentos de múltiplas páginas antes de comprimir. Comprimir o resultado mesclado é mais eficiente do que comprimir arquivos individuais e mesclar novamente.
## Quais São os Próximos Passos para Compressão de PDF no Node.js?
O método `compressSize` cobre o caso de uso de compressão mais comum: reduzir o peso das imagens incorporadas. Para cenários especializados, o [exemplo de compressão de PDF IronPDF](https://ironpdf.com/nodejs/examples/pdf-compression/) oferece amostras de código funcional adicionais, e a [referência de API](https://ironpdf.com/nodejs/object-reference/api/) documenta todas as assinaturas de métodos disponíveis.
IronPDF também suporta a conversão de [imagens para PDF](https://ironpdf.com/nodejs/examples/image-to-pdf/), [leitura de texto de PDF](https://ironpdf.com/nodejs/examples/reading-pdf-text/), e [remoção de páginas de um PDF](https://ironpdf.com/nodejs/examples/remove-page-from-pdf/) — todas operações que se integram com a mesma API `PdfDocument`. Para uma visão completa das capacidades de PDF no Node.js, veja os [documentos IronPDF Node.js](https://ironpdf.com/nodejs/docs/).
Pronto para testar a compressão em seu projeto? [Comece seu teste gratuito](#trial-license) para executar os exemplos acima sem marca d'água, ou [veja as opções de licenciamento](#licensing) para implantação de produção.
`PdfDocument`Perguntas frequentes
Como comprimo um PDF em Node.js com IronPDF?
Carregue um PDF usando PdfDocument.fromFile(path), chame await pdf.compressSize(quality) com um valor de qualidade entre 1 e 100, depois salve o resultado com await pdf.saveAs(outputPath). Instale o pacote primeiro com npm install @ironsoftware/ironpdf.
O que o parâmetro de qualidade em compressSize controla?
O parâmetro de qualidade (inteiro 1-100) controla o nível de re-encodamento JPEG para imagens raster embutidas. Valores de 80-89 produzem saída de alta qualidade com uma redução de tamanho perceptível e são o ponto de partida recomendado para a maioria de documentos comerciais. Valores abaixo de 60 são adequados para casos de uso de arquivamento ou visualização onde o tamanho do arquivo é a restrição principal.
O que é o parâmetro scaleImages em compressSize?
O segundo parâmetro opcional scaleImages (booleano, padrão false) reduz amostras das imagens embutidas para corresponder às suas dimensões visíveis no layout do PDF. Definí-lo como true é eficaz para PDFs gerados a partir de digitalizações de alta DPI ou modelos HTML que incorporam imagens na resolução total, independentemente de seu tamanho de exibição.
Quanto o tamanho dos arquivos PDF pode ser reduzido usando compressSize?
A redução depende do conteúdo do PDF fonte. Documentos com muitas imagens raster de alta resolução podem ver reduções de 50% ou mais. PDFs que contêm principalmente texto e gráficos vetoriais verão redução mínima porque compressSize visa especificamente o re-encodamento de imagens JPEG.
Como medir o resultado da compressão em Node.js?
Use fs.statSync(path).size para ler o tamanho do arquivo em bytes antes e depois da compressão. Calcule a proporção como ((before - after) / before) * 100 para obter a redução percentual.

