Jak kompresować pliki PDF za pomocą Node.js

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

Duże pliki PDF spowalniają transfer plików, zwiększają koszty przechowywania i pogarszają wydajność w aplikacjach obciążonych dokumentami. IronPDF dla Node.js zapewnia metode compressSize, ktora zmniejsza jakość osadzonych obrazów i opcjonalnie zmienia skalę obrazów do ich widocznych wymiarów w dokumencie, co często skraca rozmiar pliku o 50% lub więcej, nie zmieniając struktury dokumentu.

Szybki start: Kompresja PDF w Node.js

Zainstaluj pakiet, załaduj PDF i wywołaj compressSize z wartością jakości między 1 a 100:

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

// Załaduj istniejący PDF const pdf = await PDFDocument.fromFile("report.pdf");

// Skompresuj osadzone obrazy do jakości 60% JPEG await pdf.compressSize(60);

// Zapisz wynik await pdf.saveAs("report-compressed.pdf");


<div class="hsg-featured-snippet">
<h3>Minimalny proces (5 kroków)</h3>

1. Zainstaluj IronPDF: `npm install @ironsoftware/ironpdf`
2. Importuj `PdfDocument` z `@ironsoftware/ironpdf`
3. Załaduj plik źródłowy z `PdfDocument.fromFile(path)`
4. Wywołaj `await pdf.compressSize(quality)` -- zakres jakości 1-100
5. Zapisz wynik za pomocą `await pdf.saveAs(outputPath)`
</div>

## Dlaczego rozmiar pliku PDF ma znaczenie dla aplikacji Node.js?

Rozmiar PDF bezpośrednio wpływa na dwa kwestie operacyjne: szybkość dostawy i koszt przechowywania. Raport PDF o rozmiarze 20 MB przesyłany przez punkt końcowy API dodaje mierzalne opóźnienie na połączeniach mobilnych. W procesach przetwarzania w partiach obejmujących tysiące dokumentów dziennie, nawet 30% redukcja rozmiaru składa się na znaczne oszczędności na przechowywaniu.

Metoda `compressSize` IronPDF celuje w głównego winowajcę dużych plików PDF: osadzone obrazy. Tekst i grafika wektorowa dobrze się kompresują na poziomie obiektu PDF podczas renderowania, ale obrazy rastrowe osadzone w oryginalnej rozdzielczości są odpowiedzialne za większość nadmiarowej wagi w typowych dokumentach biznesowych. Zmniejszenie jakości JPEG z domyślnego poziomu (zwykle 95-100%) do 60-85% daje największą redukcję rozmiaru przy najmniej widocznej utracie jakości.

PoradyWartości jakości na poziomie 80 i powyżej są zazwyczaj nieodróżnialne od źródła przy normalnej rozdzielczości ekranu. Wartości poniżej 60 rezerwuj do zastosowań archiwalnych lub podglądu, gdzie rozmiar pliku jest głównym ograniczeniem.
## Jak działa metoda `compressSize`? Metoda `compressSize` przyjmuje dwa parametry: `quality` (wymagany, liczba całkowita 1-100) i `scaleImages` (opcjonalnie, boolean). Kiedy `scaleImages` jest `false` (domyślnie), metoda ponownie koduje każdy osadzony JPEG w docelowej jakości. Kiedy `scaleImages` jest `true`, również zmniejsza próbki obrazów, aby dopasować ich widoczny rozmiar w układzie PDF, zmniejszając rozdzielczość dla obrazów renderowanych w małej skali na stronie. ```javascript {.line-numbers} //:path=/static-assets/pdf/content-code-examples/how-to/nodejs-compress-pdf/compress-with-scaling.js import { PdfDocument } from "@ironsoftware/IronPDF"; // Załaduj dokument źródłowy const pdf = await PdfDocument.fromFile("product-catalog.pdf"); // Skompresuj obrazy do jakości 90% i przeskaluj do widocznych rozmiarów await pdf.compressSize(90, true); // Zapisz zoptymalizowany dokument await pdf.saveAs("product-catalog-optimized.pdf");

Argument scaleImages jest szczególnie skuteczny dla plików PDF generowanych z wysokiej rozdzielczości skanów lub z szablonów HTML, które osadzają obrazy w pełnej rozdzielczości bez względu na ich rozmiar wyświetlania. Jego włączenie może zmniejszyć rozmiar pliku bardziej niż samo dostosowanie jakości, bez widocznego pogorszenia przy typowych rozdzielczościach wydruku lub ekranu.

Metoda modyfikuje obiekt PdfDocument w miejscu. Jeśli musisz zachować oryginał, sklonuj dokument przed wywołaniem compressSize lub użyj oddzielnych ścieżek zapisu.

