Diese Seite kann automatisch übersetzten Text enthalten.

PDF in C# bearbeiten

Verwenden Sie Docotic.Pdf, um Ihre PDF-Dokumente zu bearbeiten. Es ist die PDF-Bearbeitungsbibliothek für C# und VB.NET, die leistungsstarke Funktionen mit einer intuitiven API kombiniert.

Docotic.Pdf-Bibliothek 9.5.17615-dev Regressionstests 14,813 bestanden NuGet-Downloads insgesamt 4,924,084
PDF-Editor-Symbol

Docotic.Pdf bietet zahlreiche Möglichkeiten zum Bearbeiten von PDF-Dokumenten. Hier sind einige der wichtigsten Funktionen der Bibliothek zum Bearbeiten von PDFs:

  • Mehrere PDFs zu einer zusammenfassen oder eine einzelne PDF in mehrere Dateien aufteilen.
  • PDF-Dateigröße reduzieren.
  • Seiten neu anordnen, löschen, drehen oder extrahieren.
  • PDF-Metadaten lesen, ändern oder löschen.
  • PDF mit digitalen Signaturen signieren.
  • Dokumente verschlüsseln oder Passwörter aus einer PDF entfernen.
  • Anmerkungen und Anhänge hinzufügen, bearbeiten oder entfernen.
  • AcroForms ausfüllen, Formularsteuerelemente hinzufügen oder entfernen.
  • Formularfelder und Anmerkungen verflachen, um sie zu einem Teil des PDF-Inhalts zu machen.
  • Text in der PDF hinzufügen, löschen oder ersetzen.
  • Bilder einfügen, ersetzen und ihre Größe ändern.
  • Wasserzeichen und Hintergründe hinzufügen.
  • Gescannte Dokumente in bearbeitbaren und durchsuchbaren Text umwandeln.

In den nächsten Abschnitten werde ich die PDF-Bearbeitungsfunktionen ausführlicher beschreiben. Die Abschnitte enthalten auch Codeausschnitte und Links zu relevanten Ressourcen.

PDFs zusammenführen und aufteilen

In diesem Abschnitt geht es um zwei Features mit gegensätzlichen Zielen.

PDF in C# und VB.NET aufteilen und zusammenführen

PDF zusammenführen

Wenn Sie PDF-Dateien konsolidieren, erstellen Sie ein einzelnes PDF-Dokument. Das zusammengeführte PDF enthält normalerweise zusammengehörige Informationen aus mehreren vorhandenen PDF-Dateien.

Hier ist ein Codeausschnitt, der zeigt, wie PDF-Dateien mit Docotic.Pdf kombiniert werden.

using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.Save("merged.pdf");

Der Code ist sehr einfach, da er den einfachsten Fall zeigt. Wir haben einen Artikel, der komplexere Zusammenführungsfälle beschreibt. Dort wird beispielsweise gezeigt, wie verschlüsselte Dokumente kombiniert werden.

PDF teilen

Beim Aufteilen werden ausgewählte Seiten aus der Original-PDF-Datei extrahiert, um eine oder mehrere neue PDF-Dateien zu erstellen. Dieser Vorgang ist nützlich, wenn Sie nur einen Teil eines Dokuments freigeben möchten.

Der folgende Codeausschnitt zeigt, wie aus jeder Seite einer PDF ein neues Dokument erstellt wird.

using var pdf = new PdfDocument("compound.pdf");
for (int i = 0; i < pdf.PageCount; ++i)
{
    using PdfDocument copy = pdf.CopyPages(i, 1);

    // Hilft, die Dateigröße zu reduzieren, wenn die kopierten Seiten
    // auf ungenutzte Ressourcen wie Schriftarten, Bilder oder Muster verweisen.
    copy.RemoveUnusedResources();
    copy.Save(i + ".pdf");
}

Lesen Sie im entsprechenden Artikel über andere Ansätze zur Implementierung eines PDF-Splitters.

PDF-Komprimierung

Beim Komprimieren einer PDF-Datei gibt es zwei Hauptansätze. Der erste besteht darin, nur Vorgänge anzuwenden, die den Inhalt der Datei nicht ändern, sondern nur ihre Form. Der zweite Ansatz umfasst auch Änderungen, die zu einem Verlust von Details oder der Qualität des Dokuments führen können, um eine bessere Komprimierung zu erreichen.

Verlustfreie PDF-Komprimierung

Standardmäßig speichert die Bibliothek PDF-Objekte so, dass sie weniger Bytes belegen. Dazu schließt sie nicht verwendete Objekte aus, schreibt Objekte ohne Formatierung und verwendet, wenn möglich, eine kürzere Form.

Um die Komprimierung weiter zu verbessern, erzeugt Docotic.Pdf auch Objektströme in den Ausgabe-PDFs. Dies ist eine weitere Form des Schreibens von Objekten mit der kompaktesten Darstellung. Die Objektströme werden mit dem Flate-Algorithmus komprimiert.

Mit Speicheroptionen können Sie die Art und Weise beeinflussen, wie die Bibliothek Objekte speichert.

Einige Dokumente enthalten doppelte Schriftarten, Bilder, Farbprofile und andere Objekte. Dies ist normalerweise bei inkrementell aktualisierten Dokumenten und Dateien der Fall, die durch Zusammenführen mehrerer Dokumente erstellt wurden. Die Deduplizierung dieser Objekte mithilfe der Methode PdfDocument.ReplaceDuplicateObjects kann die Ausgabegröße drastisch verringern.

Seiten eines Dokuments können auf ungenutzte Ressourcen verweisen. Zum Beispiel Bilder, die vorher auf der Seite sichtbar waren, es aber nicht mehr sind. Verwenden Sie die Methode PdfDocument.RemoveUnusedResources, um solche Ressourcen zu entfernen.

Alle diese Vorgänge im PDF-Format reduzieren die Dateigröße ohne Qualitätsverlust.

Verlustbehaftete Transformationen

Bei Dateien mit Bildern ist eine der effektivsten Möglichkeiten, die PDF-Größe zu verringern, das Ändern des Komprimierungsschemas der Bilder. Wenn Sie beispielsweise eine verlustbehaftete Komprimierung wie JPEG für die Bilder verwenden, wird die Größe reduziert. Als Nebeneffekt können Komprimierungsartefakte und Detailverluste auf den Bildern sichtbar sein.

Wenn die Bilder im PDF größer als nötig sind, können Sie sie verkleinern. Dadurch lässt sich eine noch bessere Komprimierung erzielen. Eine weitere Möglichkeit besteht darin, Bilder in Schwarzweiß (bitonal) umzuwandeln.

Sie können Formularfelder und Anmerkungen reduzieren, um Platz zu sparen. Dies ist sinnvoll, wenn Sie in Ihren Dokumenten keine bearbeitbaren Anmerkungen und Formularfelder mehr benötigen.

Schriftarten können in Dokumenten viel Platz einnehmen. Die Methode PdfDocument.RemoveUnusedFontGlyphs kann nicht verwendete Glyphen aus Schriftarten entfernen, um die Ausgabegröße zu optimieren. Dieser Vorgang wird auch als Font-Subsetting bezeichnet. Sie können sogar Schriftart-Bytes vollständig aus dem Dokument entfernen (Schriftart ausbetten). Dies kann sinnvoll sein, wenn das Dokument Bytes einer beliebten Schriftart wie Arial enthält.

