解决水印代码报错问题
实现pdf增加水印的代码,Tomcat不报错,weblogic报错,报错内容如下:
java.lang.NoClassDefFoundError:Could not initialize class javax.swing.RepaintManager…
给pdf添加水印的代码如下:(来源网络)
注释了 label.setText(waterMarkName); 改为JLabel实例化时传入水印内容。而且将JLabel设置成了final。
//给PDF添加水印
//inputFile 文件路径+名称
//outputFile 添加水印后输出文件保存的路径+名称
//waterMarkName 添加水印的内容
public static void waterMark(String inputFile,String outputFile, String waterMarkName) {
try {
PdfReader reader = new PdfReader(inputFile); //切记这里的参数是文件的路径 ,路径必须是双斜杠的如F:\\123.pdf,不能是F:/123.pdf 或者F:\123.pdf
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
Rectangle pageRect = null;
PdfGState gs = new PdfGState();
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.4f);
int total = reader.getNumberOfPages() + 1;
final JLabel label = new JLabel(waterMarkName);
FontMetrics metrics;
int textH = 0;
int textW = 0;
//label.setText(waterMarkName);
metrics = label.getFontMetrics(label.getFont());
textH = metrics.getHeight();
textW = metrics.stringWidth(label.getText());
PdfContentByte under;
pageRect = reader.getPageSizeWithRotation(1);
under = stamper.getOverContent(1);
under.saveState();
under.setGState(gs);
under.beginText();
under.setFontAndSize(base, 20);
float x = (float) (reader.getPageSize(1).getWidth()*0.1);
float y = (float) (reader.getPageSize(1).getHeight()*0.95);
under.setColorFill(BaseColor.RED);
under.showTextAligned(Element.ALIGN_LEFT , waterMarkName,x , y, 0);
// 添加水印文字
under.endText();
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
解决方案:百度说是JVM无法初始化该类,所以:welogic的setDomainEnv.sh中加入 -Djava.awt.headless=true。
成功解决。