Jak kompresować pliki PDF w języku C#

Jak kompresować pliki PDF w C# używając IronPDF

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

IronPDF zapewnia potężne funkcje kompresji PDF w C#, które zmniejszają rozmiary plików poprzez kompresję osadzonych obrazów i optymalizację struktur drzewa PDF, co sprawia, że dokumenty są bardziej zarządzalne do przechowywania i udostępniania przy zachowaniu jakości.

Kompresja PDF zmniejsza rozmiar plików dokumentów PDF, aby były one bardziej zarządzalne do przechowywania, udostępniania i przesyłania. Niezależnie od tego, czy pracujesz z wygenerowanymi plikami PDF z HTML czy istniejącymi plikami PDF, kompresja jest niezbędna do optymalizacji obsługi dokumentów.

Obrazy zazwyczaj zużywają większość rozmiaru pliku PDF. IronPDF oferuje funkcje kompresji, które zmniejszają rozmiary osadzonych obrazów oraz optymalizują strukturę drzewa często występującą w plikach PDF zawierających wiele tabel. Te techniki działają bezproblemowo z plikami PDF utworzonymi za pomocą różnych metod, w tym konwersji URL do PDF i konwersji plików HTML.

Szybki start: Kompresuj pliki PDF z IronPDF

Zmniejsz rozmiary plików PDF używając narzędzi kompresji IronPDF. Załaduj swój plik PDF za pomocą PdfDocument.FromFile i wywołaj CompressAndSaveAs, aby skompresować i zapisać zoptymalizowany plik PDF w jednym kroku. Ten proces zapewnia znaczne zmniejszenie rozmiaru pliku przy zachowaniu jakości.

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf
  2. Skopiuj i uruchom ten fragment kodu.

    PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40);
  3. Wdrożenie do testowania w środowisku produkcyjnym

    Rozpocznij używanie IronPDF w swoim projekcie już dziś z darmową wersją próbną

    arrow pointer


Zwróć uwagęPoprzednie metody kompresji takie jak CompressImages, CompressStructTree i Compress(CompressionOptions) są przestarzałe.

Jak skompresować obrazy w plikach PDF?

Jakość kompresji JPEG przyjmuje wartości od 0 (maksymalna kompresja) do 100 (minimalna utrata jakości), a sposób zastosowania tej wartości określa silnik bazowy. Zrozumienie tych poziomów pomaga podczas pracy z plikami PDF zawierającymi osadzone obrazy lub gdy trzeba zarządzać czcionkami i grafiką.

  • 90% i więcej: wysoka jakość
  • 80%–90%: średnia jakość
  • 70–80%: niska jakość

Wypróbuj różne wartości, aby znaleźć równowagę między jakością a rozmiarem pliku. Spadek jakości zależy od typu obrazu wejściowego — na niektórych obrazach utrata ostrości jest bardziej zauważalna niż na innych. Jest to szczególnie ważne podczas pracy z obrazami z usługi Azure Blob Storage lub tworzenia plików PDF z niestandardowymi znakami wodnymi.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-image.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page");

// Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim pdf As PdfDocument = renderer.RenderUrlAsPdf("https://en.wikipedia.org/wiki/Main_Page")

' Compress images in the PDF
pdf.CompressAndSaveAs("compressed.pdf", 40)
$vbLabelText   $csharpLabel

Jakich rezultatów mogę oczekiwać po kompresji obrazów?

Obniżka o 39,24%!

Porównanie plików pokazujące plik compressed.PDF (449 KB) w porównaniu z plikiem nonCompress.PDF (739 KB), ilustrujące wyniki kompresji obrazów

Jak działa parametr jakości?

Parametr quality w CompressAndSaveAs kontroluje jakość kodowania JPEG zastosowaną do każdego osadzonego obrazu. Przekaż liczbę całkowitą od 0 (maksymalna kompresja, najniższa jakość) do 100 (minimalna kompresja, najwyższa jakość), lub null, aby całkowicie pominąć kompresję obrazów.

IronPDF automatycznie przekodowuje i skaluje obrazy podczas kompresji, więc nie są wymagane żadne dodatkowe opcje. Niższe wartości dają mniejsze pliki, ale mogą powodować widoczne artefakty — poeksperymentuj, żeby znaleźć odpowiednią równowagę dla swoich treści.


Jak skompresować strukturę drzewa pliku PDF?

