在向打印机发送pdf文件时,会出现类似&#34的错误;此页面上存在错误。 Acrobat可能无法正确显示页面。请与创建PDF文档的人员联系以解决问题。"
我正在创建PDF文件,并使用文本java为其添加水印图像。
如果从PDF文件中删除水印图像,那么它可以正常工作。
不知道水印图像的确切问题是什么?请帮忙。
以下是代码段:
PdfReader pdfReader = new PdfReader(finalPath);
int noOfPages = pdfReader.getNumberOfPages();
PdfStamper stamp = new PdfStamper(pdfReader, new FileOutputStream(fileNameAfterWatermark));
int i = 0;
PdfContentByte underContent;
PdfGState gs;
while (i < noOfPages) {
i++;
underContent = stamp.getUnderContent(i);
gs = new PdfGState();
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.3f);
Rectangle pagesize = pdfReader.getPageSize(i);
int pageRotation = pdfReader.getPageRotation(i);
float x = (pagesize.getLeft() + pagesize.getRight()) / 2 ;
float y = (pagesize.getTop() + pagesize.getBottom()) / 2 ;
if(pageRotation != 0){
x = (pagesize.getHeight()) / 2;
y = (pagesize.getWidth()) / 2;
y = y - 80;
}
float w = image.getScaledWidth();
float h = image.getScaledHeight();
float scaleMultiplicationFactor = 1.25f;
float image_width = (w * (scaleMultiplicationFactor));
float image_height = (h * (scaleMultiplicationFactor));
float x_co_ordinate = x - (image_width / 2 );
float y_co_ordinate = y - (image_height / 2);
int fontSize = 180;
underContent.saveState();
underContent.setGState(gs);
underContent.beginText();
underContent.setFontAndSize(bf, fontSize);
underContent.setColorFill(Color.LIGHT_GRAY);
underContent.addImage(image, image_width, 0, 0, image_height, x_co_ordinate , y_co_ordinate );
underContent.endText();
underContent.restoreState();
}
stamp.close();
pdfReader.close();
答案 0 :(得分:1)
您可以将水印内容添加到UnderContent
,如下所示:
underContent.saveState();
underContent.setGState(gs);
underContent.beginText();
underContent.setFontAndSize(bf, fontSize);
underContent.setColorFill(Color.LIGHT_GRAY);
underContent.addImage(image, image_width, 0, 0, image_height, x_co_ordinate , y_co_ordinate );
underContent.endText();
underContent.restoreState();
即。你在文本对象中添加你的(位图?)图像。这是无效的,文本对象可能不包含外部对象或内嵌图像对象。在文本对象外添加图像:
underContent.saveState();
underContent.setGState(gs);
underContent.beginText();
underContent.setFontAndSize(bf, fontSize);
underContent.setColorFill(Color.LIGHT_GRAY);
underContent.endText();
underContent.addImage(image, image_width, 0, 0, image_height, x_co_ordinate , y_co_ordinate );
underContent.restoreState();
话虽如此,你不能在该文本对象中添加任何内容。因此,您可以将代码缩减为:
underContent.saveState();
underContent.setGState(gs);
underContent.addImage(image, image_width, 0, 0, image_height, x_co_ordinate , y_co_ordinate );
underContent.restoreState();
此外,您将该内容添加到UnderContent
。因此,您在PdfGState
中设置的透明度仅会使图像变得更淡。如果您可以将原始位图设置为最终所需的颜色,则根本不需要使用PdfGState
。在某些PDF格式的透明度是禁止的,所以摆脱它也可能是有利的......