Andere Transformationen entfernen Informationen direkt aus Dokumenten. Sie können Metadaten, Strukturinformationen und private Anwendungsdaten entfernen. Diese Daten sind nicht sichtbar, entfernen Sie sie aber nur, wenn sie für die Benutzer Ihrer Dokumente nicht wichtig sind.

Um mehr Details zu erfahren und einige Codebeispiele zu sehen, lesen Sie den Artikel So reduzieren Sie die PDF-Dateigröße.

Seiten in PDF neu anordnen

Es gibt genügend Gründe, die Seitenreihenfolge in einer PDF-Datei zu ändern. Beispielsweise möchten Sie möglicherweise verwandte Informationen zusammenfassen oder die Lesbarkeit des Dokuments verbessern, indem Sie einen logischen Dokumentfluss sicherstellen.

Seiten in PDF neu anordnen

Neben der Möglichkeit, Seiten zusammenzuführen und aufzuteilen, bietet Docotic.Pdf eine umfangreiche Reihe weiterer Methoden zum Neuanordnen von Seiten in PDF. Ich werde C#-Codeausschnitte und die Docotic.Pdf-API verwenden, um zu zeigen, wie PDF-Seiten organisiert werden.

Vollständige Testprojekte für Beispiele dieses Abschnitts finden Sie in der Gruppe Seiten und Navigation mit Beispielcodes. Ich verwende ten-pages.pdf in den Snippets. Dies ist ein triviales Testdokument mit einem Page N-Titel auf jeder Seite.

PDF-Seiten verschieben

Der folgende Codeausschnitt zeigt, wie Sie zusammenhängende Seitenbereiche verschieben. Der Code verschiebt die erste Hälfte der Seiten an das Ende des Dokuments.

using var pdf = new PdfDocument("ten-pages.pdf");

pdf.MovePages(0, 5, pdf.PageCount);

pdf.Save("continuous-move.pdf");

Es ist möglich, beliebige Seitensätze zu verschieben. Der folgende Code verschiebt ungerade Seiten an das Ende des Dokuments.

using var pdf = new PdfDocument("ten-pages.pdf");

int[] indexes = [0, 2, 4, 6, 8];
pdf.MovePages(indexes, pdf.PageCount);

pdf.Save("arbitrary-move.pdf");

Um nur eine Seite zu verschieben, verwenden Sie die Methode PdfDocument.MovePage.

PDF-Seiten austauschen

Um zwei Seiten auszutauschen, verwenden Sie den Code wie im folgenden Snippet.

using var pdf = new PdfDocument("ten-pages.pdf");

pdf.SwapPages(9, 0);
pdf.SwapPages(8, 1);

pdf.Save("swapped.pdf");

Die Methode PdfDocument.SwapPages akzeptiert Indizes der beiden Seiten, die die Position der jeweils anderen einnehmen sollen. Wenn die Anzahl der Seiten ungleich zwei ist, verwenden Sie eine der Methoden Seiten verschieben.

Seiten hinzufügen und einfügen

Jedes PdfDocument enthält mindestens eine Seite. Wenn Sie ein neues Dokument erstellen, fügt die Bibliothek implizit eine Seite hinzu.

So fügen Sie mithilfe der Docotic.Pdf-API eine leere Seite in PDF ein. Sie können Seiten an Positionen mit Indizes von 0 bis einschließlich PageCount einfügen.

using var pdf = new PdfDocument();

var newPage = pdf.InsertPage(0);
newPage.Canvas.DrawString("This is the new first page");

pdf.Save("two-pages.pdf");

Um eine leere Seite zu PDF hinzuzufügen, verwenden Sie die Methode PdfDocument.AddPage. Die Methode fügt am Ende des Dokuments eine neue Seite hinzu. Sie bewirkt dasselbe wie ein Aufruf von pdf.InsertPage(pdf.PageCount).

Um Seiten aus einem anderen Dokument hinzuzufügen oder einzufügen, verwenden Sie eine Kombination von Aufrufen, wie im Abschnitt PDF voranstellen beschrieben. Sie können die Kombination von Aufrufen verwenden, um einem PDF ein Deckblatt hinzuzufügen.

PDF-Seiten duplizieren

Mit der API der Bibliothek können Sie den Duplizierungsvorgang in zwei aufeinanderfolgenden Vorgängen ausführen. Der erste Vorgang ist der Vorgang zum Kopieren von Seiten. Siehe das Codebeispiel im Abschnitt PDF aufteilen.

Die zweite ist die Seiten einfügen-Operation. Verwenden Sie für diese Operation die Methode PdfDocument.Append. Dann verschieben Sie die angehängten Seiten an die gewünschte Position.

Seiten extrahieren

Der folgende Ausschnitt zeigt, wie Seiten aus einer PDF-Datei extrahiert werden. Er extrahiert die ersten drei Seiten aus dem Quelldokument.

using var pdf = new PdfDocument("ten-pages.pdf");

using (var extracted = pdf.ExtractPages(0, 3))
{
    extracted.RemoveUnusedResources();
    extracted.Save("three-pages.pdf");
}

pdf.Save("seven-pages.pdf");

Die Methode ExtractPages entfernt Seiten aus dem Dokument. Dadurch verbleiben im Quelldokument nur sieben Seiten. Die Bibliothek erlaubt es nicht, Seiten aus einem Dokument zu extrahieren, das nur eine Seite enthält.

Wir empfehlen, nicht verwendete Ressourcen mit den extrahierten Seiten aus dem Dokument zu entfernen.

Seite aus PDF entfernen

Schauen Sie sich den Ausschnitt an, der zeigt, wie man eine Seite in einem PDF-Dokument löscht. Er löscht tatsächlich zwei Seiten mithilfe unterschiedlicher Überladungen der Methode RemovePage. Die erste Überladung akzeptiert einen Seitenindex als Parameter. Die zweite Überladung akzeptiert ein Seitenobjekt.

using var pdf = new PdfDocument("ten-pages.pdf");
pdf.RemovePage(0);
pdf.RemovePage(pdf.Pages[0]);
pdf.Save("without-first-two-pages.pdf");

Um mehrere Seiten gleichzeitig zu entfernen, verwenden Sie die Methode PdfDocument.RemovePages. Diese Methode überlädt und arbeitet mit Arrays von Seitenindizes oder Seitenobjekten.

Digitale Signaturen

Docotic.Pdf implementiert viele Operationen für digitale Signaturen in PDF und kann Ihnen dabei helfen, die Vertrauenswürdigkeit und Rechtsgültigkeit Ihrer PDF-Dokumente aufrechtzuerhalten. Hier sind einige Beispiele dafür, was die Bibliothek leisten kann:

PDF mit Zertifikat signieren. Durch das Hinzufügen digitaler Signaturen in PDFs können Sie die Identität des Unterzeichners bestätigen und sicherstellen, dass niemand das Dokument nach der Unterzeichnung geändert hat.

Signatur zertifizieren. Um einer PDF-Datei zusätzliche Einschränkungen hinzuzufügen, können Sie sie mit einer Zertifizierungssignatur signieren. Sie können die PDF-Datei nach der Signierung vollständig sperren oder bestimmte Arten von Änderungen zulassen.

