首先需要使用第三方jar包Spire.Pdf.jar,可以网上找。
代码可以参考文档:官网指南参考代码
由于亲测以上链接的参考代码发现有些小问题。
再生成新的pdf时会有一串英文备注:
该备注只会标记再报表的第一页的顶部。所以可以在给报表生成水印前,添加一页空白页面,然后再删除空表页面的方式接解。
下面时代码示例:
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.PdfImage;
import com.spire.pdf.graphics.PdfTilingBrush;
import java.awt.*;
import java.awt.geom.Dimension2D;
import java.awt.geom.Rectangle2D;
public class BookMark {
public static void main(String[] args) {
//创建PdfDocument对象,并加载PDF测试文档
PdfDocument pdf = new PdfDocument();
pdf.loadFromFile("demo.pdf");
//添加一个空白页,目的为了删除jar包添加的水印,后面再移除这一页
pdf.getPages().add();
int rows = 3; //指定一行有多少个图片
int col = 3; //指定一个pdf页有多少行图片组
//遍历文档每一页,加载图片,并设置成平铺背景(水印)
for (int i = 0; i < pdf.getPages().getCount();i++) {
PdfPageBase page = pdf.getPages().get(i);
Dimension2D dimension2D = new Dimension();
dimension2D.setSize(page.getCanvas().getSize().getWidth()/rows, page.getCanvas().getSize().getHeight()/col);
PdfTilingBrush brush = new PdfTilingBrush(dimension2D);
brush.getGraphics().setTransparency(0.2f); //透明度
brush.getGraphics().translateTransform(brush.getSize().getWidth()/10,brush.getSize().getHeight()/10);//坐标位置
//brush.getGraphics().rotateTransform(30);//选转角度
PdfImage image = PdfImage.fromImage("log.png");
brush.getGraphics().drawImage(image,(brush.getSize().getWidth()-image.getWidth())/rows,(brush.getSize().getHeight())/col);
Rectangle2D rectangle2D = new Rectangle2D.Float();
rectangle2D.setFrame(new Point(0,0),page.getCanvas().getClientSize());
page.getCanvas().drawRectangle(brush,rectangle2D);
}
//移除第一个页
pdf.getPages().remove(pdf.getPages().get(pdf.getPages().getCount()-1));
//保存文档
pdf.saveToFile("output\bookmarks.pdf");
pdf.dispose();
}
}
效果图:
感觉有用的小伙伴,点个赞吧。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)