Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用ByteArrayOutputStream时,Itext PdfStamper getOverContent返回null_Java_Itext_Bytearrayoutputstream_Pdfstamper - Fatal编程技术网

Java 使用ByteArrayOutputStream时,Itext PdfStamper getOverContent返回null

Java 使用ByteArrayOutputStream时,Itext PdfStamper getOverContent返回null,java,itext,bytearrayoutputstream,pdfstamper,Java,Itext,Bytearrayoutputstream,Pdfstamper,我正在处理一个pdf文件。我需要在现有pdf文件上添加水印。这就是为什么,我写了下面的代码。当我使用FileOutputStream时,它工作得非常好,但我需要使用ByteArrayOutputStream,因为我的数据来自数据库,我需要将其保存为字节数组。问题从这里开始。当我使用PdfStamper的ByteArrayOutputStream getOvercontent方法时,返回null。我该怎么办?提前谢谢。 byte[]bytes=getAsByteArray(); ByteArra

我正在处理一个pdf文件。我需要在现有pdf文件上添加水印。这就是为什么,我写了下面的代码。当我使用FileOutputStream时,它工作得非常好,但我需要使用ByteArrayOutputStream,因为我的数据来自数据库,我需要将其保存为字节数组。问题从这里开始。当我使用PdfStamper的ByteArrayOutputStream getOvercontent方法时,返回null。我该怎么办?提前谢谢。

byte[]bytes=getAsByteArray();
ByteArrayOutputStream outputStream=新的ByteArrayOutputStream(bytes.length);
PdfReader reader=新PdfReader(字节);
int numberOfPages=reader.getNumberOfPages();
outputStream.write(字节,0,字节.长度);
PdfStamper压模=新的PdfStamper(读卡器,输出流);
Font=Font(Font.NORMAL,135,Color.RED);
对于(int i=0;i
旧版本的代码是这样的

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();
}
byte[]bytes=FileUtils.readFileToByteArray(新文件(“myPdf.pdf”);
PdfReader reader=新PdfReader(字节);
int numberOfPages=reader.getNumberOfPages();
PdfStamper stamper=新PdfStamper(读取器,新文件输出流(“MyPdfOut.pdf”);
Font f=Font(Font.NORMAL,135,Color.RED);

对于(inti=1;i这是禁止的:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes.length);
outputStream.write(bytes, 0, bytes.length);
PdfStamper stamper = new PdfStamper(reader, outputStream);
 PdfContentByte over = stamper.getOverContent(i);
 Phrase p = new Phrase("WATERMARK");
 PdfGState gs = new PdfGState();
 gs.setFillOpacity(0.5f);
 over.setGState(gs);
 ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 330, 450, 45);
 over.saveState();
您创建了一个名为
OutputStream
,名为
OutputStream
,并且似乎将完整的现有PDF复制到了该
OutputStream
(使用
write()
)。然后,您似乎打算通过将相同的
OutputStream
传递到
PdfStamper
实例,向该
OutputStream
添加另一个完整的PDF。这将导致PDF文件损坏

这也将导致非法的PDF语法:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes.length);
outputStream.write(bytes, 0, bytes.length);
PdfStamper stamper = new PdfStamper(reader, outputStream);
 PdfContentByte over = stamper.getOverContent(i);
 Phrase p = new Phrase("WATERMARK");
 PdfGState gs = new PdfGState();
 gs.setFillOpacity(0.5f);
 over.setGState(gs);
 ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 330, 450, 45);
 over.saveState();
你有一个
saveState()
操作符,但你从来没有使用过
restoreState()
。对于每个
saveState()
,你都应该有一个
restoreState()
。你的
saveState()
位置不对!好像你不知道
saveState()
restoreState()
是关于什么的


最后,开始计算0,但第一页是第1页,而不是第0页。因此,(int i=0;i是错误的。它应该是(int i=1;i这是禁止的

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes.length);
outputStream.write(bytes, 0, bytes.length);
PdfStamper stamper = new PdfStamper(reader, outputStream);
 PdfContentByte over = stamper.getOverContent(i);
 Phrase p = new Phrase("WATERMARK");
 PdfGState gs = new PdfGState();
 gs.setFillOpacity(0.5f);
 over.setGState(gs);
 ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 330, 450, 45);
 over.saveState();
您创建了一个名为
OutputStream
,名为
OutputStream
,并且似乎将完整的现有PDF复制到了该
OutputStream
(使用
write()
)。然后,您似乎打算通过将相同的
OutputStream
传递到
PdfStamper
实例,向该
OutputStream
添加另一个完整的PDF。这将导致PDF文件损坏

这也将导致非法的PDF语法

ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bytes.length);
outputStream.write(bytes, 0, bytes.length);
PdfStamper stamper = new PdfStamper(reader, outputStream);
 PdfContentByte over = stamper.getOverContent(i);
 Phrase p = new Phrase("WATERMARK");
 PdfGState gs = new PdfGState();
 gs.setFillOpacity(0.5f);
 over.setGState(gs);
 ColumnText.showTextAligned(over, Element.ALIGN_CENTER, p, 330, 450, 45);
 over.saveState();
你有一个
saveState()
操作符,但你从来没有使用过
restoreState()
。对于每个
saveState()
,你都应该有一个
restoreState()
。你的
saveState()
位置不对!好像你不知道
saveState()
restoreState()
是关于什么的

最后,开始计算0,但第一页是第1页,而不是第0页。因此(
for(int i=0;i
是错误的。它应该是(
for(int i=1;i