Signatur im PDF überprüfen. Überprüfen Sie die Gültigkeit einer digitalen Signatur, um sicherzustellen, dass der signierte Teil des Dokuments nicht geändert wurde.

Mehrere Signaturen zulassen. Verträge, Vereinbarungen und Formulare erfordern oft die Unterzeichnung eines einzelnen Dokuments durch mehrere Parteien. Um mehrere Signaturen in PDF-Dateien einzufügen, muss das Dokument inkrementell gespeichert werden.

Signaturzeitstempel einbetten. Es ist möglich, in den Signaturoptionen eine URL der Zeitstempelstelle und optional deren Anmeldeinformationen anzugeben. Die Bibliothek bettet den empfangenen Zeitstempel in die Signatur ein.

Zertifikat einbetten. Die Bibliothek bettet Signaturzertifikate automatisch in digitale Signaturen ein.

Die Seite „Digitale Signaturen“ enthält Beispielcodes und weitere Informationen zu den einzelnen Vorgängen.

PDF schützen

Es gibt drei Funktionen, mit denen Sie die PDF-Sicherheit gewährleisten können. Docotic.Pdf kann in beide Richtungen mit ihnen arbeiten: Die Bibliothek kann PDFs schützen und gesicherte PDFs entsperren.

PDF-Sicherheit

Passwortschutz

Mit dieser Funktion können Sie ein Kennwort festlegen, um den Zugriff auf die PDF-Datei einzuschränken. Je nach Kennworttyp ist zum Öffnen oder Ändern der PDF-Datei das richtige Kennwort erforderlich.

Es gibt zwei Arten von Passwörtern in PDFs:

  • Öffnungspasswort (Benutzerpasswort). Diese Art von Passwort ist zum Öffnen und Anzeigen des PDFs erforderlich. Ohne das richtige Passwort kann ein konformer PDF-Viewer das Dokument nicht öffnen.
  • Berechtigungspasswort (Besitzerpasswort). Dieses Passwort ist erforderlich, um Berechtigungen aus dem PDF zu entfernen. Das Öffnen eines PDFs mit dem Besitzerpasswort ermöglicht alle Aktionen, auch wenn Berechtigungen bestimmte Aktionen einschränken, wie z. B. Drucken, Kopieren oder Bearbeiten des PDFs.

Sie können beide Passwörter festlegen für dasselbe PDF-Dokument. Lesen Sie über PDF-Dateien entschlüsseln, um zu erfahren, wie Sie Passwörter aus PDF-Dokumenten entfernen.

Verschlüsselung

PDF-Verschlüsselung und PDF-Passwörter sorgen gemeinsam dafür, dass vertrauliche Informationen im PDF nur berechtigten Benutzern zugänglich sind. Nur Benutzer mit dem richtigen Entschlüsselungsschlüssel oder Passwort können den Inhalt anzeigen.

Docotic.Pdf kann PDF-Dateien mit den Algorithmen RC4 40-Bit, RC4 128-Bit, AES 128-Bit und AES 256-Bit-Verschlüsselung verschlüsseln.

Berechtigungen und Einschränkungen

Sie können verschiedene Berechtigungen für ein PDF festlegen, z. B. das Drucken einschränken, Text kopieren, das Dokument bearbeiten und mehr. Die Berechtigungen wirken sich nur auf das Erlebnis aus, wenn jemand das PDF mit dem Benutzerkennwort öffnet. Eventuelle Einschränkungen gelten nicht für diejenigen, die das PDF mit dem Besitzerkennwort öffnen.

Um Berechtigungen aus einer PDF-Datei zu entfernen, müssen Sie zuerst das PDF-Sicherheitskennwort entfernen. Lesen Sie mehr über wie man das macht mit C# und der Docotic.Pdf API.

Um zu erfahren, wie Sie zusätzlich zur PDF-Sicherheit auch die PDF-Integrität gewährleisten, lesen Sie den Abschnitt über digitale Signaturen.

Metadaten in PDF

PDF-Metadaten sind in eine PDF-Datei eingebettete Informationen, die Einzelheiten zum Dokument liefern. Es gibt zwei Hauptquellen für Metadaten: PDF-Dokumenteigenschaften und XMP-Metadaten.

Dokumenteigenschaften werden häufig auch als Dokumentinformationswörterbuch, Dateiinformationen, Metadatenfelder, Dokumentattribute und Dateiattribute bezeichnet.

XMP-Metadaten (Extensible Metadata Platform) sind im Grunde eine in ein PDF eingebettete XML-Datei. XMP verwendet ein flexibles Datenmodell, das beliebige Sätze von Metadateneigenschaften speichern kann. Diese Metadaten verwenden Namespaces, um verwandte Eigenschaften zu gruppieren. Einige gängige Namespaces sind XMP Core/XMP Basic und Dublin Core.

Docotic.Pdf unterstützt sowohl XMP-Metadaten als auch Dokumenteigenschaften vollständig. Bitte beachten Sie, dass der PDF 2.0-Standard die meisten Eigenschaften des Dokumentinformationswörterbuchs als veraltet markiert hat. Die einzigen Ausnahmen sind Erstellungsdatum und Änderungsdatum.

Vollständige Testprojekte zu den Beispielen dieses Abschnitts finden Sie in der Metadatengruppe der Beispielcodes.

Dokumenteigenschaften

Erfahren Sie, wie Sie die Dokumenteigenschaften mit Docotic.Pdf bearbeiten.

using var pdf = new PdfDocument("file.pdf");
pdf.Info.Author = "An example code";
pdf.Info.Subject = "Showing how to access and change document metadata";
pdf.Info.Title = "Custom title goes here";
pdf.Info.Keywords = "pdf Docotic.Pdf";

pdf.Save("updated-file.pdf");

Sie können den Wert für jede Eigenschaft ändern. Beachten Sie jedoch, dass die Bibliothek standardmäßig einige Eigenschaften automatisch aktualisiert, bevor die PDF-Datei gespeichert wird. Sie können dies in Speicheroptionen ändern.

Um alle in den Dokumenteigenschaften angegebenen Metadaten zu entfernen, verwenden Sie die Methode PdfInfo.Clear. Die Methode kann, wenn Sie möchten, auch nur benutzerdefinierte Eigenschaften entfernen.

XMP-Metadaten

Dieses Snippet zeigt, wie Eigenschaften der XMP-Metadaten in einem PDF-Dokument geändert werden.

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

pdf.Metadata.DublinCore.Creators = new XmpArray(XmpArrayType.Ordered);
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("me"));
pdf.Metadata.DublinCore.Creators.Values.Add(new XmpString("Docotic.Pdf"));
pdf.Metadata.DublinCore.Format = new XmpString("application/pdf");

pdf.Metadata.Pdf.Producer = new XmpString("me too!");

pdf.Save("updated-file.pdf");

Der Code ändert Eigenschaften in Dublin Core- und Adobe PDF-Schemata. Bitte beachten Sie, dass die Producer-Eigenschaft aufgrund der Standardspeicheroptionen überschrieben wird.

Sie können rohe XMP-Metadaten mit einer der XmpMetatada.Save-Methoden extrahieren. Die Methode erzeugt ein XML mit allen Eigenschaften.

Um alle XMP-Metadaten aus einem Dokument zu entfernen, verwenden Sie die Methode XmpMetadata.Unembed.

Metadaten synchronisieren

