Wie aktualisiere ich ein PDF, ohne ein neues PDF zu erstellen?

Ich muss ein Wort in einem vorhandenen PDF AcroField durch ein anderes Wort ersetzen. Ich benutze PDFStamper von iTEXTSHARP, um das gleiche zu tun und es funktioniert gut. Aber es ist notwendig, ein neues PDF zu erstellen, und ich möchte, dass sich die Änderung im vorhandenen PDF selbst widerspiegelt. Wenn ich den Zieldateinamen gleich dem ursprünglichen Dateinamen setze, wird keine Änderung reflektiert. Ich bin neu bei iTextSharp, gibt es irgendetwas, was ich falsch mache? Bitte helfen Sie mir. Ich stelle den Code zur Verfügung, den ich verwende

private void ListFieldNames(string s) { try { string pdfTemplate = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf"; string newFile = @"z:\TEMP\PDF\PassportApplicationForm_Main_English_V1.0.pdf"; PdfReader pdfReader = new PdfReader(pdfTemplate); for (int page = 1; page <= pdfReader.NumberOfPages; page++) { PdfReader reader = new PdfReader((string)pdfTemplate); using (PdfStamper stamper = new PdfStamper(reader, new FileStream(newFile, FileMode.Create, FileAccess.ReadWrite))) { AcroFields form = stamper.AcroFields; var fieldKeys = form.Fields.Keys; foreach (string fieldKey in fieldKeys) { //Replace Address Form field with my custom data if (fieldKey.Contains("Address")) { form.SetField(fieldKey, s); } } stamper.FormFlattening = true; stamper.Close(); } } } 

Wie in meinem Buch iText in Action dokumentiert, können Sie eine Datei nicht gleichzeitig lesen und schreiben. Stellen Sie sich vor, wie Word funktioniert: Sie können ein Word-Dokument nicht öffnen und direkt darauf schreiben. Word erstellt immer eine temporäre Datei, schreibt die Änderungen, ersetzt dann die ursprüngliche Datei und verwirft dann die temporäre Datei.

Sie können das auch tun:

  • lese die Originaldatei mit PdfReader ,
  • Erstellen Sie eine temporäre Datei für PdfStamper , und wenn Sie fertig sind,
  • Ersetzen Sie die ursprüngliche Datei durch die temporäre Datei.

Oder:

  • lese die Originaldatei in ein byte[] ,
  • Erstellen Sie PdfReader mit diesem byte[] und
  • Verwenden Sie den Pfad zur ursprünglichen Datei für PdfStamper .

Diese zweite Option ist gefährlicher, da Sie die ursprüngliche Datei verlieren, wenn Sie etwas tun, das eine Ausnahme in PdfStamper .