Jak kompresować pliki PDF w C# używając IronPDF
IronPDF kompresuje PDF w C# za pomocą metody CompressAndSaveAs, która przekodowuje osadzone obrazy jako JPEG i opcjonalnie usuwa strukturę drzewa PDF, aby zmniejszyć rozmiar pliku w jednym wywołaniu. Metody towarzyszące CompressPdfToBytes i CompressPdfToStream wykonują to samo zadanie w pamięci, gdy nigdy nie chcesz dotykać dysku.
Obrazy zwykle stanowią większość rozmiaru pliku PDF, a dokumenty z dużą ilością tabel mają drzewo struktury, które dodatkowo zwiększa wagę. IronPDF celuje w oba, więc to samo wywołanie działa na plikach PDF załadowanych z dysku lub przechowywanych w strumieniu pamięci.
Szybki start: Kompresuj pliki PDF z IronPDFZaładuj swój PDF za pomocą PdfDocument.FromFile i wywołaj CompressAndSaveAs, aby przekodować jego obrazy i zapisać zredukowaną kopię w jednym kroku. Drugi argument to jakość JPEG.
-
1Install IronPDF with NuGet Package Manager
-
2Skopiuj i uruchom ten fragment kodu.
PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);C# -
3Wdrożenie do testowania w środowisku produkcyjnym
Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną
Minimalny przepływ pracy (3 kroki)
- Pobierz bibliotekę C# do kompresji PDF z NuGet
- Zaimportuj istniejący PDF lub renderuj nowy PDF
- Wywołaj
CompressAndSaveAs(outputPath, quality, removeStructureTree), aby skompresować obrazy, opcjonalnie usunąć drzewo struktury i zapisać wynik
CompressImages, CompressStructTree i Compress(CompressionOptions), są przestarzałe.Jak skompresować obrazy w plikach PDF?
Przekaż wartość JPEG quality jako drugi argument do CompressAndSaveAs, a IronPDF przekoduje każdy osadzony obraz w tej jakości. Wartości wahają się od 0 (maksymalna kompresja) do 100 (minimalna strata), a podstawowa jednostka decyduje, jak każda wartość przypisuje się do wynikowego obrazu. Ta metoda najlepiej nadaje się do dokumentów z osadzonymi obrazami.
Jako ogólny przewodnik:
- 90 i wyżej: wysoka jakość
- 80 do 90: średnia jakość
- 70 do 80: niska jakość
Niższa liczba bardziej kompresuje, ale może wprowadzić widoczne artefakty, a spadek przejrzystości zależy od obrazu źródłowego, więc przetestuj kilka ustawień na własnym materiale, aby znaleźć równowagę, którą chcesz.
Dane wejściowe
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);
Wynik
Jakich rezultatów mogę oczekiwać po kompresji obrazów?
Zmniejszono o 39,24% w przypadku renderowania Wikipedii.

Jak skompresować strukturę drzewa pliku PDF?
Przekaż removeStructureTree: true jako trzeci argument do CompressAndSaveAs, aby usunąć strukturę drzewa, którą silnik Chrome zapisuje w pliku PDF. Oszczędności są największe na plikach PDF z silnika Chrome, które zawierają rozległe dane tabelaryczne. Niektóre silniki renderujące nie emitują takiej struktury, co powoduje, że funkcja nie ma czego usunąć.
Usunięcie drzewa może osłabić podświetlanie tekstu i wybór, więc rozważ to przeciw oszczędności miejsca, jeśli czytniki będą później musiały wyodrębniać tekst i obrazy z wyniku.
Przetestuj CompressAndSaveAs z usunięciem struktury drzewa, używając tego PDF z danymi tabeli.
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);
Jakie zmniejszenie rozmiaru pliku można osiągnąć dzięki kompresji struktury drzewa?
Zmniejszono o 67,90%. Wskaźnik rośnie wraz ze wzrostem pliku tabeli PDF.