Es ist wünschenswert, sicherzustellen, dass sowohl XMP-Metadaten als auch Dokumentinfo-Eigenschaften die gleichen Werte für die entsprechenden Eigenschaften haben. Dies gilt insbesondere, wenn Sie beide Metadatenquellen in derselben Datei bearbeiten.

Verwenden Sie die Methode PdfDocument.SyncMetadata, um Werte in XMP-Metadaten und Dokumentinformationen zu synchronisieren. Wenn sich eine Eigenschaft in beiden Quellen geändert hat, überschreibt die Methode eine Quelle mit dem Wert aus der anderen Quelle. Lesen Sie die Dokumentation zur Methode für weitere Einzelheiten.

PDF-Lesezeichen

PDF-Dokumente können spezielle Verknüpfungen oder Links enthalten, mit denen Leser schnell zu bestimmten Abschnitten oder Seiten navigieren können. PDF-Gliederung ist ein anderer Name für Lesezeichen.

PDF-Gliederung

Viewer-Apps zeigen Lesezeichen normalerweise wie das Inhaltsverzeichnis in einem Buch an, allerdings interaktiv. Wenn der Leser auf ein Lesezeichen klickt, springt die Viewer-App zum angegebenen Teil des Dokuments. Ein ähnliches Verhalten kann mit Linkanmerkungen erreicht werden.

Hier ist ein C#-Codeausschnitt, der zeigt, wie man Lesezeichen zu PDF hinzufügt:

using var pdf = new PdfDocument("ten-pages.pdf");

var root = pdf.OutlineRoot;
root.AddChild("Fifth page", 4);
root.AddChild("Seventh page", pdf.Pages[6]);

pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("simple-bookmarks.pdf");

Die PDF-Gliederung kann Hauptlesezeichen und Unterlesezeichen enthalten, was die Strukturierung großer Dokumente erleichtert. So erstellen Sie Unterlesezeichen in PDF:

using var pdf = new PdfDocument("ten-pages.pdf");

var root = pdf.OutlineRoot;
var evenPages = root.AddChild("Even pages");

evenPages.AddChild("Second page", 1);
evenPages.AddChild("Fourth page", 3);

pdf.PageMode = PdfPageMode.UseOutlines;
pdf.Save("even-pages-bookmarks.pdf");

Sie können Lesezeichenelementen Schriftarten und Farben zuweisen. Sehen Sie sich das vollständige Beispiel zum Erstellen einer Gliederung mit Stilen an.

Um ein Lesezeichen aus einer PDF-Datei zu entfernen, verwenden Sie die Methoden RemoveChild oder RemoveChildAt. Sie können alle Lesezeichen entfernen, indem Sie die Methode RemoveAllChildren im Stammknoten aufrufen.

Dateianhänge

PDF-Anhänge sind externe Dateien, die in ein PDF-Dokument eingebettet sind. Diese Dateien werden auch häufig als eingebettete Dateien oder Dateianhänge bezeichnet. Sie können jede beliebige Datei anhängen: Bild, Audio-/Videodatei, eine andere PDF-Datei, Word-Dokument, Excel-Tabellen oder irgendetwas anderes.

Wenn Sie PDFs aneinanderhängen und eine kombinierte PDF-Datei erstellen möchten, lesen Sie den Artikel zum Zusammenführen von PDF-Dokumenten.

Hier ist der C#-Code, der zeigt, wie man mit Hilfe der Docotic.Pdf-API Anhänge zu PDF hinzufügt.

using var pdf = new PdfDocument();

var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.SharedAttachments.Add(excelFile);

pdf.Save("shared-attachment.pdf");

Der obige Code hat die Datei als freigegebenen Anhang hinzugefügt. Leser können die angehängte Datei im Bereich „Anhänge“ ihres Viewers finden.

Es ist auch möglich, PDF-Seiten Anhänge hinzuzufügen. Solche Anhänge sind wie alle anderen Anmerkungen im Seiteninhalt sichtbar.

using var pdf = new PdfDocument();

var page = pdf.Pages[0];
page.Canvas.DrawString(20, 100, "Here is this year's figures document:");

var bounds = PdfRectangle.FromLTRB(155, 100, 165, 110);
var excelFile = pdf.CreateFileAttachment("this-year-figures.xlsx");
pdf.Pages[0].AddFileAnnotation(bounds, excelFile);

pdf.Save("page-attachment.pdf");

Überprüfen Sie die Anhänge-Gruppe der Beispielcodes, um vollständige Testprojekte für die Beispiele dieses Abschnitts zu finden.

Um Anhänge aus PDF zu entfernen, müssen Sie sowohl freigegebene Anhänge als auch Seitenanmerkungen auflisten und die Elemente entfernen, die Sie nicht benötigen. Siehe das Beispiel für den Aufzählungscode unten. Um alle freigegebenen Anmerkungen zu entfernen, können Sie einen pdf.SharedAttachments.Clear()-Aufruf verwenden.

Sie müssen auch Sammlungen auflisten, um eingebettete Dateien aus PDF zu extrahieren. Hier ist ein Beispielcode:

using var pdf = new PdfDocument("file-with-attachments.pdf");

int i = 0;
foreach (var attachment in pdf.SharedAttachments)
{
    if (attachment?.Contents == null)
        continue;

    var fileName = attachment.Specification ?? $"attachment{i++}";
    attachment.Contents.Save(fileName);
}

foreach (var widget in pdf.GetWidgets())
{
    var attachment = (widget as PdfFileAttachmentAnnotation)?.File;
    if (attachment?.Contents == null)
        continue;

    var fileName = attachment.Specification ?? $"attachment{i++}";
    attachment.Contents.Save(fileName);
}

Seitenbeschriftungen

PDF-Seitenbeschriftungen sind benutzerdefinierte Namen oder Nummern, die Seiten in einem PDF-Dokument zugewiesen werden. Im Gegensatz zu Standardseitennummern können Seitenbeschriftungen eine Mischung aus Buchstaben, Zahlen und sogar römischen Ziffern enthalten. Andere Namen für Seitenbeschriftungen sind Seitenkennungen und Seitennamen.

So fügen Sie mit Docotic.Pdf Seitenbeschriftungen zu PDF-Dateien hinzu:

using var pdf = new PdfDocument("ten-pages.pdf");

pdf.PageLabels.AddRange(0, 3, PdfPageNumberingStyle.LowercaseRoman);
pdf.PageLabels.AddRange(4, PdfPageNumberingStyle.DecimalArabic, string.Empty, 5);
pdf.PageLabels.AddRange(7, PdfPageNumberingStyle.DecimalArabic, "Appendix page ", 1);

pdf.Save("page-labels.pdf");

Die ersten vier Seiten haben die Beschriftungen i, ii, iii und iv. Die nächsten drei Beschriftungen sind 5, 6 und 7. Die Beschriftungen der übrigen Seiten lauten Appendix page 1, Appendix page 2 und Appendix page 3.

OCR PDF

Einige PDF-Dokumente enthalten gescannte Seiten und erfordern eine optische Zeichenerkennung (OCR), bevor Sie Text daraus extrahieren können. Ein weiterer Anwendungsfall für OCR ist das Extrahieren von Text aus einer PDF-Datei, die eine benutzerdefinierte Glyph-zu-Unicode-Zuordnung verwendet.

OCR-gescanntes PDF zum Extrahieren von Text

Wir haben einen Blog-Beitrag, der zeigt, wie man Dokumente OCR-gescannt macht. Der Beitrag enthält ein nicht durchsuchbares PDF-Beispiel und zeigt, wie man Tesseract OCR, C#-Code und Docotic.Pdf verwendet, um Text in Nur-Bild-PDFs zu erkennen. Mithilfe von Docotic.Pdf können Sie gescannten PDF-Dateien auch eine OCR-Textebene hinzufügen.

Seiten bearbeiten

In diesem Abschnitt geht es um Änderungen an vorhandenen PDF-Seiten, wie:

  • wie man PDF-Seiten dreht
  • wie man die Seitengröße ändert
  • wie man Vektorgrafiken auf der Seitenfläche verwendet
  • wie man HTML-Inhalte hinzufügt

Lesen Sie über die Layout-API der Bibliothek, um zu erfahren, wie Sie PDF-Dokumente erstellen aus Bausteinen wie Kopf- und Fußzeilen, Tabellen, Bildern, Textabsätzen und dergleichen.

In den anderen Abschnitten finden Sie Informationen zu:

Seiten drehen

Im C#-Codeausschnitt erfahren Sie, wie Sie nur eine Seite in einer PDF-Datei drehen:

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

pdf.Pages[0].Rotation = PdfRotation.Rotate180;

pdf.Save("rotated.pdf");

Der Code dreht die erste Seite um 180 Grad. Sie können PDF-Seiten auch um 0, 90 und 270 Grad drehen.

Seitengröße ändern

Docotic.Pdf bietet mehr als eine Möglichkeit, die Seitengröße von PDFs zu ändern. Im einfachsten Fall können Sie die Eigenschaften Width und Height eines PdfPage-Objekts verwenden, um die gewünschte Größe anzugeben. Bei einem vorhandenen Dokument wird die Größe des Seiteninhalts nicht geändert. Und es werden keine Inhalte entfernt. Es werden lediglich alle Seiteninhalte ausgeblendet, die außerhalb des Rechtecks ​​der angegebenen Größe liegen.

Ein ähnlicher Ansatz ist das Zuschneiden von Seiten. Sie können die CropBox einer Seite mit C#-Code wie diesem ändern:

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

var page = pdf.Pages[0];
var cropBoxBefore = page.CropBox;
page.CropBox = new PdfBox(0, cropBoxBefore.Height - 256, 256, cropBoxBefore.Height);

pdf.Save("cropped.pdf");

Das Ändern des Zuschneidefelds ist die Möglichkeit, wenn Sie einen Teil der Seite als Bild speichern möchten.

Wenn das Ziel darin besteht, alle Inhalte auf einer Seite unterschiedlicher Größe sichtbar zu halten, verwenden Sie den Skalierungsansatz. Im folgenden Codeausschnitt erstelle ich ein XObject aus einer Seite. Das XObject ist wie ein Vektorbild. Sie können dasselbe Objekt auf mehreren Seiten zeichnen und es nach Bedarf skalieren und drehen.

Nachdem das XObject fertig ist, lösche ich den vorherigen Seiteninhalt, ändere die Seitengröße und zeichne dann das Objekt auf der Seite mit der geänderten Größe.

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

var page = pdf.Pages[0];
var pageXObject = pdf.CreateXObject(page);

page.Canvas.Clear();
page.Width /= 2;
page.Height /= 2;

page.Canvas.DrawXObject(pageXObject, 0, 0, page.Width, page.Height, 0);

pdf.Save("resized.pdf");

Vektorgrafiken

Die Docotic.Pdf-Bibliothek kann Vektorgrafiken wie Linien, Kurven und Formen zu PDF-Dokumenten hinzufügen. Sie können Grafikpfade aus Grafikobjekten erstellen. Anschließend können Sie die Pfade mit Farben aus verschiedenen Farbräumen füllen oder umranden.

Beispielcode für grafikbezogene Funktionen finden Sie in der Grafikgruppe der Beispielcodes.

Es ist auch möglich, Grafiken aus PDF zu extrahieren. Beginnen Sie mit dem Aufruf der Methode GetObjects und extrahieren Sie dann Informationen aus Objekten des Typs PdfPageObjectType.Path. Vergessen Sie nicht, dass XObjects auch verschachtelte Pfade enthalten können.

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

var options = new PdfObjectExtractionOptions();
var objects = pdf.Pages[0].GetObjects(options);
foreach (var obj in objects)
{
    if (obj.Type == PdfPageObjectType.Path)
    {
        var path = (PdfPath)obj;
        Console.WriteLine($"Found path {path}");
    }
    else if (obj.Type == PdfPageObjectType.XObject)
    {
        var paintedXObject = (PdfPaintedXObject)obj;
        var nestedObjects = paintedXObject.XObject.GetObjects(options);
        // ...
    }
}

HTML zu PDF-Seiten hinzufügen

Das Überlagern eines PDF-Dokuments mit HTML-Inhalten kann nützlich sein, um Ihren PDFs dynamische Elemente wie Diagramme oder Börsenkursticker hinzuzufügen.

Lesen Sie, wie Sie HTML in PDF einfügen, um weitere Einzelheiten zu erfahren und einen Beispielcode herunterzuladen.

PDF-Text bearbeiten

In diesem Abschnitt erfahren Sie, wie Sie den Text in einer PDF-Datei bearbeiten, die Textfarbe in einer PDF-Datei ändern und neuen Text hinzufügen.

PDF-Editor ändert Text

Wir haben einen Artikel zum Thema So extrahieren Sie Text aus einer PDF-Datei. Lesen Sie ihn, um weitere Informationen zu diesem Thema zu erhalten.

Text flattening ist auch mit Hilfe von Docotic.Pdf möglich.

Suchen und Ersetzen

Um Text in einer PDF-Datei zu ändern, müssen Sie den Bereich finden, der den Text enthält, und dann den Text in diesem Bereich entfernen. Der letzte Schritt besteht darin, den neuen Text in denselben Bereich des Dokuments einzufügen.

Das Durchsuchen von PDFs kann schwierig sein, da das Dokument intern Wörter in beliebiger Reihenfolge enthalten kann. Der Text kann auch gedreht werden. Glücklicherweise haben wir einen Beispielcode, der zeigt, wie man in einer PDF nach Wörtern oder Ausdrücken sucht.

Wenn Sie Koordinaten des zu entfernenden Textes haben, ist es an der Zeit, den enthaltenen Seiteninhalt zu bearbeiten. Die Bibliothek bietet Möglichkeiten zum Aufzählen und Kopieren von Seitenobjekten. So ist es möglich, beim Kopieren von Objekten einen Teil des Textes wegzulassen. Dadurch wird der Text im Wesentlichen entfernt. Der Code des Beispiels PDF-Seiteninhalt bearbeiten zeigt alle Details des Prozesses. Sie müssten die Methode ShouldRemoveText aktualisieren, um die gefundenen Koordinaten zu verwenden.

Lesen Sie den nächsten Abschnitt, um zu erfahren, wie Sie dem Dokument den neuen Text hinzufügen.

Wenn Sie Dokumente mit einem Platzhaltertext erstellen und den Platzhalter später durch einen anderen Text ersetzen, können Sie stattdessen Textfelder verwenden.