Ta funkcja zmniejsza rozmiar PDF przez usunięcie struktury drzewa utworzonej przez Chrome Engine. Przekaż removeStructureTree: true jako trzeci parametr CompressAndSaveAs, aby to umożliwić. Najskuteczniej sprawdza się w przypadku plików PDF wygenerowanych przez silnik Chrome, zawierających obszerne dane tabelaryczne. Niektóre silniki renderujące generują pliki PDF bez tej struktury, co sprawia, że funkcja ta jest w takich przypadkach nieskuteczna. Technika ta jest przydatna podczas pracy ze złożonymi układami lub łączenia wielu plików PDF zawierających zbędne elementy strukturalne.

Usunięcie struktury drzewa może wpłynąć na podświetlanie tekstu i skuteczność ekstrakcji. Należy wziąć pod uwagę ten kompromis podczas stosowania kompresji, zwłaszcza jeśli użytkownicy muszą wyodrębniać tekst i obrazy ze skompresowanych plików PDF.

Test CompressAndSaveAs with tree structure removal using this PDF with table data.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-tree-structure.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("table.pdf");

// Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", null, true);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("table.pdf")

' Compress tree structure in PDF
pdf.CompressAndSaveAs("compressedTable.pdf", Nothing, True)
$vbLabelText   $csharpLabel

Jakie zmniejszenie rozmiaru pliku można osiągnąć dzięki kompresji struktury drzewa?

Obniżka o 67,90%! Odsetek ten wzrasta w przypadku większych plików PDF zawierających tabele.

Porównanie plików: compressedTable.PDF (52 KB) i table.PDF (162 KB) pokazujące wyniki kompresji

Jak mogę zastosować obie metody kompresji jednocześnie?

CompressAndSaveAs obsługuje zarówno kompresję obrazów, jak i struktury drzewa w jednym wywołaniu — przekaż wartość quality i ustaw removeStructureTree na true. To połączone podejście jest szczególnie skuteczne w przypadku złożonych plików PDF zawierających obrazy i dane strukturalne, takich jak raporty z wykresami lub dokumenty z osadzonymi tabelami i grafikami.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-compress.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, true);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Configure compression with automatic optimization
pdf.CompressAndSaveAs("compressed.pdf", 80, True)
$vbLabelText   $csharpLabel

Jakie parametry akceptuje funkcja CompressAndSaveAs?

  • outputPath (string): Ścieżka do pliku, gdzie skompresowany PDF zostanie zapisany.

  • quality (int?, 0–100): Jakość JPEG zastosowana do każdego osadzonego obrazu. Niższe wartości powodują tworzenie mniejszych plików. Przekaż null, aby całkowicie pominąć kompresję obrazów.

  • removeStructureTree (bool, domyślnie false): Gdy true, usuwa drzewo struktury PDF, aby dodatkowo zmniejszyć rozmiar pliku. Najbardziej skuteczne dla plików PDF generowanych z HTML z tabelami.

Przy stosowaniu kompresji należy wziąć pod uwagę konkretny przypadek użycia. W przypadku archiwizacji priorytetem może być jakość, a nie rozmiar pliku. Dystrybucja internetowa może wymagać mniejszych plików. Dostosuj ustawienia w zależności od tego, czy pracujesz z dokumentami zgodnymi ze standardem PDF/A, czy ze standardowymi plikami PDF.

Jak skompresować pliki PDF bez zapisywania ich na dysku?

W wielu rzeczywistych scenariuszach, takich jak odpowiedzi API, funkcje w chmurze lub załączniki do wiadomości e-mail, zapisywanie skompresowanego pliku PDF na dysku jest zbędne lub niepraktyczne.

CompressPdfToBytes zwraca skompresowany PDF jako tablicę bajtów, dając Ci pełną kontrolę nad tym, jak wyjście jest przechowywane lub przekazywane. Zarówno CompressPdfToBytes, jak i CompressPdfToStream akceptują opcjonalny parametr CompressionMode, który kontroluje sposób przeprowadzania kompresji.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-bytes.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Compress and return as byte array
byte[] compressedBytes = pdf.CompressPdfToBytes();

File.WriteAllBytes("compressed.pdf", compressedBytes);
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Compress and return as byte array
Dim compressedBytes As Byte() = pdf.CompressPdfToBytes()

File.WriteAllBytes("compressed.pdf", compressedBytes)
$vbLabelText   $csharpLabel

Jakie opcje trybu kompresji są dostępne?

Różne środowiska wdrożeniowe mają różne ograniczenia dotyczące dostępu do dysku i wydajności. Enumeracja CompressionMode pozwala wybrać odpowiedni kompromis.

  • Automatic (domyślnie): Wybiera optymalną metodę kompresji w zależności od możliwości systemu. Próbuje HighQuality najpierw i w razie ograniczenia dostępu do dysku wraca do FastMemory.

  • FastMemory: Przeprowadza kompresję całkowicie w pamięci, bez operacji wejścia-wyjścia na dysku. Najszybsza opcja, ale nie stosuje ponownego próbkowania ani zmniejszania rozdzielczości obrazu, co skutkuje większymi plikami wyjściowymi.

  • HighQuality: Zastosowuje maksymalną kompresję używając tymczasowego dostępu do dysku. Tworzy najmniejsze pliki wyjściowe z pełną optymalizacją obrazów. Wymaga uprawnień do zapisu w systemowym katalogu tymczasowym.

