前段时间在弄一些关于PDF文件添加水印的问题,发现网上对于这个问题的文章还是不少,但是具体实现起来的时候总是遇到一些瑕疵,不能很好的使用。首先,关于PDF文件添加水印的开源工具,大部分朋友使用的是itext开源的工具进行处理,当然PDFBox也可以处理,只是资料相对较少。
下面说一下,我实现的过程,这其中也是走了一些弯路。刚刚使用时只需要添加文字水印,可是当时没能解决中文无法添加的问题(这个问题在后来看来是多么的幼稚,只怪自己当时没能多多尝试),因此第一阶段实现的思路变成了首先为空白的图片添加水印文字,然后再为PDF文件添加水印图片,具体代码如下:
public static boolean
createImageFile(String filePath,String logoText,String
OutFilePath){
try {
OutputStream
os = null;
// 1、源图片
Image srcImg = ImageIO.read(new File(filePath));
BufferedImage buffImg = new
BufferedImage(srcImg.getWidth(null),srcImg.getHeight(null),
BufferedImage.TYPE_INT_RGB);
//
2、得到画笔对象
Graphics2D g = buffImg.createGraphics();
// 3、设置对线段的锯齿状边缘处理
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION,RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g.drawImage(srcImg.getScaledInstance(srcImg.getWidth(null),
srcImg.getHeight(null), Image.SCALE_SMOOTH), 0, 0, null);
// 4、设置水印旋转
g.rotate(Math.toRadians(-55),(double) buffImg.getWidth() / 2,
(double) buffImg.getHeight() / 2);
// 5、设置水印文字颜色
g.setColor(color);
// 6、设置水印文字Font
font = new Font("宋体", 10, 30);
g.setFont(font);
// 7、设置水印文字透明度
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,alpha));
// 8、第一参数->设置的内容,后面两个参数->文字在图片上的坐标位置(x,y)
positionWidth = (buffImg.getWidth())/2;
positionHeight = buffImg.getHeight()/2;
//g.drawString(logoText, 10, 200);
logoText = logoText + logoText + logoText + logoText + logoText +
logoText;