Die Idee besteht darin, dem Dokument ein schreibgeschütztes Textfeld ohne Rahmen hinzuzufügen und den Platzhaltertext darin einzufügen. Später können Sie das Dokument öffnen, das Textfeld anhand seines Namens finden und den Platzhalter durch einen einfachen Aufruf box.Text = "new text"; ersetzen. Reduzieren Sie das Textfeld nach dem Ersetzen, wenn Sie keine weiteren Änderungen wünschen.

Neuen Text hinzufügen

Um Dokumenten Text hinzuzufügen, verwenden Sie die Methoden DrawString und DrawText eines PdfCanvas-Objekts. Die Methoden verwenden die aktuelle Canvas-Schriftart. Die Schriftart muss Glyphen für alle Zeichen im Text enthalten. Verwenden Sie die Methode PdfFont.ContainsGlyphsForText, um zu überprüfen, ob die Schriftart diese Anforderung erfüllt.

var canvas = pdf.Pages[0].Canvas;
canvas.Font = pdf.AddFont("NSimSun")
    ?? throw new ArgumentException("Font not found");

canvas.DrawString(10, 50, "Olá. 你好. Hello. This is some new text");

Sie können Unicode-Text hinzufügen, der mit Type1-, TrueType- und OpenType-Schriftarten erstellt wurde. Die Bibliothek kann auf Ihrem System installierte Schriftarten, 14 integrierte Type1-Schriftarten oder eine gewünschte Schriftart aus einer Datei laden.

Textfarbe ändern

Um die Farbe von Text in PDF zu ändern, verwenden Sie denselben Ansatz wie beim Entfernen von Text. Sie müssten mindestens die Methode ReplaceColor im Beispielcode ändern.

Bilder

Docotic.Pdf bietet alles, was zum Bearbeiten von PDF-Bildern erforderlich ist. Nachfolgend finden Sie C#-Codeausschnitte für die gängigsten Vorgänge.

Die Bildergruppe mit Beispielcodes enthält vollständige Testprojekte für die Beispiele in diesem Abschnitt.

Bild zu PDF hinzufügen

Die Bibliothek kann Bilder in den Formaten GIF/TIFF/PNG/BMP/JPEG importieren. Sie können auch ein Bild aus einem System.Drawing.Image-Objekt hinzufügen.

var canvas = pdf.Pages[0].Canvas;
var image = pdf.AddImage("image.jpg")
    ?? throw new ArgumentException("Cannot add image");

canvas.DrawImage(image, 10, 50);

Sie können einen Drehwinkel und eine Ausgabegröße mithilfe von Überladungen der Methode DrawImage angeben. Um dasselbe Bild auf mehreren Seiten zu zeichnen, fügen Sie das Bild einmal hinzu und verwenden Sie dasselbe PdfImage-Objekt in mehreren Aufrufen der Methode DrawImage.

Bilder zu PDF zusammenführen

Hier ist der C#-Code, der zeigt, wie mehrere Bilder zu einer PDF-Datei kombiniert werden.

using var pdf = new PdfDocument();

var imagePaths = new string[] { "image.jpg", "another-image.png" };
foreach (var path in imagePaths)
{
    var image = pdf.AddImage(path)
        ?? throw new ArgumentException("Cannot add image");

    var page = pdf.AddPage();
    page.Width = image.Width;
    page.Height = image.Height;

    page.Canvas.DrawImage(image, 0, 0);
}

pdf.RemovePage(0);
pdf.Save("combined-images.pdf");

Der Code fügt dem PDF mehrere Bilder hinzu und ändert dabei die Seitengröße so, dass sie der entsprechenden Bildgröße entspricht. Bevor das Ergebnis gespeichert wird, entfernt der Code die erste implizit hinzugefügte leere Seite.

Extrahieren Sie PDF-Bilder

Wir haben Docotic.Pdf entwickelt, um Bilder aus PDF-Dateien zu extrahieren, ohne die Qualität der Bilder zu beeinträchtigen. Die Bibliothek ändert weder die Größe noch die Komprimierung der Bilder. Sie erhalten Bilder in derselben Qualität wie im PDF.

using var pdf = new PdfDocument("file-with-images.pdf");
int i = 0;
foreach (PdfImage image in pdf.GetImages())
{
    var path = image.Save($"image{i++}");
    Console.WriteLine($"Saved to {path}");
}

Entfernen und Ersetzen von Bildern

Verwenden Sie die Methode PdfPage.RemovePaintedImages, um alle oder bestimmte Bilder von einer PDF-Seite zu entfernen. Sie können Bilder nach Position, Größe, Transformation oder anderen Parametern filtern.

using var pdf = new PdfDocument("file-with-images.pdf");
pdf.Pages[0].RemovePaintedImages(
    image =>
    {
        return image.Size.Width > 100;
    }
);

pdf.RemoveUnusedResources();
pdf.Save("no-wide-images.pdf");

Der obige C#-Code zeigt, wie Bilder mithilfe von Docotic.Pdf entfernt werden. Ich empfehle, nicht verwendete Ressourcen zu entfernen, nachdem Sie Bilder geändert oder entfernt haben.

Verwenden Sie die Methode PdfImage.ReplaceWith, um alle Vorkommen des Bildes im PDF-Dokument zu ersetzen.

using var pdf = new PdfDocument("file-with-images.pdf");
var firstImage = pdf.GetImages(false).FirstOrDefault()
    ?? throw new ArgumentException("No images found");

firstImage.ReplaceWith("another-image.png");

pdf.RemoveUnusedResources();
pdf.Save("replaced-image.pdf");

Komprimierungsschema ändern

Docotic.Pdf bietet Methoden zum Ändern der Komprimierung von PDF-Bildern. Es ist möglich, die Bilder mit den Komprimierungsalgorithmen JPEG, CCITT Group 3 und 4 (Fax), JPEG 2000 und Zip/Deflate neu zu packen.

Abhängig von der ursprünglichen und der neuen Komprimierung kann die Änderung zu Detailverlusten oder Qualitätsverlusten im Bild führen. Verlustbehaftete Konvertierungen helfen jedoch normalerweise dabei, die Dokumentgröße zu reduzieren.

firstImage.RecompressWithJpeg2000(25);

Es gibt andere Methoden, um ein Bild neu zu packen. Überprüfen Sie die PdfImage-Methoden mit Namen, die mit RecompressWith beginnen. Sie können jede Komprimierung aus einem Bild mit der Uncompress-Methode entfernen.

Größe von Bildern ändern

Wenn einige Bilder in einem PDF-Dokument größer als nötig sind, kann die Bibliothek ihre Größe für Sie ändern oder verkleinern.

firstImage.Scale(0.5, PdfImageCompression.Jpeg2000, 25);

Der obige Code verkleinert das erste Bild in beide Richtungen um den Faktor zwei. Die Bibliothek verwendet für das resultierende Bild die JPEG 2000-Komprimierung.

Sie können eine der ResizeTo-Methoden verwenden, um genaue Werte für die resultierende Breite und Höhe anzugeben.

Durch die Größenänderung von Bildern lässt sich die PDF-Dateigröße normalerweise noch stärker reduzieren als durch eine Änderung der Komprimierung (siehe Abschnitt oben), allerdings handelt es sich dabei um einen verlustbehafteten Vorgang.

