Diese Seite kann automatisch übersetzten Text enthalten.

Komprimieren Sie PDF-Dokumente in C# und VB.NET

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

Optimieren Sie PDF-Dokumente in C# und VB.NET

.NET-Bibliothek zur Optimierung von PDF-Dokumenten

Verwenden Sie die Docotic.Pdf-Bibliothek, um PDF-Dokumente in .NET Framework- und .NET Core-Anwendungen zu komprimieren. Sie können die Binärdateien der Bibliothek herunterladen oder deren NuGet-Paket verwenden. Um die Bibliothek ohne Einschränkungen im Evaluierungsmodus auszuprobieren, können Sie über dieses Formular den kostenlosen, zeitlich begrenzten Lizenzschlüssel erhalten.

Docotic.Pdf-Bibliothek 9.3.17036-dev Regressionstests 14,665 bestanden NuGet-Downloads insgesamt 4,191,515

Docotic.Pdf bietet verschiedene Optimierungsmöglichkeiten:

  • PDF-Objekte optimieren
  • Entfernen Sie doppelte PDF-Objekte (Schriftarten, Bilder usw.)
  • Bilder komprimieren
  • Teilmenge der Schriftarten
  • Metadaten entfernen
  • Strukturinformationen entfernen
  • Entfernen Sie ungenutzte Ressourcen
  • Private Anwendungsdaten entfernen
  • Formularfelder und Anmerkungen reduzieren
  • Einbettung von Schriftarten aufheben

Sie können alle oben genannten Möglichkeiten nutzen, um das beste Komprimierungsverhältnis für Ihre PDF-Dokumente zu erzielen. Schauen Sie sich das Beispiel PDF-Dokument in .NET komprimieren an, um alle diese Techniken in Aktion zu sehen.

Sehen wir uns diese Komprimierungsmethoden genauer an.

Optimieren Sie PDF-Objekte

Intern ist eine PDF-Datei eine Sammlung von PDF-Objekten auf niedriger Ebene: Wörterbücher, Streams, Arrays und andere. Beim Speichern einer PDF-Datei wendet Docotic.Pdf standardmäßig die folgenden verlustfreien Optimierungen an:

  • komprimiert PDF-Streams mit Flate-Kodierung
  • löscht nicht verwendete PDF-Objekte
  • Inline indirekte PDF-Objekte
  • schreibt PDF-Objekte ohne Formatierung
  • packt PDF-Objekte in komprimierte Objektströme

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

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 wirken sich nicht auf sichtbare Inhalte (Text, Bilder, Lesezeichen und alles andere) des PDF-Dokuments aus. Sie wirken sich nur darauf aus, wie PDF-Objekte in der Ausgabe-PDF-Datei geschrieben und komprimiert werden.

Das Löschen nicht verwendeter PDF-Objekte ist für andere unten beschriebene Techniken wichtig. Setzen Sie die Eigenschaft PdfSaveOptions.RemoveUnusedObjects nicht auf false, es sei denn, Sie haben triftige Gründe, die nicht verwendeten Objekte zu behalten.

Entfernen Sie doppelte Objekte in PDF-Dokumenten

Wenn Sie PDF-Dokumente zusammenführen, enthält das erstellte PDF häufig doppelte Schriftarten und Bilder. Das Ersetzen doppelter Objekte trägt dazu bei, die Größe der erstellten 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 zu entfernen, bevor Sie Bilder komprimieren oder die Einbettung von Schriftarten aufheben. Andernfalls wird viel zusätzlicher Aufwand betrieben, um Kopien derselben Bilder oder Schriftarten 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 konvertierte Bilder deduplizieren.

Komprimieren Sie Bilder in PDF

Die Optimierung von PDF-Bildern ist normalerweise die effektivste Komprimierungsmethode für Dokumente mit Rasterbildern.

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

Ein Beispiel finden Sie im Beispiel Bilder in PDF-Dokument in C# und VB.NET optimieren auf GitHub.

Untermenge der Schriftarten

In PDF-Dokumenten sind normalerweise Schriftarten eingebettet, die zum Zeichnen von Text verwendet werden. Eingebettete Schriftarten enthalten häufig Informationen zu allen unterstützten Glyphen. Durch das Entfernen nicht verwendeter Glyphen in einem PDF-Dokument kann die Größe der Ausgabedatei erheblich reduziert werden.

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

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

    pdf.Save("compressed.pdf");
}

