Diese Seite kann automatisch übersetzten Text enthalten.

PDF-Dokumente in C# und VB.NET komprimieren

In vielen Fällen besteht häufig der Wunsch, PDF-Dokumente zu komprimieren und zu optimieren. Kleinere PDF-Dokumente lassen sich einfacher über das Netzwerk übertragen und sind kostengünstiger zu speichern. Die Reduzierung der PDF-Dateigröße ist insbesondere für Archivierungszwecke wichtig.

PDF-Dokumente in C# und VB.NET optimieren

.NET-Bibliothek zum Optimieren von PDF-Dokumenten

Verwenden Sie die Docotic.Pdf-Bibliothek, um PDF-Dokumente in .NET Framework- und .NET Core-Anwendungen zu komprimieren. Die Bibliothek ist auf NuGet und auf unserer Website verfügbar. Holen Sie sich die Bibliothek und einen kostenlosen zeitlich begrenzten Lizenzschlüssel auf der C# .NET-PDF-Bibliothek herunterladen-Seite.

Docotic.Pdf bietet verschiedene Optimierungsmöglichkeiten:

  • PDF-Objekte optimieren
  • doppelte PDF-Objekte entfernen (Schriften, Bilder usw.)
  • Bilder komprimieren
  • Schrift-Subsetting
  • Metadaten entfernen
  • Strukturinformationen entfernen
  • nicht verwendete Ressourcen entfernen
  • private Anwendungsdaten entfernen
  • Formularfelder und Anmerkungen flattenen
  • Schriften einbetten aufheben

Sie können all das verwenden, um für Ihre PDF-Dokumente das beste Kompressionsverhältnis zu erzielen. Sehen Sie sich das PDF-Dokument in .NET komprimieren-Beispiel an, um all diese Techniken in Aktion zu sehen.

Sehen wir uns diese Komprimierungsmethoden genauer an.

PDF-Objekte optimieren

Intern ist eine PDF-Datei eine Sammlung von Low-Level-PDF-Objekten: Dictionaries, Streams, Arrays und anderen. Beim Speichern einer PDF-Datei wendet Docotic.Pdf standardmäßig die folgenden verlustfreien Optimierungen an:

  • komprimiert PDF-Streams mit Flate-Codierung
  • löscht ungenutzte PDF-Objekte
  • bettet indirekte PDF-Objekte direkt ein
  • schreibt PDF-Objekte ohne Formatierung
  • packt PDF-Objekte in komprimierte Objekt-Streams

Dieses Beispiel zeigt, wie man PDF-Objekte in C# optimiert:

using BitMiracle.Docotic.Pdf;

using var pdf = new PdfDocument("input.pdf");
var saveOptions = new PdfSaveOptions();

// Diese Optionen sind standardmäßig aktiviert und werden implizit angewendet:
//saveOptions.Compression = PdfCompression.Flate;
//saveOptions.RemoveUnusedObjects = true;
//saveOptions.OptimizeIndirectObjects = true;
//saveOptions.UseObjectStreams = true;
//saveOptions.WriteWithoutFormatting = true;

pdf.Save("compressed.pdf", saveOptions);

Alle diese Optimierungen beeinträchtigen nicht den sichtbaren Inhalt (Text, Bilder, Lesezeichen und alles andere) des PDF-Dokuments. Sie beeinflussen nur, wie PDF-Objekte in der Ausgabedatei geschrieben und komprimiert werden.

Das Löschen ungenutzter PDF-Objekte ist für andere unten beschriebene Techniken wichtig. Setzen Sie die Eigenschaft PdfSaveOptions.RemoveUnusedObjects nicht auf false, sofern Sie keinen triftigen Grund haben, die ungenutzten Objekte beizubehalten.

Doppelte Objekte in PDF-Dokumenten entfernen

Beim Zusammenführen von PDF-Dokumenten enthält das erzeugte PDF oft doppelte Schriften und Bilder. Das Ersetzen doppelter Objekte hilft, die Größe der erzeugten PDF-Datei zu reduzieren. Hier ist das C#-Beispiel für diesen Vorgang:

using var pdf = new PdfDocument("merged.pdf");
pdf.ReplaceDuplicateObjects();

pdf.Save("compressed.pdf");

