刚刚工位边上的产品同学,说为了给PPT方案文档添加水印,网上找了,都需要冲会员,WPS添加水印也需要VIP会员,问我能快速添加个图片水印吗? 我呵呵了,肯定没毛病。。。三分钟给弄好了。
废话不多说,先展示下结果如下:
1、原pdf文件:
2、添加水印pdf文件:
slog:人是会骗人的,代码不会骗人。
上代码:
项目mvn引入jar包依赖: 就下面这2个货
<!-- 对PDF文件的操作 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13.1</version>
</dependency>
<!-- PDF文件 字体 防止中文乱码 -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Element;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfGState;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper;
import java.io.FileOutputStream;
/**
* @author houxiurong
* @date 2022/4/8
*/
public class PdfWaterPaperTest {
/**
* 给pdf文档添加文本水印
*/
public static void addWaterMark(String pdfFilePath, String outputFilePath) {
try {
// 原PDF文件
PdfReader reader = new PdfReader(pdfFilePath);
// 输出的PDF文件内容
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFilePath));
// 字体 来源于 itext-asian JAR包
BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", true);
PdfGState gs = new PdfGState();
// 设置透明度
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.4f);
int totalPage = reader.getNumberOfPages() + 1;
//文本水印
for (int pageNum = 1; pageNum < totalPage; pageNum++) {
// 内容上层
PdfContentByte content = stamper.getOverContent(pageNum);
// 内容下层
//PdfContentByte content = stamper.getUnderContent(pageNum);
content.beginText();
// 字体添加透明度
content.setGState(gs);
// 添加字体大小等
content.setFontAndSize(baseFont, 50);
// 添加范围
content.setTextMatrix(70, 200);
// 具体位置 内容 旋转多少度 共360度
content.showTextAligned(Element.ALIGN_CENTER, "houxiurong.com", 300, 350, 300);
content.showTextAligned(Element.ALIGN_TOP, "houxiurong.com", 100, 100, 5);
content.showTextAligned(Element.ALIGN_BOTTOM, "houxiurong.com", 400, 400, 75);
content.endText();
}
// 关闭
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
System.out.println(e);
}
}
/**
* 图片水印
* @param inputFile
* @param outputFile
* @param imgFilePath
* @return
*/
public static String addImgWaterMaker(String inputFile, String outputFile, String imgFilePath) {
System.out.println("==========addImgWaterMaker==========start");
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
PdfGState gs1 = new PdfGState();
// 设置透明度
gs1.setFillOpacity(0.7f);
Image image = Image.getInstance(imgFilePath);
// 获取PDF页数
int numberOfPages = reader.getNumberOfPages();
PdfContentByte under;
for (int page = 1; page <= numberOfPages; page++) {
PdfContentByte pdfContentByte = stamper.getOverContent(page);
// 获得PDF最顶层
under = stamper.getOverContent(page);
pdfContentByte.setGState(gs1);
// 行
for (int y = 0; y < 10; y++) {
// 列
for (int x = 0; x < 8; x++) {
// 设置旋转角度
image.setRotationDegrees(30);// 旋转 角度
// 设置等比缩放
under.setColorFill(BaseColor.GRAY);
image.scaleToFit(80, 120);
image.setRotation(30);
image.setAbsolutePosition(60 + 140 * x, 110 * y);
pdfContentByte.addImage(image);
}
}
}
stamper.close();
reader.close();
System.out.println("==========addImgWaterMaker==========end");
} catch (Exception e) {
e.printStackTrace();
System.out.println("文件增加水印异常:" + inputFile);
return inputFile;
}
return outputFile;
}
//文件路径根据Mac文件,windos使用windos路径
public static void main(String[] args) {
System.out.println("==水印添加开始处理==");
addWaterMark("/Users/.../Downloads/go-fastdfs文件系统部署.pdf", "/Users/houxiurong/Downloads/go-fastdfs文件系统部署water.pdf");
System.out.println("==水印添加处理结束==");
System.out.println("==图片水印添加开始处理==");
addImgWaterMaker("/Users/.../Downloads/go-fastdfs文件系统部署water.pdf", "/Users/houxiurong/Downloads/go-fastdfs文件系统部署png.pdf", "/Users/houxiurong/Downloads/nacos-full.png");
System.out.println("==图片水印添加处理结束==");
}
}
3、总结
对于一般的小功能,小任务能很好的表现及展示自己的动手能力!!!