Java生成pdf工具——openPdf加文字水印功能介绍
继上一篇Java生成pdf工具——openPdf使用介绍 后,这里主要介绍使用openPdf 生产pdf,给pdf加文字水印的功能,希望对大家有所帮助!
1、增加相应的依赖
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf</artifactId>
<version>1.3.34</version>
</dependency>
<dependency>
<groupId>com.github.librepdf</groupId>
<artifactId>openpdf-fonts-extra</artifactId>
<version>1.3.34</version>
</dependency>
这个版本是最后支持jdk1.8, 后续的版本需要jdk9+,使用时,根据jdk版本进行相应的选择。
2、针对中文的支持,必须创建支持中文字符的基础字体
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font docFont = new Font(bfChinese, 12, Font.UNDEFINED, Color.BLACK);
3、具体代码实现
import com.lowagie.text.Document;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.*;
import java.awt.*;
import java.io.File;
import java.io.FileOutputStream;
public class Test6 {
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
try {
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
Font docFont = new Font(bfChinese, 12, Font.UNDEFINED, Color.BLACK);
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(new File("D:/example6.pdf")));
writer.setPageEvent(new PdfPageEventHelper(){
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte waterMar = writer.getDirectContentUnder();
String text = "光与松果";
addTextFullWaterMark(waterMar, text, bfChinese);
}
});
document.open();
for (int i = 0; i < 100; i++) {
Paragraph paragraph = new Paragraph("他朝若是同淋雪,此生也算共白头,白头若是雪可替,世上那来苦心人。", docFont);
paragraph.setAlignment(Element.ALIGN_CENTER);
document.add(paragraph);
}
document.close();
System.out.println("PDF file created successfully." + (System.currentTimeMillis() - startTime));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void addTextWaterMark(PdfContentByte waterMar, String text, BaseFont bfChinese){
waterMar.beginText();
PdfGState gs = new PdfGState();
// 设置填充字体不透明度为0.2f
gs.setFillOpacity(0.2f);
waterMar.setFontAndSize(bfChinese, 40);
// 设置透明度
waterMar.setGState(gs);
// 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
waterMar.showTextAligned(Element.ALIGN_RIGHT, text, 475, 600, 45);
// 设置水印颜色
waterMar.setColorFill(Color.GRAY);
//结束设置
waterMar.endText();
waterMar.stroke();
}
public static void addTextFullWaterMark(PdfContentByte waterMar, String text, BaseFont bfChinese) {
waterMar.beginText();
PdfGState gs = new PdfGState();
// 设置填充字体不透明度为0.2f
gs.setFillOpacity(0.2f);
waterMar.setFontAndSize(bfChinese, 40);
// 设置透明度
waterMar.setGState(gs);
// 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
for (int x = 0; x <= 700; x += 200) {
for (int y = 0; y <= 800; y += 200) {
waterMar.showTextAligned(Element.ALIGN_RIGHT, text, x, y, 35);
}
}
// 设置水印颜色
waterMar.setColorFill(Color.GRAY);
//结束设置
waterMar.endText();
waterMar.stroke();
}
}
4、代码效果
希望对你有所帮助!!!