IRONSOFTWAREHOME

Cómo comprimir archivos PDF con Node.js

Curtis Chau
Curtis Chau
Updated: 9 de mayo de 2026

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:

//: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");
Text

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

Consejos: Los 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.

//: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");
Text

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 nota: La 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.

//: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}%`);
Text

La API fs.statSync de Node.js 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.

Importante: Establece 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 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:

//: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}`));
Text

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:

//: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("<h1>Factura #1042</h1><p>Cantidad debida: $540.00</p>");

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

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 cubre en detalle la configuración del renderizador.

Para documentos que también necesitan firmas digitales, 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() antes de comprimir. Comprimir el resultado fusionado es más eficiente que comprimir archivos individuales y volver a fusionar.

Consejos: Fusione 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 proporciona más muestras de código funcional, y la referencia de API documenta todas las firmas de método disponibles.

IronPDF también admite convertir imágenes a PDF, leer texto de PDF y eliminar páginas de un 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.

¿Listo para probar la compresión en su proyecto? Comience su prueba gratuita para ejecutar los ejemplos anteriores sin una marca de agua, o vea las opciones de licenciamiento 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.

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 estructurados y visualmente atractivos.

...
Leer más

¿Listo para empezar?

Versión:2026.6recién publicada

Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Descarga de módulo de Node.js para PDF
Instalar con npm

Versión: 2026.6

  1. Descargar e instalar Node.js 12+.
  2. Ejecuta el comando anterior en el terminal.

Licencias desde $999

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta