B
ben2000xx
Gast
Hi
ich möchte ein PDF Formular ausfüllen, ein weiteres PDF anhängen und das PDF verschlüsseln.
Dazu habe ich mir das iText Paket runtergeladen und die Beispiele gecheckt. Klappt alles Wunderbar.
Nur habe ich dann 3 Outputdateien der jeweiligen Einzelschritte. Schön wäre es die Streams weiterzureichen um nur
eine Output Datei zu erstellen. Meine Idee war das ganze mit dem PipedStream zu handeln, jedoch bekommen ich den bekannten Freeze wenn der Stream wohl leer ist.
Nun meine frage, habe ich hier einen Denkfehler, da das ganze Sequenziell abläuft und nicht auf Threads verteilt ist?
Hängt das funktionierende Lesen des PipedStream von den Klassen und Methoden in iText ab? Habe bisher nicht mit PipedStreams gearbeitet.
Danke schon mal für die Antworten. Hier der Code. Auskommentiert ist die Variante mit den drei Outputdateien.
Ich hatte auch versucht mit dem Stream.close() einen Effekt zu erzielen
ich möchte ein PDF Formular ausfüllen, ein weiteres PDF anhängen und das PDF verschlüsseln.
Dazu habe ich mir das iText Paket runtergeladen und die Beispiele gecheckt. Klappt alles Wunderbar.
Nur habe ich dann 3 Outputdateien der jeweiligen Einzelschritte. Schön wäre es die Streams weiterzureichen um nur
eine Output Datei zu erstellen. Meine Idee war das ganze mit dem PipedStream zu handeln, jedoch bekommen ich den bekannten Freeze wenn der Stream wohl leer ist.
Nun meine frage, habe ich hier einen Denkfehler, da das ganze Sequenziell abläuft und nicht auf Threads verteilt ist?
Hängt das funktionierende Lesen des PipedStream von den Klassen und Methoden in iText ab? Habe bisher nicht mit PipedStreams gearbeitet.
Danke schon mal für die Antworten. Hier der Code. Auskommentiert ist die Variante mit den drei Outputdateien.
Ich hatte auch versucht mit dem Stream.close() einen Effekt zu erzielen
Code:
public static void main(String[] args) {
System.out.println("Filling in a form");
try {
PdfReader reader = new PdfReader("CZD111.pdf");
/* Formular ausfüllen. */
PipedOutputStream pos_formular = new PipedOutputStream();
PdfStamper stamp1 = new PdfStamper(reader,pos_formular);
//PdfStamper stamp1 = new PdfStamper(reader, new FileOutputStream("registered1.pdf"));
AcroFields form1 = stamp1.getAcroFields();
form1.setField("name", "Name");
form1.setField("strasse", "Einbahnstrasse 1");
form1.setField("ort", "Hamburg");
form1.setField("land", "Deutschland");
/* PDF Anhängen */
PipedInputStream pis_append = new PipedInputStream();
pis_append.connect(pos_formular);
//stamp1.close();
//reader.close();
// step 1: creation of a document-object
Document document = new Document();
// step 2: we create a writer that listens to the document
PipedOutputStream pos_append = new PipedOutputStream();
PdfCopy writer = new PdfCopy(document, pos_append);
//PdfCopy writer = new PdfCopy(document, new FileOutputStream("registered2.pdf"));
// step 3: we open the document
document.open();
for (int j = 0; j < 2; j++) {
if (j == 0) {
reader = new PdfReader(pis_append);
//reader = new PdfReader("registered1.pdf");
} else {
reader = new PdfReader("E111.pdf");
}
reader.consolidateNamedDestinations();
// we retrieve the total number of pages
int n = reader.getNumberOfPages();
// step 4: we add content
PdfImportedPage page;
for (int i = 0; i < n;) {
++i;
page = writer.getImportedPage(reader, i);
writer.addPage(page);
}
PRAcroForm form = reader.getAcroForm();
if (form != null) {
writer.copyAcroForm(reader);
}
}
document.close();
/* Dokment Verschlüsseln */
PipedInputStream pis_encryption = new PipedInputStream(pos_append);
reader = new PdfReader(pis_encryption);
//reader = new PdfReader("registered2.pdf");
PdfEncryptor.encrypt(reader, new FileOutputStream("registered3.pdf"), null, "Test".getBytes(),
PdfWriter.ALLOW_PRINTING | PdfWriter.ALLOW_COPY, false);
reader.close();
} catch (Exception de) {
de.printStackTrace();
}