Jakiego ustawienia jakości użyć?

Odpowiednia wartość jakości zależy od tego, w jaki sposób PDF będzie używany po kompresji:

  • 90-100: Blisko bezstratna. Używaj, gdy dokument będzie drukowany lub oglądany w pełnym przybliżeniu.
  • 80-89: Wysoka jakość, zauważalnie mniejszy plik. Domyślny punkt wyjściowy dla większości dokumentów biznesowych.
  • 60-79: Średnia jakość. Akceptowalna do wyświetlania na ekranie, dostarczania przez sieć i jako załączniki do e-mail.
  • Poniżej 60: Niska jakość. Nadaje się do miniatur podglądu, kopii archiwalnych lub w przypadkach, gdy rozmiar pliku jest krytyczny.

Zwróć uwagęSkala jakości dotyczy konkretnie ponownego kodowania obrazów JPEG. Text, grafika wektorowa i nie-JPEG-owe obrazy w PDF nie są objęte przez ustawienie jakości.

Jak zmierzyć wynik kompresji w Node.js?

Weryfikacja, że kompresja osiągnęła oczekiwaną redukcję, jest prosta z użyciem modułu fs w Node.js. Przeczytaj rozmiar pliku przed i po wywołaniu compressSize, a następnie oblicz stosunek, aby potwierdzić, że wynik spełnia wymagania Twojej aplikacji.

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