Die Teilmenge wirkt sich nicht auf Schriftarten aus, die in variablen Textsteuerelementen wie Textfeldern oder Kombinationsfeldern verwendet werden.

Metadaten entfernen

PDF-Dokumente können unkomprimierte XMP-Metadaten mit Informationen zum Autor, Schlüsselwörtern, Erstellungszeit usw. enthalten. Die Metadaten haben keinen Einfluss auf sichtbare Inhalte des PDF-Dokuments.

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 ihren logischen Aufbau enthalten. Die Informationen werden verwendet, um:

  • Erstellen Sie getaggte PDF-Dokumente
  • PDF-Dokument für unterstützende Geräte zugänglich machen

Das Entfernen solcher Informationen trägt dazu bei, die Größe der PDF-Datei zu reduzieren. Das PDF wird jedoch nicht mehr mit Tags versehen und ist für Hilfsgeräte nicht mehr 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");
}

Entfernen Sie ungenutzte Ressourcen aus PDF

PDF-Seiten und XObjects können auf mehr Schriftarten, Bilder oder Muster verweisen, als sie verwenden. Sie können die Methode PdfDocument.RemoveUnusedResources verwenden, um ungenutzte Ressourcen aus PDF zu entfernen. Hier ist das C#-Beispiel:

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

    pdf.Save("compressed.pdf");
}

Entfernen Sie private Bewerbungsdaten aus PDF

Mit Adobe-Software erstellte PDF-Dokumente können private Anwendungsdaten enthalten. Solche Anwendungsdaten werden in seitenteiligen Wörterbüchern gespeichert.

Dieses Beispiel zeigt, wie Sie PDF-Dateien in C# bereinigen und komprimieren, indem Sie Seitenteilwörterbücher entfernen:

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

    pdf.Save("compressed.pdf");
}

Reduzieren Sie PDF-Formularfelder und Anmerkungen

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

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

    pdf.Save("compressed.pdf");
}

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

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

Einbettung von Schriftarten aufheben

Das Einbetten von PDF-Schriftarten ist bei benutzerdefinierten oder seltenen Schriftarten durchaus sinnvoll. Gleichzeitig können die weit verbreiteten Schriftarten wie Arial oder Verdana die PDF-Dateigröße ohne triftigen Grund erhöhen. Sie können die Einbettung beliebter Schriftarten, die auf Ihren Zielplattformen verfügbar sind, aufheben. Beispiel-C#-Code:

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

    pdf.Save("compressed.pdf");
}

/// <summary>
/// Diese Methode hebt die Einbettung aller Schriftarten auf, die:
/// * im Betriebssystem installiert
/// * oder sein Name wird in die Liste „immer unembed“ aufgenommen
/// * und sein Name ist nicht in der „Immer behalten“-Liste enthalten.
/// </summary>
private static void unembedFonts(PdfDocument pdf)
{
    string[] alwaysUnembedList = new string[] { "MyriadPro-Regular" };
    string[] alwaysKeepList = new string[] { "ImportantFontName", "AnotherImportantFontName" };

    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;
            byte[] fontBytes = loader.Load(font.Name, font.Bold, font.Italic);
            if (fontBytes != null)
            {
                font.Unembed();
                continue;
            }
        }
        
        if (Array.Exists(alwaysUnembedList, name => font.Name == name))
            font.Unembed();
    }
}

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

Bitte testen Sie PDF-Dokumente immer mit nicht eingebetteten Schriftarten in Ihren Zielbetriebssystemen (Windows, Linux, macOS, iOS, Android) und PDF-Viewern (Adobe, Foxit usw.).

Andere Methoden zum Reduzieren der PDF-Größe

Es gibt viele oben erwähnte Optimierungsmethoden. Allerdings können Sie PDF-Dokumente noch stärker komprimieren, indem Sie unwichtige Inhalte entfernen. Mit Docotic.Pdf können Sie diese Objekte aus PDF-Dokumenten löschen:

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

Sie können auch Text, Bilder und Vektorgrafiken von PDF-Seiten entfernen. Auch eine Textreduzierung 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 effektive Optimierungsmöglichkeiten.

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

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