Ich arbeite an einer PDF-Datei. Ich muss ein Wasserzeichen auf einer bestehenden PDF-Datei hinzufügen. Deshalb habe ich folgenden Code geschrieben. Wenn ich FileOutputStream verwendet, funktioniert es perfekt, aber ich muss ByteArrayOutputStream verwenden, weil meine Daten aus der Datenbank kommen und ich es als Byte-Array speichern muss. Das Problem beginnt hier. Wenn ich die Methode ByteArrayOutputStream verwende, gibt die Methode getOvercontent von PdfStamper null zurück. Wie kann ich damit umgehen? Danke im Voraus. Itext PdfStamper getOverContent gibt null zurück, wenn ByteArrayOutputStream verwendet
byte[] bytes = getAsByteArray();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes.length);
PdfReader reader = new PdfReader(bytes);
int numberOfPages= reader.getNumberOfPages();
outputStream.write(bytes, 0, bytes.length);
PdfStamper stamper = new PdfStamper(reader, outputStream);
Font font = font(Font.NORMAL, 135, Color.RED);
for (int i = 0; i < numberOfPages; i++) {
//over Content is null
PdfContentByte over = stamper.getOverContent(i);
Phrase p = new Phrase("WATERMARK", font);
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.5f);
over.setGState(gs);
ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 330, 450, 45);
over.saveState();
}
Und die alte Version von Code ist dies.
byte[] bytes = FileUtils.readFileToByteArray(new File("myPdf.pdf"));
PdfReader reader = new PdfReader(bytes);
int numberOfPages= reader.getNumberOfPages();
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("MyPdfOut.pdf"));
Font f = font(Font.NORMAL, 135, Color.RED);
for (int i = 1; i <= numberOfPages; i++) {
PdfContentByte over = stamper.getOverContent(i);
Phrase p = new Phrase("WATERMARK", f);
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.5f);
over.setGState(gs);
ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 330, 450, 45);
over.saveState();
}
danken für Ihre Hilfe. Es war sehr schmerzhaft 5 Stunden. –