Laden...

PDF-Formularfelder mit Werten befüllen

Erstellt von Zylko03 vor einem Jahr Letzter Beitrag vor einem Jahr 684 Views
Z
Zylko03 Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr
PDF-Formularfelder mit Werten befüllen

Hi, ich arbeite gerade an einem Programm, dass Daten in einem PDF anzeigen soll. Habe dazu Formularfelder im PDF verwendet.
Ich nutze iTextSharp zum Lesen und bearbeiten des Files.
Wollte das schnell anhand des unteren Beispielcodes ausprobieren aber bekomme die Fehlermeldung, dass auf eine geschlossene Datei nicht zugegriffen werden kann.
Aber soweit ich den Code verstehe sollte das PDF doch vom Programm geöffnet worden sein oder nicht?



            string pdfFormPath = @"D:/Ort/PDF-File.pdf";
            string filledPdfPath = @"D:\Ort2\PDF-gefüllt.pdf";

            // Daten, die in das Formularfeld eingefügt werden sollen
            Dictionary<string, string> fieldValues = new Dictionary<string, string>
            {
                { "Formfeld1", "Test1" },
                { "Formfeld2", "Test2" },
                { "Formfeld3", "Test3" }
            };

            File.Copy(pdfFormPath, filledPdfPath, true);

            // Öffnet das ausgefüllte PDF zum Schreiben
            
            using (FileStream fs = new FileStream(filledPdfPath, FileMode.Open, FileAccess.ReadWrite))
            {
                
                PdfReader pdfReader = new PdfReader(fs);
                using (PdfStamper pdfStamper = new PdfStamper(pdfReader, fs))
                {
                   
                    foreach (KeyValuePair<string, string> fieldValue in fieldValues)
                    {
                        pdfStamper.AcroFields.SetField(fieldValue.Key, fieldValue.Value);
                    }

                    
                    pdfStamper.FormFlattening = true;
                    pdfStamper.Close();
                }
                pdfReader.Close();
            }

4.942 Beiträge seit 2008
vor einem Jahr

In welcher Zeile genau erhältst du denn die Exception?
Durch die using-Anweisung in Zeile 20 sollte pdfStamper.Close() überflüssig sein (aber es sollte trotzdem keine Exception geworfen werden).
Analog solltest du beim Zugriff auf PdfReader pdfReader besser ebenfalls eine using-Anweisung benutzen.

Z
Zylko03 Themenstarter:in
4 Beiträge seit 2022
vor einem Jahr

Die Exception bekomme ich in der Zeile 20: using (PdfStamper pdfStamper = new PdfStamper(pdfReader, fs))

4.942 Beiträge seit 2008
vor einem Jahr

Möchtest du gleichzeitig die PDF-Datei lesen und beschreiben? Das wird wohl so nicht direkt funktionieren - gib mal als 2. Parameter für PdfStamper einen eigenen Output-FileStream an, s.a. C# (CSharp) iTextSharp.text.pdf PdfStamper Beispiele.
Dann sollte auch das File.Copy überflüssig sein.