IronSuite odgrywa kluczową rolę w naszej działalności. Są to narzędzia zwiększające wydajność w całej firmie, w tym tworzenie planów pięter i poprawa zarządzania zapasami.
Jak mogę zastosować obie metody kompresji jednocześnie?
Podaj wartość quality i ustaw removeStructureTree na true w tej samej funkcji CompressAndSaveAs, aby jednocześnie zmniejszyć oba źródła nadmiarowych danych. To powiązanie sprawdza się w dokumentach, które łączą obrazy ze strukturalnymi danymi, takich jak raporty z wykresami czy faktury z osadzonymi tabelami.
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);
Jakie parametry akceptuje CompressAndSaveAs?
-
outputPath(string): Ścieżka do pliku, gdzie zapisany jest skompresowany PDF. -
quality(int?, od 0 do 100): Jakość JPEG stosowana do każdego osadzonego obrazu. Niższe wartości powodują tworzenie mniejszych plików. Przekażnull, aby całkowicie pominąć kompresję obrazu. -
removeStructureTree(bool, domyślniefalse): Gdytrue, usuwa strukturę drzewa PDF, aby dodatkowo zmniejszyć rozmiar pliku. Najbardziej efektywne dla plików PDF generowanych z HTML z tabelami.
Niech przypadek użycia ustawi knoba. Kopie archiwalne często preferują jakość nad rozmiarem, podczas gdy dystrybucja w sieci nagradza mniejszy plik. To samo przemienne odniesienie odnosi się, gdy kompresujesz dokumenty zgodne z PDF/A, gdzie wierność obrazów może być priorytetem.
Jak mogę uzyskać szczegółowe sterowanie kompresją?
Dla większości dokumentów wystarczające jest wywołanie dwoma argumentami, ale archiwa z dużą ilością obrazów i ścisłe budżety wielkości czasami wymagają większej kontroli. Przekaż obiekt AdvancedCompressionOptions do CompressAndSaveAs, aby dostosować potok kompresji, w tym skalowanie w dół DPI obrazów, jakość ponownego kodowania JPEG i poziom kompresji zlib. Prostsze przeciążenie CompressAndSaveAs(outputPath, quality, removeStructureTree) nadal działa bez zmian i generuje takie samo wyjście jak wcześniej.
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
});
Dwie właściwości, które mają największy wpływ, to JpegQuality i TargetImageDpi:
JpegQuality(int?, od 1 do 100, domyślnienull): Przekodowuje obrazy w tej jakości JPEG. Pozostaw jenull, aby całkowicie pominąć ponowne kodowanie obrazu.TargetImageDpi(int?, domyślnie150): Skalowanie w dół obrazów, których efektywne DPI przekracza tę wartość przed ponownym kodowaniem. Ustaw je nanulllub0, aby wyłączyć zmniejszanie rozdzielczości i zachować oryginalną.
Zalecane wartości JpegQuality (dotyczy tylko gdy ustawione):
| Wartość | Użyj przypadku |
|---|---|
null (domyślnie) | Brak ponownego kodowania obrazu |
95 | Archiwum, minimalne artefakty |
85 | Wysoka jakość |
70 | Wyważony, dobry dla ogólnego użytku |
50 | Internet lub e-mail, mniejsze pliki z widocznymi artefaktami |
Zalecane wartości TargetImageDpi (stratne):
| Wartość | Użyj przypadku |
|---|---|
300 | Jakość druku, bez strat dla oka przy normalnej odległości oglądania |
200 | Ostrość na ekranach o wysokim DPI i retina |
150 (domyślnie) | Najlepszy balans między wielkością a jakością dla ekranu i e-maila |
96 | Agresywne, miękki tekst ale nadal czytelny |
null lub 0 | Wyłączone, zachowuje oryginalną rozdzielczość |
TargetImageDpi zmniejszanie rozdzielczości jest stratne: gdy obraz jest zmniejszany, jego oryginalna rozdzielczość nie może zostać przywrócona. Zdecyduj wcześniej, czy chcesz redukcję rozdzielczości, czy tylko ponowne kodowanie w celu poprawy jakości, i ustaw TargetImageDpi odpowiednio.Jak skompresować pliki PDF bez zapisywania ich na dysku?
Odpowiedzi API, funkcje w chmurze i załączniki e-mail rzadko potrzebują skompresowanego PDF na dysku. CompressPdfToBytes zwraca wynik jako tablica bajtów, więc Ty decydujesz, gdzie bajty trafią dalej.
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);
Jeśli potrzebujesz Stream zamiast tablicy bajtów, wywołaj CompressPdfToStream i skopiuj to do swojej destynacji. To pasuje do przesyłania danych do korpusu odpowiedzi HTTP, przesyłania do chmury lub wszelkich przepływów pracy opartych na strumieniach.
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);
Jakie opcje CompressionTryb są dostępne?
Zarówno CompressPdfToBytes, jak i CompressPdfToStream przyjmują opcjonalny argument CompressionTryb, który decyduje, jak zadanie będzie wykonywane. Docelowe platformy wdrożenia różnią się, czy pozwalają na dostęp do dysku, a tryb pozwala wybrać odpowiedni kompromis:
| Tryb | Dostęp do dysku | Przepróbki obrazu | Rozmiar wyjściowy |
|---|---|---|---|
Automatic (domyślnie) | Próbuje na dysku, wraca do pamięci | Gdy dysk jest dostępny | Najmniejszy, gdzie dozwolone |
FastMemory | Niene | Nie | Większy |
HighQuality | Wymagany katalog tymczasowy | Tak | Najmniejszy |
Automatic próbuje najpierw HighQuality, a następnie spada do FastMemory, gdy katalog tymczasowy jest niedostępny. Przykład poniżej wymusza HighQuality dla najmniejszego wyjścia, które wymaga dostępu zapisu do systemowego katalogu temp w czasie działania.
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);
Wynik
CompressPdfToBytes i CompressPdfToStream są teraz dostępne na wszystkich platformach IronPDF, w tym Java, Niede.js i Python.
Wnioski
Masz teraz jedną metodę, CompressAndSaveAs, która ponownie koduje obrazy i zdziera strukturę drzewa, plus CompressPdfToBytes i CompressPdfToStream dla tej samej pracy w pamięci pod wybranym CompressionTryb. Naturalnym następnym krokiem jest przekształcenie odchudzonych stron na miniatury za pomocą rasteryzacji PDF.
Często Zadawane Pytania
O ile można zmniejszyć rozmiar pliku PDF dzięki kompresji?
Wyniki różnią się w zależności od zawartości. W przedstawionych przykładach, kompresja obrazu zmniejszyła plik o 39,24%, a usunięcie drzewa struktury zmniejszyło tabelo- intensywny PDF o 67,90%. Dokumenty o dużej ilości obrazów i tabel widzą największe oszczędności.
Jak IronPDF kompresuje pliki PDF w C#?
IronPDF obsługuje kompresję poprzez jedną metodę - CompressAndSaveAs. Zmniejsza rozmiary osadzonych obrazów, używając konfigurowalnej jakości JPEG (0–100) i opcjonalnie może usunąć wewnętrzną strukturę drzewa PDF, ustawiając removeStructureTree: true, co jest szczególnie skuteczne dla dokumentów z dużymi tabelami.
Jakie poziomy jakości powinienem używać do kompresji JPEG w PDF?
IronPDF obsługuje jakość kompresji JPEG od 1% do 100%. Zalecane poziomy to: 90% i więcej dla wysokiej jakości, 80%-90% dla średniej jakości i 70%-80% dla niskiej jakości. Optymalne ustawienie zależy od równowagi między rozmiarem pliku a wymaganiami jakości wizualnej.
Czy mogę skompresować PDF w zaledwie jednej linii kodu?
Tak, IronPDF pozwala na kompresję PDF w jednej linii kodu: PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); To ładuje PDF, kompresuje obrazy przy 40% jakości i zapisuje wynik.
Czy kompresja działa z plikami PDF utworzonymi z HTML?
Tak, kompresja IronPDF działa z PDF-ami stworzonymi na różne sposoby, w tym konwersje HTML string do PDF, konwersje URL do PDF i konwersje pliku HTML, jak również istniejące pliki PDF.
Jakie typy zawartości najbardziej korzystają z kompresji PDF?
Obrazy zazwyczaj zajmują większość rozmiarów plików PDF, co czyni dokumenty bogate w obrazy idealnymi kandydatami do kompresji. Ponadto, PDF złożone z dużych struktur tabelarycznych korzystają z funkcji kompresji struktury drzewa w IronPDF.
Czy mogę skompresować PDF bez zapisywania go na dysku?
Tak, IronPDF oferuje metody CompressPdfToBytes i CompressPdfToStream, które zwracają skompresowany PDF jako tablicę bajtów lub Strumień odpowiednio. Obie akceptują opcjonalny parametr CompressionMode z opcjami dla automatycznej, szybkiej pamięci lub wysokiej jakości kompresji.
Czy kompresja PDF jest dostępna w innych językach niż C#?
Tak, CompressPdfToBytes i CompressPdfToStream są teraz dostępne na wszystkich platformach IronPDF, w tym Java, Node.js i Python.
Jak uzyskać szczegółową kontrolę nad kompresją PDF w C#?
Przekaż obiekt AdvancedCompressionOptions do CompressAndSaveAs, aby dostosować potok, w tym też zmniejszenie rozdzielczości obrazów DPI za pomocą TargetImageDpi, jakość ponownego kodowania JPEG przez JpegQuality, oraz poziom kompresji zlib poprzez CompressionLevel. Oryginalne przeciążenie CompressAndSaveAs(outputPath, quality, removeStructureTree) nadal działa i produkuje ten sam wynik, co przedtem.

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podręczników.