前言:本文探讨的是利用pageEvent事件在生成PDF文件的过程中把图片水印加好,这样导出的是加好水印的pdf文件。
- 1:加入依赖
<!--导出pdf相关-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.10</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
- 2:准备好水印图片,将图片拷贝到项目中
- 3:代码示例,利用pageEvent事件加水印
定义事件类
package itextpdf;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;
/**
* @author
* @description 继承PdfPageEventHelper类来定义事件
* @date 2018/6/19 11:08$
*/
public class WaterMark1 extends PdfPageEventHelper {
@Override
public void onEndPage(PdfWriter writer, Document document) {
//获取水印图片的路径
String markImagePath = this.getClass().getClassLoader().getResource("font").getFile() + "/logo.png";
float pageHeight = document.getPageSize().getHeight();
float pageWidth = document.getPageSize().getWidth();
try {
Image img = Image.getInstance(markImagePath);//生成水印图片
final float IMAGE_SIZE = 0.6f;//图片缩放比例,大小0
float plainWidth = img.getPlainWidth() * IMAGE_SIZE;
float plainHeight = img.getPlainHeight() * IMAGE_SIZE;
img.scaleAbsolute(plainWidth, plainHeight);//设置图片大小
img.setAlignment(Image.UNDERLYING); // 在字下面
//设置水印图片的坐标。
img.setAbsolutePosition(pageWidth - plainWidth - 35, pageHeight - plainHeight - 5);
//image.setRotation(-30);//设置旋转 弧度
//image.setRotationDegrees(-45);//设置旋转 角度
//image.scalePercent(50);//设置依照比例缩放,与设置大小作用相同
//将水印图片加入到文档中,可使用循环添加多个,添加多个时注意每个图片的坐标等属性
document.add(img);
} catch (Exception e) {
e.printStackTrace();
}
}
}
添加事件,注意要加在document.open()之前
//创建document
Document document = new Document(PageSize.A4);
//设置要导出的文件名
File file = new File("C:\\Users\\Administrator\\Desktop\\test.pdf");
OutputStream outputStream = new FileOutputStream(file);
PdfWriter writer = PdfWriter.getInstance(document, outputStream);
//开始写
writer.setPageEvent(new WaterMark1());//水印内容
document.open();
//此处省略写入文字过程...
document.close()
- 4,效果展示