Es wird empfohlen, doppelte Objekte vor dem Komprimieren von Bildern oder dem Aufheben der Schrifteinbettung zu entfernen. Andernfalls wird viel zusätzliche Arbeit darauf verwendet, Kopien derselben Bilder oder Schriften zu optimieren.

Die Methode PdfDocument.ReplaceDuplicateObjects ersetzt keine Inline-Bilder. Wenn Ihr Dokument Inline-Bilder enthält, verwenden Sie zuerst die Methode PdfCanvas.MoveInlineImagesToResources. Die Methode konvertiert die Inline-Bilder in normale Bilder, und dann kann die Methode ReplaceDuplicateObjects auch die konvertierten Bilder deduplizieren.

Bilder in PDF komprimieren

Die Optimierung von PDF-Bildern ist bei Dokumenten mit Rasterbildern in der Regel die wirksamste Komprimierungsmethode.

Die Docotic.Pdf-Bibliothek bietet integrierte Methoden zum erneuten Komprimieren von PDF-Bildern mit den Komprimierungsalgorithmen JPEG, CCITT Group 3 und 4 (Fax), JPEG 2000 und Zip/Deflate. Sie können Bilder auch in der Größe ändern oder verkleinern, um die PDF-Dateigröße noch weiter zu reduzieren. Oder Sie optimieren Bilder selbst mit einem Drittanbieter-Tool und ersetzen Bilder anschließend.

Sehen Sie sich das Beispiel Bilder in einem PDF-Dokument in C# und VB.NET optimieren auf GitHub an.

Schrift-Subsetting

PDF-Dokumente betten üblicherweise die zum Zeichnen von Text verwendeten Schriften ein. Eingebettete Schriften enthalten oft Informationen zu allen unterstützten Glyphen. Das Entfernen in einem PDF-Dokument nicht verwendeter Glyphen kann die Ausgabedateigröße erheblich verringern.

Dieses Beispiel zeigt, wie man PDF-Schriften in C# optimiert:

using var pdf = new PdfDocument("text.pdf");
pdf.RemoveUnusedFontGlyphs();

pdf.Save("compressed.pdf");

Das Subsetting wirkt sich nicht auf Schriften aus, die in variablen Textelementen wie Textfeldern oder Kombinationsfeldern verwendet werden.

Metadaten entfernen

PDF-Dokumente können unkomprimierte XMP-Metadaten mit Informationen über den Autor, Schlüsselwörter, die Erstellungszeit und so weiter enthalten. Die Metadaten beeinflussen den sichtbaren Inhalt des PDF-Dokuments nicht.

Dieses Beispiel zeigt, wie man Metadaten aus einer PDF-Datei in C# entfernt:

using var pdf = new PdfDocument("metadata.pdf");

XmpMetadata xmp = pdf.Metadata;
xmp.Unembed();
pdf.Info.Clear(false);

pdf.Save("compressed.pdf");

Strukturinformationen entfernen

PDF-Dokumente können Informationen über ihre logische Struktur enthalten. Diese Informationen werden verwendet, um:

  • Tagged PDF-Dokumente zu erzeugen
  • PDF-Dokumente für Hilfstechnologien zugänglich zu machen

Das Entfernen solcher Informationen hilft, die PDF-Dateigröße zu reduzieren. Das PDF ist dann jedoch nicht mehr getaggt und nicht mehr für Hilfstechnologien zugänglich. Dieses Beispiel zeigt, wie man Strukturinformationen aus PDF in C# löscht:

using var pdf = new PdfDocument("tagged.pdf");
pdf.RemoveStructureInformation();

pdf.Save("compressed.pdf");

Nicht verwendete Ressourcen aus PDF entfernen

PDF-Seiten und XObjects können mehr Schriften, Bilder oder Muster referenzieren, als sie verwenden. Mit der Methode PdfDocument.RemoveUnusedResources können Sie nicht verwendete Ressourcen aus PDF entfernen. Hier ist das C#-Beispiel:

using var pdf = new PdfDocument("input.pdf");
pdf.RemoveUnusedResources();

pdf.Save("compressed.pdf");

Private Anwendungsdaten aus PDF entfernen

Von Adobe-Software erzeugte PDF-Dokumente können private Anwendungsdaten enthalten. Solche Anwendungsdaten werden in page-piece-Dictionaries gespeichert.

Dieses Beispiel zeigt, wie man PDF in C# bereinigt und komprimiert, indem page-piece-Dictionaries entfernt werden:

