这篇文章介绍如何在Java应用程序中实现给PDF文档添加图片水印和文字水印。

本方案使用了免费PDF组件​​Free Spire.PDF for Java​​,以下代码需要添加的jar包:

  • Spire.Pdf.jar

 (下载Free Spire.PDF for Java类库,解压缩后在lib文件夹下可找到这个jar文件)

PDFWatermark.java代码

import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;

import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class PDFWatermark {
public static void main(String[] args)
{
//加载PDF文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("Additional.pdf");

//调用AddImageWatermark方法给PDF第一页添加图片水印
AddImageWatermark(pdf.getPages().get(0), "timg.jpg");

//调用AddTextWatermark方法给PDF第二页添加文字水印
AddTextWatermark(pdf.getPages().get(1), "已审阅");

//保存
pdf.saveToFile("Watermark.pdf");
//关闭
pdf.close();
}

/**
* @param page
* 要添加水印的页面
* @param imageFile
* 水印图片路径
*/
static void AddImageWatermark(PdfPageBase page, String imageFile)
{
page.setBackgroundImage(imageFile);
Rectangle2D rect = new Rectangle2D.Float();
rect.setFrame(page.getClientSize().getWidth()/2 - 100, page.getClientSize().getHeight()/2 - 100, 200, 200);
page.setBackgroundRegion(rect);
}

/**
* @param page
* 要添加水印的页面
* @param textWatermark
* 水印文字
*/
static void AddTextWatermark(PdfPageBase page, String textWatermark)
{
Dimension2D dimension2D = new Dimension();
dimension2D.setSize(page.getCanvas().getClientSize().getWidth() / 2, page.getCanvas().getClientSize().getHeight() / 3);
PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
brush.getGraphics().setTransparency(0.3F);
brush.getGraphics().save();
brush.getGraphics().translateTransform((float) brush.getSize().getWidth() / 2, (float) brush.getSize().getHeight() / 2);
brush.getGraphics().rotateTransform(-45);
brush.getGraphics().drawString(textWatermark, new PdfTrueTypeFont(new Font("Arial Unicode MS",Font.PLAIN,30),true), PdfBrushes.getRed(), 0, 0, new PdfStringFormat(PdfTextAlignment.Center));
brush.getGraphics().restore();
brush.getGraphics().setTransparency(1);
Rectangle2D loRect = new Rectangle2D.Float();
loRect.setFrame(new Point2D.Float(0, 0), page.getCanvas().getClientSize());
page.getCanvas().drawRectangle(brush, loRect);
}
}

添加图片水印效果:

Java实现PDF添加图片水印和文字水印_文字水印

添加文本水印效果:

Java实现PDF添加图片水印和文字水印_PDF_02