Diese Seite kann automatisch übersetzten Text enthalten.

PDF-Dokumente in C# und VB.NET aufteilen

Docotic.Pdf-Bibliothek ermöglicht es Ihnen, ein PDF-Dokument in eine Gruppe kleinerer Dateien aufzuteilen. Sie können einzelne Seiten oder Seitenbereiche extrahieren. Sie können PDF-Dokumente auch nach bestimmten Kriterien aufteilen.

PDF-Dokumente aufteilen

Docotic.Pdf wird mit kostenpflichtigen Lizenzen geliefert, ist aber auch in bestimmten Fällen kostenlos. Sie können die Bibliothek herunterladen und einen Testlizenzschlüssel auf der Docotic.Pdf-Downloadseite erhalten.

Docotic.Pdf-Bibliothek 9.4.17467-dev Regressionstests 14,760 bestanden NuGet-Downloads insgesamt 4,415,970

Grundlagen der PDF-Aufteilung

Mit den Methoden PdfDocument.CopyPages können Sie Seiten aus PdfDocument-Objekten kopieren. Dies ist die primäre Docotic.Pdf-API zum Aufteilen von PDF-Dokumenten.

PDF in einzelne Seiten aufteilen

Der folgende C#-Code speichert jede PDF-Seite in einer separaten Datei:

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

for (int i = 0; i < pdf.PageCount; ++i)
{
    using PdfDocument copy = pdf.CopyPages(i, 1);
    copy.RemoveUnusedResources();
    copy.Save(i + ".pdf");
}

Die Methode PdfDocument.RemoveUnusedResources hilft, die Anzahl der Ausgabedateien zu reduzieren. Sie ist nützlich, wenn kopierte Seiten auf nicht verwendete Schriftarten, Bilder oder Muster verweisen. Weitere Informationen zur PDF-Komprimierung finden Sie im Abschnitt Ausgabedateien optimieren.

Auf Seitengruppen aufteilen

Die Methode CopyPages unterstützt das Kopieren beliebiger Seitenbereiche. Dieser Codeausschnitt zeigt, wie die dritte und die erste Seite extrahiert werden:

using var pdf = new PdfDocument(@"source.pdf");

using PdfDocument copy = pdf.CopyPages(new int[] { 2, 0 });
copy.RemoveUnusedResources();
copy.Save("result.pdf");

Die Reihenfolge der Seitenindizes ist wichtig. Sie definiert die Reihenfolge der Seiten im resultierenden Dokument.

Probieren Sie das Codebeispiel Seiten kopieren von GitHub aus.

PDF nach Bedingung aufteilen

Sie können Dokumente basierend auf Inhalt aufteilen. Das ist hilfreich, wenn Sie nicht im Voraus wissen, welche Seiten extrahiert werden sollen. Extrahieren Sie beispielsweise Seiten mit bestimmtem Text:

string textToFind = ".NET Standard";
using (var pdf = new PdfDocument("C# in depth.pdf"))
{
    var pageIndexes = new List<int>();
    for (int i = 0; i < pdf.Pages.Count; i++)
    {
        string pageText = pdf.Pages[i].GetText();
        if (pageText.Contains(textToFind, StringComparison.CurrentCultureIgnoreCase))
            pageIndexes.Add(i);
    }

    if (pageIndexes.Count > 0)
    {
        using var copy = pdf.CopyPages(pageIndexes.ToArray());
        copy.RemoveUnusedResources();
        copy.Save(textToFind + ".pdf");
    }
}

Weitere Informationen zur Textextraktion finden Sie im Artikel Extrahieren Sie Text aus PDF in C# und VB.NET.

Erweiterte PDF-Aufteilung

Seiten extrahieren

Die CopyPages-Methoden ändern das zugehörige PdfDocument-Objekt nicht. Es gibt auch die PdfDocument.ExtractPages-Methoden. Mit ihnen können Sie extrahierte Seiten aus dem Dokument entfernen:

using var pdf = new PdfDocument(@"source.pdf");

using PdfDocument copy = pdf.ExtractPages(0, 3);
copy.Save("extracted.pdf");

pdf.Save("original.pdf");

Sie können das entsprechende Codebeispiel Seiten extrahieren von GitHub ausprobieren.

Seiten entfernen und neu anordnen

Die Methoden CopyPages und ExtractPages erzeugen ein neues Dokument mit ausgewählten Seiten. Eine Alternative besteht darin, Seiten aus einem aktuellen Dokument zu entfernen:

using var pdf = new PdfDocument(@"source.pdf");
pdf.RemovePages(0, 3);
pdf.Save("remaining.pdf")

Sie können Seiten auch nach dem Entfernen neu anordnen. Sehen Sie sich die zugehörigen Codebeispiele an:

Ausgabedateien optimieren

Früher habe ich die Methode RemoveUnusedResources verwendet, um die resultierenden Dateien zu optimieren. Docotic.Pdf bietet weitere Optionen für die PDF-Komprimierung. Sie können beispielsweise Strukturinformationen entfernen oder Bilder komprimieren. Lesen Sie den Artikel Komprimieren Sie PDF-Dokumente in C# und VB.NET für weitere Informationen. Sie können auch das Codebeispiel PDF-Dokument in .NET komprimieren von GitHub ausprobieren.

PDF-Aufteilung wird manchmal verwendet, um Seitendateien kleiner als eine bestimmte Grenze zu machen. In solchen Fällen können Sie die resultierende Größe messen und die Datei bei Bedarf komprimieren. Beispielcode:

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

using PdfDocument copy = pdf.CopyPages(0, 1);
copy.RemoveUnusedResources();

using var ms = new MemoryStream();
copy.Save(ms);

byte limit = 1024 * 1024;
if (ms.Length > limit)
{
    compress(copy);
    copy.Save("result.pdf");
}

Beachten Sie, dass es möglicherweise unmöglich ist, eine PDF-Datei unter einen bestimmten Grenzwert zu komprimieren. Die Ergebnisse hängen vom Dateiinhalt und vom Grenzwert ab.

Seiteninhalt extrahieren

Es ist auch möglich, Seiteninhalte beim Aufteilen zu ändern. Sie können beispielsweise extrahierte Seiten skalieren, bevor Sie sie in einer PDF-Zusammenlegung verwenden. Probieren Sie das zugehörige Beispielprojekt XObject aus Seite erstellen von GitHub aus.

Oder Sie können Inhalte auf extrahierten Seiten entfernen oder ersetzen. Sehen Sie sich das Codebeispiel Text, Pfade und Bilder kopieren an, das zeigt, wie PDF-Seitenobjekte kopiert werden.

PDF in Bilder aufteilen

Docotic.Pdf ermöglicht Ihnen auch, PDF-Dokumente in Seitenbilder aufzuteilen. Lesen Sie den Artikel Konvertieren Sie PDF in ein Bild in C# und VB.NET für weitere Einzelheiten.

In parallele Threads aufteilen

Sie möchten die PDF-Aufteilung für große Dokumente vielleicht parallelisieren. Die PdfDocument-Klasse ist nicht threadsicher. Es ist jedoch möglich, in jedem Thread separate PdfDocument-Objekte zu verwenden:

string fileName = "source.pdf";
using var temp = new PdfDocument(fileName);
int pageCount = temp.PageCount;

Parallel.For(0, pageCount, i =>
{
    using var pdf = new PdfDocument(fileName);
    using var copy = pdf.CopyPages(i, 1);
    copy.RemoveUnusedResources();
    copy.Save($"split_{i}.pdf");
});

Beachten Sie, dass der Single-Thread-Code normalerweise schneller ist. Bei einer Multi-Thread-Lösung entsteht ein Mehraufwand im Zusammenhang mit der Analyse zusätzlicher PdfDocument-Objekte. Verwenden Sie die Single-Thread-Version, es sei denn, Tests beweisen, dass ein paralleler Code schneller ist.