Cómo comprimir archivos PDF con Node.js

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

Los archivos PDF grandes ralentizan las transferencias de archivos, inflan los costos de almacenamiento y degradan el rendimiento en aplicaciones con muchos documentos. IronPDF for Node.js proporciona el método compressSize, que reduce la calidad de las imágenes incrustadas y opcionalmente cambia la escala de las imágenes a sus dimensiones visibles en el documento, a menudo reduciendo el tamaño del archivo en un 50% o más sin cambiar la estructura del documento.

Inicio Rápido: Comprimir un PDF en Node.js

Instala el paquete, carga un PDF y llama a compressSize con un valor de calidad entre 1 y 100:

```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/quickstart.js import { PdfDocument } from "@ironsoftware/ironpdf";

// Cargar un PDF existente const pdf = await PdfDocument.fromFile("report.pdf");

// Comprimir imágenes incrustadas a una calidad JPEG del 60 % await pdf.compressSize(60);

// Guardar el resultado await pdf.saveAs("report-compressed.pdf");


<div class="hsg-featured-snippet">
<h3>Flujo de trabajo mínimo (5 pasos)</h3>

1. Instala IronPDF: `npm install @ironsoftware/ironpdf`
2. Importa `PdfDocument` desde `@ironsoftware/ironpdf`
3. Carga el archivo fuente con `PdfDocument.fromFile(path)`
4. Llama a `await pdf.compressSize(quality)` -- rango de calidad 1-100
5. Guarda el resultado con `await pdf.saveAs(outputPath)`
</div>

## ¿Por qué Importa el Tamaño del Archivo PDF para las Aplicaciones de Node.js?

El tamaño del PDF afecta directamente a dos preocupaciones operativas: la velocidad de entrega y el costo de almacenamiento. Un PDF de informe de 20 MB enviado a través de un punto final de API añade latencia medible en conexiones móviles. En las tuberías de procesamiento por lotes que manejan miles de documentos diariamente, incluso una reducción del 30 % en el tamaño se traduce en ahorros significativos de almacenamiento.

El método `compressSize` de IronPDF apunta al contribuyente dominante de archivos PDF grandes: imágenes incrustadas. El texto y los gráficos vectoriales se comprimen bien a nivel de objeto PDF durante el renderizado, pero las imágenes rasterizadas incrustadas a resolución original representan la mayor parte del peso excesivo en los documentos típicos de negocios. Reducir la calidad JPEG del valor predeterminado (a menudo 95-100 %) a un 60-85 % produce la mayor reducción de tamaño con la menor pérdida de calidad visible.

ConsejosLos valores de calidad de 80 o más generalmente son indistinguibles de la fuente a resolución de pantalla normal. Reserve valores por debajo de 60 para casos de uso de archivo o vista previa donde el tamaño del archivo es la principal limitación.
## ¿Cómo funciona el método `compressSize`? El método `compressSize` acepta dos parámetros: `quality` (requerido, entero 1-100) y `scaleImages` (opcional, booleano). Cuando `scaleImages` es `false` (el valor predeterminado), el método recodifica cada JPEG incrustado a la calidad objetivo. Cuando `scaleImages` es `true`, también reduce el muestreo de las imágenes para que coincidan con su tamaño visible en el diseño PDF, reduciendo la resolución para las imágenes representadas a pequeña escala en la 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"; // Cargar el documento fuente const pdf = await PdfDocument.fromFile("product-catalog.pdf"); // Comprimir imágenes al 90 % de calidad y reducir escala al tamaño visible await pdf.compressSize(90, true); // Guardar el documento optimizado await pdf.saveAs("product-catalog-optimized.pdf");

El argumento scaleImages es particularmente efectivo para PDFs generados a partir de escaneos de alta resolución o desde plantillas HTML que incrustan imágenes a resolución completa independientemente de su tamaño de visualización. Habilitarlo puede reducir el tamaño del archivo más que ajustando solo la calidad, sin ninguna degradación visible en las resoluciones típicas de impresión o pantalla.

El método modifica el objeto PdfDocument en el lugar. Si necesitas preservar el original, clona el documento antes de llamar a compressSize, o utiliza rutas de guardado separadas.

¿Qué Configuración de Calidad Debería Usar?

El valor de calidad correcto depende de cómo se usará el PDF después de la compresión:

  • 90-100: Casi sin pérdida. Úselo cuando el documento se imprimirá o se verá a zoom completo.
  • 80-89: Alta calidad, archivo perceptiblemente más pequeño. El punto de partida predeterminado para la mayoría de los documentos de negocios.
  • 60-79: Calidad media. Aceptable para visualización en pantalla, entrega web y adjuntos de correo electrónico.
  • Por debajo de 60: Baja calidad. Adecuado para miniaturas de vista previa, copias de archivo o casos donde el tamaño del archivo es crítico.

Por favor notaLa escala de calidad se aplica específicamente a la recodificación de imágenes JPEG. El texto, los gráficos vectoriales y las imágenes no JPEG en el PDF no se ven afectados por la configuración de calidad.

¿Cómo Medir el Resultado de la Compresión en Node.js?

Verificar que la compresión logró la reducción esperada es sencillo usando el módulo fs de Node.js. Lee el tamaño del archivo antes y después de llamar a compressSize, luego calcula la relación para confirmar que el resultado cumple con los requisitos de tu aplicación.

```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); await 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}%);


