私はpdfファイルを作成しています。既存のpdfファイルにウォーターマークを追加する必要があります。だから、私は次のコードを書いた。 FileOutputStreamを使用すると完全に動作しますが、データがデータベースから来てバイト配列として保存する必要があるため、ByteArrayOutputStreamを使用する必要があります。問題はここから始まります。 ByteArrayOutputStreamを使用すると、PdfStamperのgetOvercontentメソッドはnullを返します。これをどうすれば処理できますか?前もって感謝します。 Itext PdfStamper getOverContentは、ByteArrayOutputStreamを使用するとnullを返します。
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();
}
これは古いバージョンのコードです。
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();
}
感謝あなたの助けのために:
これはあなたのコードを修正しようとする試みです。それは非常に痛い5時間だった。 –