Wasserzeichen und Hintergründe

Wasserzeichen auf PDF

Das Anbringen von Wasserzeichen in PDFs umfasst die folgenden Schritte:

  • Erstellen Sie ein XObject, den Container für den Inhalt des Wasserzeichens
  • Füllen Sie das Objekt mit Text, Bildern und Vektorgrafiken
  • Stempeln Sie PDF-Seiten mit dem Objekt

Hier ist der C#-Code, der dem PDF das Wasserzeichen Confidential hinzufügt:

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

var watermark = pdf.CreateXObject();
watermark.DrawOnBackground = true;

var canvas = watermark.Canvas;
canvas.FontSize = 72;
canvas.Brush.Color = new PdfRgbColor(222, 35, 35);
canvas.Brush.Opacity = 45;
canvas.Pen.Color = canvas.Brush.Color;
canvas.Pen.Opacity = canvas.Brush.Opacity;
canvas.Pen.Width = 5;

var padding = 10;
var text = "CONFIDENTIAL";
canvas.DrawString(padding, padding, text);

var textSize = canvas.MeasureText(text);
var watermarkRect = new PdfRectangle(
    padding, padding, textSize.Width, textSize.Height);
canvas.DrawRoundedRectangle(watermarkRect, new PdfSize(padding, padding));

foreach (var page in pdf.Pages)
{
    page.Canvas.DrawXObject(
        watermark,
        (page.Width - watermarkRect.Width) / 2,
        (page.Height - watermarkRect.Height) / 2);
}

pdf.Save("watermarked.pdf");

Der Code legt die Pinsel- und Stifteigenschaften der Wasserzeichen-Leinwand fest. Der Pinsel wird zum Malen des Textes verwendet. Um die Textgröße zu ermitteln, misst der Code den Text. Dann zeichnet er ein Rechteck mit abgerundeten Ecken um den Text. Der Stift wird zum Zeichnen des Rechtecks ​​verwendet.

Nachdem der Wasserzeicheninhalt fertig ist, zeichnet der Code ihn in die Mitte jeder Seite.

PDF-Hintergründe sind Wasserzeichen sehr ähnlich. Zumindest können Sie sie auf fast dieselbe Weise erstellen. Um einen Hintergrund zu PDF hinzuzufügen, gehen Sie genauso vor wie im obigen Code, fügen Sie jedoch watermark.DrawOnBackground = true; nach dem CreateXObject-Aufruf hinzu. Bitte beachten Sie, dass undurchsichtige Inhalte wie Bilder den Hintergrund verdecken können.

Anmerkungen

Docotic.Pdf bietet eine umfangreiche API für Anmerkungen in PDF. Sie können Anmerkungen in PDF-Dokumenten erstellen, bearbeiten und entfernen. Es ist auch möglich, Anmerkungen zu reduzieren.

Um einen Text zu kommentieren, gibt es:

  • Haftnotizen oder Textanmerkungen. Siehe die Methode AddTextAnnotation der Klasse PdfPage.
  • Hervorhebungen. Siehe die Methode AddHighlightAnnotation.
  • Durchstreichungen. Siehe die Methode AddStrikeoutAnnotation.
  • Unterstreichungen. Siehe die Methoden AddJaggedUnderlineAnnotation und AddUnderlineAnnotation.

Verwenden Sie Links, um von einer Seite zur anderen oder zu einer externen Ressource zu springen. Sie können Tintenanmerkungen zum Freihandzeichnen auf einer PDF-Seite verwenden. Es gibt Schwärzungsanmerkungen für Teile, die aus dem Dokument entfernt werden sollen. Sie können auch Audio-, Video- oder 3D-Inhalte einbetten.

Text hervorheben

So markieren Sie Text in PDF-Dokumenten:

using var pdf = new PdfDocument();

var page = pdf.Pages[0];
var canvas = page.Canvas;
canvas.FontSize = 30;

var text = "Highlighted text.";
var position = new PdfPoint(10, 50);
canvas.DrawString(position, text);
canvas.DrawString(" Not highlighted.");

var size = canvas.MeasureText(text);
var bounds = new PdfRectangle(position, size);

var color = new PdfRgbColor(145, 209, 227);
var annotationText = "Please pay attention to this part.";
page.AddHighlightAnnotation(annotationText, bounds, color);

pdf.Save("highlighted.pdf");

Um auf eine bestimmte Seite im PDF-Dokument zu verlinken, verwenden Sie einen Code wie diesen:

using var pdf = new PdfDocument();
var secondPage = pdf.AddPage();
secondPage.Canvas.DrawString(10, 50, "Welcome to the second page.");

var firstPage = pdf.Pages[0];
var canvas = firstPage.Canvas;
var linkRect = new PdfRectangle(10, 50, 100, 60);
canvas.DrawRectangle(linkRect, PdfDrawMode.Stroke);

var options = new PdfTextDrawingOptions(linkRect)
{
    HorizontalAlignment = PdfTextAlign.Center,
    VerticalAlignment = PdfVerticalAlign.Center
};
canvas.DrawText("Go to 2nd page", options);

firstPage.AddLinkToPage(linkRect, 1);

pdf.Save("linked.pdf");

Im Code fungiert die Aktionsbereichsannotation als interner Hyperlink. Solche Bereiche können zu externen Ressourcen navigieren und auch nicht-navigationale Aktionen ausführen.

Anmerkungen entfernen

So entfernen Sie Anmerkungen aus PDF:

  1. Greifen Sie mithilfe der Eigenschaft PdfPage.Widgets oder der Methode PdfDocument.GetWidgets auf die Widget-Sammlung zu.
  2. Überprüfen Sie den Typ, die Eigenschaften oder entscheiden Sie anderweitig, welche Anmerkungen Sie nicht mehr benötigen.
  3. Entfernen Sie die Anmerkung mithilfe der Methode PdfDocument.RemoveWidget oder Methoden des Objekts PdfWidgetCollection.

Um Anhänge aus einer PDF-Datei zu entfernen, müssen Sie sowohl die Dateianmerkungen als auch die gemeinsamen Anhänge entfernen.

PDF redigieren

Als PDF-Redaktionsbibliothek bietet Docotic.Pdf Methoden zum dauerhaften Entfernen oder schnellen Schwärzen vertraulicher Informationen aus Ihren PDF-Dokumenten.

Schwärzen von Informationen in einem PDF

Text redigieren

So schwärzen Sie Text in PDF ohne das Redigieren-Tool, indem Sie nur C# und Docotic.Pdf verwenden.

int i = 0;
foreach (var page in pdf.Pages)
{
    foreach (var word in page.GetWords())
    {
        if (i % 3 == 0)
        {
            page.Canvas.AppendRectangle(word.Bounds);
            page.Canvas.FillPath(PdfFillMode.Winding);
        }

        i++;
    }
}

Der Code zeichnet über jedes dritte Wort in einem Dokument ein schwarzes Rechteck. Bitte beachten Sie, dass der Text hinter den Rechtecken im Dokument verbleibt und später extrahiert werden kann. Um den Text dauerhaft zu entfernen, verwenden Sie den Ansatz aus dem Abschnitt über Text ersetzen.

Bilder redigieren