[Node.js `fs.statSync` API](https://nodejs.org/api/fs.html#fsstatsynspath-options) zwraca obiekt `Stats`, który zawiera właściwość `size` w bajtach. Dla procesów produkcyjnych loguj tę proporcję dla każdego dokumentu, aby móc zidentyfikować wyjątki, gdzie kompresja nie zmniejszyła rozmiaru zgodnie z oczekiwaniami – typowo dokumenty zeskanowane już skompresowane przy źródle.

WażneUstaw zmienną środowiskową `IRONPDF_ENGINE_PATH` lub skonfiguruj `IronPdfGlobalConfig` przed przetwarzaniem plików w środowisku serwerowym. Szczegóły konfiguracji silnika znajdziesz w [dokumentacji IronPDF Node.js](https://ironpdf.com/nodejs/docs/).
## Jak skompresować wiele PDF-ów w partii? Aplikacje produkcyjne rzadko kompresują pojedynczy dokument w izolacji. Poniższy przykład przetwarza tablicę ścieżek plików jednocześnie przy użyciu `Promise.all`, który pozwala pętli zdarzeń Node.js obsługiwać wiele operacji `compressSize` bez blokowania: ```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) =&gt; { 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 }; }) ); zwróć wyniki; } // Użycie 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}`));

Każde wywołanie PdfDocument.fromFile i compressSize jest niezależne, co oznacza, że mogą być bezpiecznie równolegle. Dla bardzo dużych partii (setek plików), rozważ podzielenie tablicy, aby unikać przekroczenia limitów pamięci Node.js. Dokumentacja Node.js o pętli zdarzeń wyjaśnia, jak Promise.all harmonogramuje jednoczesne I/O bez blokowania głównego wątku.

Jak połączyć kompresję z innymi operacjami na PDF?

Kompresja naturalnie pasuje do większego łańcucha przetwarzania dokumentów. Częstym schematem jest generowanie PDF z HTML, dodanie znaku wodnego lub podpisu, a następnie kompresja przed dostarczeniem:

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

// Renderowanie HTML do PDF const renderer = new ChromePdfRenderer(); const pdf = await renderer.renderHtmlAsPDF("

Kwota do zapłaty: 540,00 $

");

// Kompresja przed zapisaniem – zmniejsza wagę obrazu w treści renderowanej przez Chrome await pdf.compressSize(85);

// Zapisz ostateczny dokument await pdf.saveAs("invoice-1042.pdf");



Często metoda `ChromePdfRenderer` osadza obrazy tła i zasoby odwołane przez CSS w pełnej rozdzielczości. Wywołanie `compressSize` po renderowaniu konsekwentnie zmniejsza rozmiar pliku dla PDF pochodzących z HTML. Samouczek IronPDF [HTML to PDF](https://ironpdf.com/nodejs/tutorials/html-to-pdf/) szczegółowo opisuje konfigurację renderera.

Dla dokumentów, które również wymagają [podpisów cyfrowych](https://ironpdf.com/nodejs/examples/digitally-sign-a-pdf/), podpisz po kompresji. Podpis blokuje strumień bajtów dokumentu, a dalsza modyfikacja unieważni podpis.

Podczas pracy z dokumentami wielostronicowymi, scalaj je za pomocą [`PdfDocument.merge()`](https://ironpdf.com/nodejs/examples/merge-pdfs/) przed kompresją. Kompresja scalonego wyniku jest bardziej wydajna niż kompresja poszczególnych plików i ponowne scalanie.

PoradyPołącz dokumenty wielostronicowe przed kompresją. Kompresja scalonego wyniku jest bardziej wydajna niż kompresja poszczególnych plików i ponowne scalanie.
## Jakie są kolejne kroki dla kompresji PDF w Node.js? Metoda `compressSize` obejmuje najczęstszy przypadek użycia kompresji: zmniejszanie wagi osadzonych obrazów. Dla specjalnych scenariuszy przykład [kompresji PDF w IronPDF](https://ironpdf.com/nodejs/examples/pdf-compression/) dostarcza dodatkowych działających przykładów kodu, a [dokumentacja API](https://ironpdf.com/nodejs/object-reference/api/) dokumentuje wszystkie dostępne sygnatury metod. IronPDF obsługuje również konwersję [obrazów na PDF](https://ironpdf.com/nodejs/examples/image-to-pdf/), [czytanie tekstu PDF](https://ironpdf.com/nodejs/examples/reading-pdf-text/) oraz [usuwanie stron z PDF](https://ironpdf.com/nodejs/examples/remove-page-from-pdf/) - wszystkie operacje wykorzystują to samo API `PdfDocument`. Dla pełnego przeglądu możliwości PDF w Node.js, zobacz [dokumentację IronPDF for Node.js](https://ironpdf.com/nodejs/docs/). Gotowy, aby przetestować kompresję w swoim projekcie? [Rozpocznij darmowy okres próbny](#trial-license), aby uruchomić powyższe przykłady bez znaku wodnego, lub [zobacz opcje licencyjne](#licensing) dla wdrożeń produkcyjnych. `PdfDocument`

Często Zadawane Pytania

Jak skompresować PDF w Node.js za pomocą IronPDF?

Załaduj plik PDF używając PdfDocument.fromFile(path), wywołaj await pdf.compressSize(quality) z wartością jakości między 1 a 100, a następnie zapisz wynik z await pdf.saveAs(outputPath). Najpierw zainstaluj pakiet za pomocą npm install @ironsoftware/ironpdf.

Czym jest parametr quality w metodzie compressSize?

Parametr quality (liczba całkowita 1-100) kontroluje poziom ponownego kodowania JPEG dla osadzonych obrazów rastrowych. Wartości 80-89 zapewniają wysokiej jakości wyjście z zauważalnym zmniejszeniem rozmiaru i są zalecanym punktem startowym dla większości dokumentów biznesowych. Wartości poniżej 60 nadają się do zastosowań archiwizacyjnych lub poglądowych, gdzie głównym ograniczeniem jest rozmiar pliku.

Czym jest parametr scaleImages w metodzie compressSize?

Opcjonalny drugi parametr scaleImages (typ logiczny, domyślnie false) przeskalowuje osadzone obrazy do ich widocznych wymiarów w układzie PDF. Ustawienie tego parametru na true jest skuteczne dla PDFów generowanych z wysokorozdzielczych skanów lub szablonów HTML, które osadzają obrazy w pełnej rozdzielczości niezależnie od ich rozmiaru wyświetlania.

O ile można zmniejszyć rozmiar plików PDF używając metody compressSize?

Zmniejszenie zależy od zawartości źródłowego pliku PDF. Dokumenty z wieloma obrazami rastrowymi o wysokiej rozdzielczości mogą doświadczyć redukcji o 50% lub więcej. PDFy zawierające głównie tekst i grafikę wektorową zobaczą minimalne zmniejszenie, ponieważ compressSize dotyczy specyficznie ponownego kodowania obrazów JPEG.

Jak zmierzyć wynik kompresji w Node.js?

Użyj fs.statSync(path).size, aby odczytać rozmiar pliku w bajtach przed i po kompresji. Oblicz współczynnik jako ((before - after) / before) * 100, aby uzyskać procentowe zmniejszenie.

Darrius Serrant
Inżynier oprogramowania Full Stack (WebOps)

Darrius Serrant posiada tytuł licencjata z informatyki z Uniwersytetu Miami i pracuje jako Full Stack WebOps Marketing Engineer w Iron Software. Już od młodych lat zainteresował się kodowaniem, postrzegając informatykę jako zarówno tajemniczą, jak i dostępną, co czyni ją doskonałym medium dla kreatywności ...

Czytaj więcej
Gotowy, aby rozpocząć?
Wersja: 2026.6 właśnie wydany
Still Scrolling Icon

Wciąż przewijasz?

Czy chcesz szybko dowodu?
Uruchom przykład i zobacz, jak Twój kod HTML zamienia się w plik PDF.