[Edit = gfoidl] Das Thema habe ich im Auftrag von KartenKrieger erstellt. [/Edit]
Hallo,
Ich möchte mit iTextSharp PDF´s erzeugen. Hierzu verwende ich (z.B.) ein einseitiges Template welches Formularfelder enthält. Aus den Daten sollen dann so viele Seiten entstehen wie nötig sind um diese darzustellen. Hierbei stelle ich vorher fest wann ich eine neue Seite brauche.
Zunächst habe ich nach Anleitung PdfCopyFields verwendet. Dann hatte ich zwar die Felder, aber nicht das Layout des Templates. Dann habe ich PdfCopy versucht, dann gab es nur auf der ersten Seite richtig befüllte Felder, die restlichen Seiten waren zwar da, die Felder jedoch nicht...
Hier meine ungelenken Versuche das Problem zu lösen:
gfoidl i.A. von Karsten
Hallo,
Ich möchte mit iTextSharp PDF´s erzeugen. Hierzu verwende ich (z.B.) ein einseitiges Template welches Formularfelder enthält. Aus den Daten sollen dann so viele Seiten entstehen wie nötig sind um diese darzustellen. Hierbei stelle ich vorher fest wann ich eine neue Seite brauche.
Zunächst habe ich nach Anleitung PdfCopyFields verwendet. Dann hatte ich zwar die Felder, aber nicht das Layout des Templates. Dann habe ich PdfCopy versucht, dann gab es nur auf der ersten Seite richtig befüllte Felder, die restlichen Seiten waren zwar da, die Felder jedoch nicht...
Hier meine ungelenken Versuche das Problem zu lösen:
Code:
//Mehrseitige Formulare, Template, MasterFile und Stamper! DataTable dt = ds.Tables[0]; //GLobale Daten DataTable df = ds.Tables[1]; //Seitendaten PdfReader pdfX = new PdfReader(TemplateFile); Document document = new Document(pdfX.GetPageSizeWithRotation(1)); Stream pFile = new FileStream(PrintFile, FileMode.Create); PdfCopy pdfcopy = new PdfCopy(document, pFile); document.Open(); PdfCopyFields pdfcopyfields = new PdfCopyFields(pFile); object[] ItemDataAllPages = dt.Rows[0].ItemArray; for (int k = 0; k < df.Rows.Count; k++) { PdfReader pdfT = new PdfReader(TemplateFile); PdfStamper pdfS = new PdfStamper(pdfT, new FileStream(PrintFile + ".tmp", FileMode.Create)); AcroFields pdfFields = pdfS.AcroFields; object[] ItemDataThisPage = df.Rows[k].ItemArray; for (int i = 0; i < dt.Columns.Count; i++) { try { pdfFields.SetField(dt.Columns[i].ColumnName.ToString(), (string)ItemDataAllPages[i]); } catch { } } for (int i = 0; i < df.Columns.Count; i++) { try { pdfFields.SetField(df.Columns[i].ColumnName.ToString().Replace("_Text",""), (string)ItemDataThisPage[i]); } catch { } } pdfS.Close(); PdfReader newPageReader = new PdfReader(PrintFile + ".tmp"); pdfcopy.AddPage(pdfS.GetImportedPage(newPageReader, 1)); pdfcopyfields.AddDocument(newPageReader); //foreach (DictionaryEntry field in newPageReader.AcroFields.Fields) //{ // pdfcopy.AcroForm.AddFormField((PdfFormField)field.Value); //} pdfT.Close(); } document.Close(); pdfcopy.Close();
Comment