Sie können auch schwarze Rechtecke verwenden, um Bilder abzudecken. Ein einfacherer Ansatz wäre jedoch, das Bild durch ein schwarzes 1 x 1 Pixel großes Bild zu ersetzen. Dadurch wird das redigierte Bild nicht nur optisch hervorgehoben, sondern auch die ursprünglichen Bilddaten werden entfernt.

Codebeispiele finden Sie im Abschnitt Entfernen und Ersetzen von Bildern. Ich empfehle außerdem, nach dem Ersetzen die Methode PdfDocument.ReplaceDuplicateObjects aufzurufen.

PDF-Formulare

Docotic.Pdf kann Acroforms (ein anderer Name für PDF-Formulare) mit allen Arten interaktiver Elemente wie Schaltflächen, Kontrollkästchen, Dropdown-Listen, Listenfeldern, Optionsfeldern und Textfeldern erstellen.

Normalerweise sind nur wenige Codezeilen erforderlich, um ein Formularfeld hinzuzufügen und einzurichten. Sie können beispielsweise editierbare Felder zu PDF hinzufügen, indem Sie einfach die Methode PdfPage.AddTextBox aufrufen. Die Beispielcodes in der Gruppe „Formulare und Anmerkungen“ bieten weitere Informationen zum Erstellen und Verwenden von Formularen.

So füllen Sie ein PDF-Formular aus

Verwenden Sie die Methode PdfDocument.GetControl, um ein PDF-Steuerelement anhand seines vollständigen oder teilweisen Namens zu finden. Eine Alternative besteht darin, Dokumentsteuerelemente mithilfe der Methode GetControls aufzulisten. In beiden Fällen müssen Sie das Steuerelement in den erwarteten Feldtyp umwandeln.

using var pdf = new PdfDocument(@"example-form.pdf");

if (pdf.GetControl("txt-name") is PdfTextBox nameTextBox)
    nameTextBox.Text = "Bit Miracle team";

if (pdf.GetControl("txt-email") is PdfTextBox emailTextBox)
    emailTextBox.Text = "support@bitmiracle.com";

if (pdf.GetControl("check-agree") is PdfCheckBox agreeCheckBox)
    agreeCheckBox.Checked = true;

pdf.Save("filled-form.pdf");

Der Code verwendet dieses PDF-Formularbeispiel. Im Code lege ich Werte für die beiden Textfelder fest und aktiviere das Kontrollkästchen.

Wenn Sie mit dem Ausfüllen eines Formulars fertig sind, können Sie alle Felder reduzieren.

Verwenden von JavaScript in Formularen

Sie können Aktionen hinzufügen, um Ereignisse zu steuern. Die Klasse PdfControl bietet Zugriff auf einen vordefinierten Satz von Ereignissen. Die Namen der Ereignisse beginnen mit On (z. B. OnMouseDown).

Hier ist ein Beispiel für die Verwendung von JavaScript für PDF-Formulare:

using var pdf = new PdfDocument(@"example-form.pdf");
foreach (var field in pdf.GetControls())
    field.OnChange = pdf.CreateJavaScriptAction($"app.alert('{field.Name} changed!',3)");

pdf.Save("javascript-events.pdf");

Formulardatenformat

Es gibt noch eine weitere Möglichkeit, PDF-Dateien elektronisch auszufüllen. Verwenden Sie die Funktion FDF zu PDF der Bibliothek, um PDF-Formulare automatisch aus einer Datenbank oder einer anderen Quelle auszufüllen.

using var pdf = new PdfDocument(@"example-form.pdf");
pdf.ImportFdf("form-data.fdf");
pdf.Save("auto-populated.pdf");

Der Code verwendet diese FDF-Datei, um alle Formularfelder auf einmal auszufüllen.

PDF reduzieren

In diesem Abschnitt erfahren Sie, wie Sie eine PDF-Datei reduzieren.

PDF-Verringerung

Wenn Sie eine PDF-Datei reduzieren, konvertieren Sie interaktive Elemente wie Formulare und Anmerkungen in statischen Inhalt, um weitere Bearbeitungen zu verhindern. Eine reduzierte PDF-Datei kann deutlich weniger Bytes umfassen und trotzdem gleich aussehen.

Formulare und Anmerkungen abflachen

Um ein ausfüllbares PDF zu reduzieren, verwenden Sie die Methode PdfDocument.FlattenControls. Diese Methode zeichnet alle Formularfelder und andere Steuerelemente auf der übergeordneten Seite und entfernt das Quellsteuerelement aus dem Dokument.

Wenn Sie ein PDF-Formular reduzieren, ist es sinnvoll, auch Anmerkungen zu reduzieren. Verwenden Sie die Methode PdfDocument.FlattenWidgets, um Steuerelemente und Anmerkungen gleichzeitig zu reduzieren.

Wenn Sie nur einige Steuerelemente und/oder Anmerkungen in ihre visuelle Darstellung konvertieren möchten, verwenden Sie die Methode PdfWidget.Flatten. Sie müssen zuerst das erforderliche Steuerelement oder die Anmerkung finden.

Text reduzieren

Mithilfe von Docotic.Pdf können Sie PDF-Text in Konturen umwandeln. Der übliche Grund hierfür ist die Erzielung einer Schriftartunabhängigkeit. Unabhängig davon, ob die Schriftarten installiert sind, wird der abgeflachte Text auf jedem Gerät gleich aussehen.

Sobald Sie Text in Konturen umgewandelt haben, können Sie ihn jedoch nicht mehr als Text bearbeiten. Außerdem konvertiert die Bibliothek während des Reduzierens den Text in Vektorgrafiken. Dies kann die Dateigröße erhöhen.

Um PDF-Text zu glätten, müssen Sie den Text als Vektorpfade extrahieren und auf eine neue oder dieselbe Seite kopieren. Hierfür gibt es einen Beispielcode.

Speicheroptionen

In den obigen Codeausschnitten habe ich die Methode PdfDocument.Save ohne zusätzliche Argumente verwendet. Die Bibliothek verwendet in solchen Fällen die Standardspeicheroptionen. Wir haben die Standardeinstellungen so ausgewählt, dass sie im Normalfall perfekt funktionieren.

Dennoch gibt es Fälle, in denen Sie die Standardoptionen überschreiben müssen. Erstellen Sie dazu ein PdfSaveOptions-Objekt, richten Sie die Optionen ein und stellen Sie sie einer der Speichermethoden zur Verfügung. Im Folgenden werde ich diese Fälle beschreiben.

Um PDF mit einem Passwort oder einem Zertifikat zu schützen, erstellen Sie einen Verschlüsselungshandler und legen Sie ihn auf die Eigenschaft EncryptionHandler fest.

Wenn Sie dieselbe PDF-Datei mehrmals signieren möchten, aktivieren Sie den inkrementellen Aktualisierungsmodus, indem Sie die Eigenschaft WriteIncrementally auf true setzen. Machen Sie dasselbe, wenn Sie eine zuvor signierte Datei mit neuen Anmerkungen oder Formulardaten speichern.

Setzen Sie die Eigenschaft Linearize auf true, um eine linearisierte (oder für Fast Web View optimierte) PDF-Datei zu erstellen. Viewer, die diese Optimierung erkennen, können solche Dateien schneller anzeigen.

Um Änderungen an einigen der Metadatenfelder zum Zeitpunkt der Speicherung zu verhindern, setzen Sie die Eigenschaften UpdateProducer und UpdateModifiedDate auf false.