PDF mit iText in Java erzeugen (AcroForm, PdfStamper) und Table hinzufügen

ThirdKeeper

Mitglied
Hallo zusammen,

bin ziemlich :mad: :confused:!

Versuche nun seid geraumer Zeit ein PDF das mittels Acrobat 9 Pro als Vorlage erzeugt wurde mit Daten zu füllen.

Dazu öffne ich die Vorlage mit iText:
Code:
...
PdfReader reader = new PdfReader("vorlagen/default.pdf");
FileOutputStream out = new FileOutputStream
     ("Dokumente/Doc"+getModel().getId()+".pdf");

PdfStamper stamper = new PdfStamper(reader, out);
...
Solch eine Vorlage besitzt ja eine sogenannte AcroForm welche wiederum aus
AcroFields besteht. Die Felder fülle ich mit iText z.B. so:
Code:
...
AcroFields form = stamper.getAcroFields();
form.setField("author", getModel().getAuthor());
...

bis hier hin alles super.

Das Problem!

In die Mitte des Dokuments möchte ich noch eine dynamisch erzeugte Tabelle einfügen
welche man leider nicht als AcroField in der Vorlage definieren kann
(erst recht nicht, weil sie dynamisch ist).

Nun kann ich mit iText leider nicht einfach eine PdfPTable in das Document adden!?
Funktioniert das überhaupt?

Falls ja, währe ich für einen kleine Codeschnipsel oder überhaupt einen Lösungsansatz
sehr dankbar(!) :)
 
Keiner dabei der sich mit iText auskennt?

Ich möchte doch nur wissen wie einem PdfStamper oder einem PdfContentByte, Elemnte wie z.B. Chunk oder PdfPTable positioniert hinzugefügt werden können.
 
So könnte eine mögl. Lösung aussehen:

Code:
...
private void setPreText(PdfContentByte cb) 
throws DocumentException {
   cb.setTextMatrix(getPagePosX(PAGE_BORDER_LEFT_CM),
      getInvertPagePosY(10.5f));
   PdfPTable table = new PdfPTable(3);
   table.addCell(new Phrase("One"));
   table.addCell(new Phrase("Two"));
   table.addCell(new Phrase("Three"));
   table.writeSelectedRows(0, -1, getPagePosX(PAGE_BORDER_LEFT_CM),
      getInvertPagePosY(10.5f), cb);
}...

Problem es wird eine exception geworfen: :confused:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: The table width must be greater than zero.
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
 
So, da hab ich es endlich geschafft!
Hier für alle die ein ähnliches Problem haben:

Code:
...
PdfPTable table = new PdfPTable(3);
table.setTotalWidth(200);
table.addCell(new Phrase("One"));
table.addCell(new Phrase("Two"));
table.addCell(new Phrase("Three"));

PdfContentByte cb = getStamper().getOverContent(1);   // 1 = erste Seite
table.writeSelectedRows(0, -1,      // 0 = ab Zeile 1; -1 = bis letzte Zeile
      getPagePosX(PAGE_BORDER_LEFT_CM),    // X-Start-Punkt
      getInvertPagePosY(10.5f),   //Y-Start-Punkt
      cb);
...
 
Zuletzt bearbeitet:
Zurück