Jeśli potrzebujesz Stream zamiast tablicy bajtów, użyj CompressPdfToStream. Jest to przydatne w przypadku bezpośredniego przekazywania do odpowiedzi HTTP, przesyłania do pamięci w chmurze lub dowolnego przepływu pracy opartego na strumieniu.

:path=/static-assets/pdf/content-code-examples/how-to/pdf-compression-to-stream.cs
using IronPdf;

PdfDocument pdf = PdfDocument.FromFile("sample.pdf");

// Compress and return as Stream
using var compressedStream = pdf.CompressPdfToStream();

File.WriteAllBytes("compressed.pdf", compressedStream.ToArray());
Imports IronPdf

Dim pdf As PdfDocument = PdfDocument.FromFile("sample.pdf")

' Compress and return as Stream
Using compressedStream = pdf.CompressPdfToStream()
    File.WriteAllBytes("compressed.pdf", compressedStream.ToArray())
End Using
$vbLabelText   $csharpLabel

CompressPdfToBytes i CompressPdfToStream są teraz dostępne na wszystkich platformach IronPDF, w tym w Java, Node.js i Python.

Gotowy, aby sprawdzić, co jeszcze możesz zrobić? Zapoznaj się z naszą stroną z samouczkami tutaj: Dodatkowe funkcje

Często Zadawane Pytania

How much can PDF file size be reduced with compression?

IronPDF can reduce PDF file sizes up to 75% through image compression and structure optimization. In the example shown, a file was reduced by 39.24% using image compression techniques.

How does IronPDF compress PDFs in C#?

IronPDF handles compression through a single method — CompressAndSaveAs. It reduces embedded image sizes using a configurable JPEG quality (0–100) and can optionally strip the PDF's internal structure tree by setting removeStructureTree: true, which is especially effective for table-heavy documents.

What quality levels should I use for JPEG compression in PDFs?

IronPDF supports JPEG compression quality from 1% to 100%. Recommended levels are: 90% and above for high quality, 80%-90% for medium quality, and 70%-80% for low quality. The optimal setting depends on your balance between file size and visual quality requirements.

Can I compress a PDF in just one line of code?

Yes, IronPDF allows PDF compression in a single line of code: PdfDocument.FromFile("input.pdf").CompressAndSaveAs("compressed.pdf", 40); This loads a PDF, compresses images at 40% quality, and saves the result.

Does compression work with PDFs created from HTML?

Yes, IronPDF's compression features work seamlessly with PDFs created through various methods including HTML string to PDF conversions, URL to PDF conversions, and HTML file conversions, as well as existing PDF files.

What types of content benefit most from PDF compression?

Images typically consume the majority of PDF file sizes, making image-heavy documents ideal candidates for compression. Additionally, PDFs with complex table structures benefit from IronPDF's structure tree compression feature.

Can I compress a PDF without saving it to disk?

Yes, IronPDF provides CompressPdfToBytes and CompressPdfToStream methods that return the compressed PDF as a byte array or Stream respectively. Both accept an optional CompressionMode parameter with options for Automatic, FastMemory, or HighQuality compression.

Is PDF compression available in languages other than C#?

Yes, CompressPdfToBytes and CompressPdfToStream are now available across all IronPDF platforms, including Java, Node.js, and Python.

Curtis Chau
Autor tekstów technicznych

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

Czytaj więcej
Sprawdzone przez
Jeff Fritz
Jeffrey T. Fritz
Główny Menedżer Programu - Zespół .NET Community
Jeff jest również Głównym Menedżerem Programu dla zespołów .NET i Visual Studio. Jest producentem wykonawczym wirtualnej serii konferencji .NET Conf i prowadzi 'Fritz and Friends', transmisję na żywo dla deweloperów emitowaną dwa razy w tygodniu, gdzie rozmawia o technologii i pisze kod razem z widzami. Jeff pisze warsztaty, prezentacje i planuje treści dla największych wydarzeń Microsoft dla deweloperów, w tym Microsoft Build, Microsoft Ignite, .NET Conf i Microsoft MVP Summit.
Gotowy, aby rozpocząć?
Nuget Pliki do pobrania 18,135,201 | Wersja: 2026.4 just released
Still Scrolling Icon

Wciąż przewijasz?

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