Je travaille sur un fichier pdf. J'ai besoin d'ajouter un filigrane sur un fichier PDF existant. C'est pourquoi, j'ai écrit le code suivant. Quand j'ai utilisé FileOutputStream, cela fonctionne parfaitement, mais j'ai besoin d'utiliser ByteArrayOutputStream parce que mes données proviennent de la base de données et que je dois les sauvegarder sous forme de tableau d'octets. Le problème commence ici. Lorsque j'utilise la méthode ByteArrayOutputStream getOvercontent de PdfStamper renvoie null. Comment puis-je gérer cela? Merci d'avance. Itext PdfStamper getOverContent renvoie null lorsque ByteArrayOutputStream est utilisé
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();
}
Et l'ancienne version du code est cela.
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();
}
Merci pour votre aide. C'était très douloureux 5 heures. –