using var pdf = new PdfDocument("input.pdf");
pdf.RemovePieceInfo();

pdf.Save("compressed.pdf");

PDF-Formularfelder und Anmerkungen flattenen

Sie können die Größe eines PDF-Dokuments mit einem ausgefüllten Formular reduzieren, indem Sie die Formularfelder flattenen. Beim Flattening werden die Formularfelder durch ihre visuelle Darstellung ersetzt. Die ausgefüllten Werte bleiben erhalten. Dieses C#-Beispiel zeigt, wie man alle PDF-Formularfelder flattenen kann:

using var pdf = new PdfDocument("form.pdf");
pdf.FlattenControls();

pdf.Save("compressed.pdf");

Alternativ können Sie mit der Methode PdfDocument.FlattenWidgets alle Anmerkungen und Steuerelemente flattenen.

Außerdem können Sie mit der Methode PdfWidget.Flatten einzelne Anmerkungen oder Steuerelemente flattenen.

Schriften einbetten aufheben

Das Einbetten von PDF-Schriften ist für benutzerdefinierte oder seltene Schriften sinnvoll. Gleichzeitig können weit verbreitete Schriften wie Arial oder Verdana die PDF-Dateigröße ohne guten Grund erhöhen. Sie können die Einbettung beliebter Schriften aufheben, die auf Ihren Zielplattformen verfügbar sind. Beispielcode in C#:

using var pdf = new PdfDocument("input.pdf");
UnembedFonts(pdf);
pdf.Save("compressed.pdf");

/// <summary>
/// Diese Methode hebt die Einbettung jeder Schrift auf, die:
/// * im Betriebssystem installiert ist
/// * oder deren Name in der "always unembed"-Liste enthalten ist
/// * und deren Name nicht in der "always keep"-Liste enthalten ist.
/// </summary>
private static void UnembedFonts(PdfDocument pdf)
{
    string[] alwaysUnembedList = ["MyriadPro-Regular"];
    string[] alwaysKeepList = ["ImportantFontName", "AnotherImportantFontName"];

    using var ms = new MemoryStream();

    foreach (PdfFont font in pdf.GetFonts())
    {
        if (!font.Embedded ||
            font.EncodingName == "Built-In" ||
            Array.Exists(alwaysKeepList, name => font.Name == name))
        {
            continue;
        }

        if (font.Format == PdfFontFormat.TrueType || font.Format == PdfFontFormat.CidType2)
        {
            SystemFontLoader loader = SystemFontLoader.Instance;

            ms.Position = 0;
            if (loader.TryLoad(font.Name, font.Bold, font.Italic, ms))
            {
                font.Unembed();
                continue;
            }
        }

        if (Array.Exists(alwaysUnembedList, name => font.Name == name))
            font.Unembed();
    }
}

Verwenden Sie diese Technik nicht mit PDF/A-Dokumenten. Ein PDF/A-Dokument muss alle Schriften einbetten.

Testen Sie PDF-Dokumente mit aufgehobener Schrifteinbettung immer in Ihren Zielbetriebssystemen (Windows, Linux, macOS, iOS, Android) und PDF-Viewern (Adobe, Foxit usw.).

Weitere Methoden zur Reduzierung der PDF-Größe

Es gibt viele der oben genannten Optimierungsmethoden. Sie können PDF-Dokumente jedoch noch weiter komprimieren, indem Sie unwichtige Inhalte entfernen. Docotic.Pdf ermöglicht es Ihnen, diese Objekte aus PDF-Dokumenten zu löschen:

  • Anmerkungen
  • Anhänge
  • Lesezeichen
  • Formularfelder
  • Seiten
  • Skripte
  • Transparenz

Sie können auch Text, Bilder und Vektorgrafiken aus PDF-Seiten entfernen. Auch das Flattenen von Text ist möglich.

Abschluss

Sie können die Docotic.Pdf-Bibliothek verwenden, um PDF in C# und VB.NET zu komprimieren. Docotic.Pdf bietet viele wirksame Optimierungsmöglichkeiten.

Laden Sie das vollständige Beispiel PDF-Dokument in C# und VB.NET komprimieren von GitHub herunter und testen Sie es.

Kontaktieren Sie uns, und wir beraten Sie, wie Sie für Ihre PDF-Dokumente das beste Kompressionsverhältnis erreichen.