La [API `fs.statSync` de Node.js](https://nodejs.org/api/fs.html#fsstatsynspath-options) devuelve un objeto `Stats` que incluye la propiedad `size` en bytes. Para las tuberías de producción, registre esta proporción por documento para que pueda identificar los casos atípicos donde la compresión no redujo el tamaño como se esperaba, generalmente documentos escaneados ya comprimidos en la fuente.

ImportanteEstablece la variable de entorno `IRONPDF_ENGINE_PATH` o configura `IronPdfGlobalConfig` antes de procesar archivos en un entorno de servidor. Consulte la [documentación de IronPDF for Node.js](https://ironpdf.com/nodejs/docs/) para detalles sobre la configuración del motor.
## ¿Cómo Comprimir Múltiples PDFs en un Lote? Las aplicaciones de producción rara vez comprimen un solo documento de forma aislada. El ejemplo a continuación procesa un arreglo de rutas de archivos simultáneamente utilizando `Promise.all`, lo que permite al bucle de eventos de Node.js manejar múltiples operaciones `compressSize` sin bloquear: ```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/batch-compress.js import { PdfDocument } from "@ironsoftware/ironpdf"; import path from "path"; async function compressPdfFiles(inputPaths, quality = 80) { const results = await Promise.all( inputPaths.map(async (inputPath) => { const pdf = await PdfDocument.fromFile(inputPath); await pdf.compressSize(quality); const outputPath = inputPath.replace(".pdf", "-compressed.pdf"); await pdf.saveAs(outputPath); return { input: inputPath, output: outputPath }; }) ); return results; } // 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 llamada a PdfDocument.fromFile y compressSize es independiente, haciéndolas seguras para paralelizar. Para lotes muy grandes (cientos de archivos), considera dividir el arreglo para evitar exceder los límites de memoria de Node.js. La documentación de Node.js sobre el bucle de eventos explica cómo Promise.all programa I/O concurrente sin bloquear el hilo principal.

¿Cómo Combinar la Compresión con Otras Operaciones PDF?

La compresión se integra naturalmente en una cadena de procesamiento de documentos más grande. Un patrón común es generar un PDF a partir de HTML, agregar una marca de agua o firma, y luego comprimir antes de la 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 a PDF const renderer = new ChromePdfRenderer(); const pdf = await renderer.renderHtmlAsPdf("

Cantidad debida: $540.00

");

// Comprimir antes de guardar: reduce el peso de la imagen del contenido renderizado por Chrome await pdf.compressSize(85);

// Guardar el documento final await pdf.saveAs("invoice-1042.pdf");



El `ChromePdfRenderer` a menudo incrusta imágenes de fondo y recursos referenciados por CSS a resolución completa. Llamar a `compressSize` después de renderizar reduce consistentemente el tamaño del archivo para PDFs originados en HTML. El [tutorial de HTML a PDF de IronPDF](https://ironpdf.com/nodejs/tutorials/html-to-pdf/) cubre en detalle la configuración del renderizador.

Para documentos que también necesitan [firmas digitales](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/), aplique la firma después de la compresión. Firmar bloquea la secuencia de bytes del documento y una modificación posterior anularía la firma.

Cuando trabajes con documentos multipágina, fusiónalos con [`PdfDocument.merge()`](https://ironpdf.com/nodejs/examples/merge-pdfs/) antes de comprimir. Comprimir el resultado fusionado es más eficiente que comprimir archivos individuales y volver a fusionar.

ConsejosFusione documentos de varias páginas antes de comprimir. Comprimir el resultado fusionado es más eficiente que comprimir archivos individuales y volver a fusionar.
## ¿Cuáles Son los Siguientes Pasos para la Compresión de PDFs en Node.js? El método `compressSize` cubre el caso de uso más común de compresión: reducir el peso de la imagen incrustada. Para escenarios especializados, el [ejemplo de compresión de PDF de IronPDF](https://ironpdf.com/nodejs/examples/pdf-compression/) proporciona más muestras de código funcional, y la [referencia de API](https://ironpdf.com/nodejs/object-reference/api/) documenta todas las firmas de método disponibles. IronPDF también admite convertir [imágenes a PDF](https://ironpdf.com/nodejs/examples/image-to-pdf/), [leer texto de PDF](https://ironpdf.com/nodejs/examples/reading-pdf-text/) y [eliminar páginas de un PDF](https://ironpdf.com/nodejs/examples/remove-page-from-pdf/) -- todas operaciones que se integran con la misma API `PdfDocument`. Para una visión completa de las capacidades de PDF en Node.js, consulte la [documentación de IronPDF for Node.js](https://ironpdf.com/nodejs/docs/). ¿Listo para probar la compresión en su proyecto? [Comience su prueba gratuita](#trial-license) para ejecutar los ejemplos anteriores sin una marca de agua, o [vea las opciones de licenciamiento](#licensing) para despliegue de producción. `PdfDocument`

Preguntas Frecuentes

¿Cómo comprimo un PDF en Node.js con IronPDF?

Cargue un PDF usando PdfDocument.fromFile(path), llame a await pdf.compressSize(quality) con un valor de calidad entre 1 y 100, luego guarde el resultado con await pdf.saveAs(outputPath). Instale el paquete primero con npm install @ironsoftware/ironpdf.

¿Qué controla el parámetro de calidad en compressSize?

El parámetro de calidad (entero 1-100) controla el nivel de re-codificación JPEG para imágenes raster incrustadas. Los valores de 80-89 producen una salida de alta calidad con una reducción de tamaño notable y son el punto de partida recomendado para la mayoría de los documentos de negocios. Los valores por debajo de 60 son aptos para casos de uso de archivo o vista previa donde el tamaño del archivo es la restricción principal.

¿Qué es el parámetro scaleImages en compressSize?

El segundo parámetro opcional scaleImages (booleano, predeterminado false) reduce imágenes incrustadas para que coincidan con sus dimensiones visibles en el diseño del PDF. Configurarlo a true es efectivo para PDFs generados a partir de escaneos de alta DPI o plantillas HTML que incrustan imágenes a resolución completa independientemente de su tamaño de visualización.

¿Cuánto pueden reducirse los tamaños de los archivos PDF usando compressSize?

La reducción depende del contenido del PDF fuente. Los documentos con muchas imágenes raster de alta resolución pueden ver reducciones del 50% o más. Los PDFs que contienen principalmente texto y gráficos vectoriales verán una reducción mínima porque compressSize se enfoca específicamente en la re-codificación de imágenes JPEG.

¿Cómo mido el resultado de la compresión en Node.js?

Use fs.statSync(path).size para leer el tamaño del archivo en bytes antes y después de la compresión. Calcule la relación como ((antes - después) / antes) * 100 para obtener el porcentaje de reducción.

Darrius Serrant
Ingeniero de Software Full Stack (WebOps)

Darrius Serrant tiene una licenciatura en Ciencias de la Computación de la Universidad de Miami y trabaja como Ingeniero de Marketing WebOps Full Stack en Iron Software. Atraído por la programación desde joven, vio la computación como algo misterioso y accesible, convirtiéndolo en el ...

Leer más
¿Listo para empezar?
Versión: 2026.6 recién publicada
Still Scrolling Icon

¿Aún desplazándote?

¿Quieres una prueba rápida?
ejecutar una muestra Mira cómo tu HTML se convierte en PDF.