Hallo zusammen,
ich versuche nun schon einen ganzen Moment etliche PDF Formulare zusammen zu führen die eine ganze Menge an Feldern enthalten. Diese Felder sollen teilweise dynamisch durch Angabe von Informationen aus einem Webformular befüllt werden. Das stell mich vorerst nicht vor ein wirkliches Problem so lange ich setFormFlattening(false) bzw nicht auf true setze.
Ich möchte jedoch die Formularfelder nach der Erzeugung der PDF Datei noch editieren können.
Mein erster Ansatz war:
Ich verwende für die PDF Bearbeitung iText und bin da noch relativ frisch dabei.
Stampen einer PDF Datei sieht bei mir wie folgt aus:
Merge von zwei PDF Dateien führe ich wie folgt aus:
Ich hoffe es kann mir jemand helfen, sinnvoll PDF Formulare zu mergen und teilweise zu befüllen ohne das man FormFlattening auf true setzen muss.
Danke schonmal vorab!
Viele Grüße,
Christian
ich versuche nun schon einen ganzen Moment etliche PDF Formulare zusammen zu führen die eine ganze Menge an Feldern enthalten. Diese Felder sollen teilweise dynamisch durch Angabe von Informationen aus einem Webformular befüllt werden. Das stell mich vorerst nicht vor ein wirkliches Problem so lange ich setFormFlattening(false) bzw nicht auf true setze.
Ich möchte jedoch die Formularfelder nach der Erzeugung der PDF Datei noch editieren können.
Mein erster Ansatz war:
- alle benötigten PDF Formulare zusammenführen und danach stampen. Dies hatte jedoch zur Folge dass ich nicht mehr auf alle Felder zugreifen konnte da Felder in verschiedenen dokumenten die gleiche Feldbezeichnung haben, was auch so gewollt ist. Nach dem Merge gehen die Feldbezeichnungen verlorenund ich kann nicht mehr alle Felder stampen
- jedes PDF Formular erst stampen dann an ein gemeinsames Ergebnispdf anhängen. Die Folge von dieser Variante war, dass die Dokumente zusammengeführt wurden jedoch der Inhalt der Formularfelder wurde nicht mit kopiert.
Ich verwende für die PDF Bearbeitung iText und bin da noch relativ frisch dabei.
Stampen einer PDF Datei sieht bei mir wie folgt aus:
Java:
private ByteArrayOutputStream stamp(PdfReader reader, Map paramMap) throws IOException, DocumentException{
ByteArrayOutputStream pdf = new ByteArrayOutputStream();
PdfStamper pdfStamper = new PdfStamper(reader, pdf);
AcroFields fields = pdfStamper.getAcroFields();
Map fieldMap = fields.getFields();
Iterator it = fieldMap.keySet().iterator();
while (it.hasNext()) {
String key = (String)it.next();
if (paramMap.containsKey(key)){
fields.setField(key, paramMap.get(key).toString());
}
}
//FormFlattening ausgeschaltet lassen
//pdfStamper.setFormFlattening(true);
pdfStamper.close();
return pdf;
}
Merge von zwei PDF Dateien führe ich wie folgt aus:
Java:
private void merge(ByteArrayOutputStream pdfOut, PdfReader pdfToMerge) throws IOException, DocumentException{
PdfReader existingPdf = null;
if (pdfOut != null && pdfOut.size() > 0) {
//throws IOException
existingPdf = new PdfReader(pdfOut.toByteArray());
}
Document document = null;
PdfSmartCopy copy = null;
// Erzeugung eins Documents als Basis fuer die Zusammenfuehrung der PDF Dokumente
if (existingPdf != null) {
document = new Document(existingPdf.getPageSizeWithRotation(1));
} else {
document = new Document(pdfToMerge.getPageSizeWithRotation(1));
}
//writer erzeugen um in das document zu schreiben
copy = new PdfSmartCopy(document, pdfOut); // throws DocumentException
copy.setPdfVersion(PdfWriter.VERSION_1_2);
document.open();
//existierendes PDF einlesen wenn es nicht leer ist
if (existingPdf != null) {
for (int i = 0; i < existingPdf.getNumberOfPages();) {
// throws DocumentException
copy.addPage(copy.getImportedPage(existingPdf, ++i));
}
}
int pageCountPortrait = pdfToMerge.getNumberOfPages();
//zusammenfuehren der beiden PDF Dokumente
for (int i = 0; i < pageCountPortrait;) {
// throws DocumentException
copy.addPage(copy.getImportedPage(pdfToMerge, ++i));
}
document.close();
}
Ich hoffe es kann mir jemand helfen, sinnvoll PDF Formulare zu mergen und teilweise zu befüllen ohne das man FormFlattening auf true setzen muss.
Danke schonmal vorab!
Viele Grüße,
Christian
Zuletzt bearbeitet: