最近在工作中有一个有意思的需求,需要在一个pdf文档上添加一些文本,比如:在右上角添加上姓名,在右下角添加学号,班级。从文件系统上拿到pdf,当把pdf打印发送给学生时,需要加上这些东西。大家也都清楚,pdf转world,xml,svg都是需要花钱的,没错,我用的这个工具也是需要花钱的,但他们官网可以申请试用,有兴趣的可以去试一试。
我的例子用的是免费的jar包。
jar包链接:链接: https://pan.baidu.com/s/1CcK0AfW2xl9oTNJByor-Pw 提取码: rvra 复制这段内容后打开百度网盘手机App,操作更方便哦
1.原pdf
2.添加之后的,他还能直接添加图片,我给大家放了一张美图
唉,看着简单,但是原理复杂。
代码我尽量用画画的方式解释了,不懂得再问我。
package com.sendy.boot.util;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.graphics.*;
import java.awt.*;
import java.awt.geom.Point2D;
public class PDFAddText {
public static void main(String[] args) {
//创建PdfDocument类的对象,就是创建一个pdf对象
PdfDocument pdf = new PdfDocument();
//加载测试文档
pdf.loadFromFile("C:\\Users\\Administrator\\Desktop\\test.pdf");
//我这里是每一页都添加,pdf.getPages().get(i)通过这个方法可以修改我们想要的那一页
for (int i = 0; i < pdf.getPages().getCount(); i++) {
System.out.println(i);
//调用insertTextAndImage()方法添加文本和图片
insertTextAndImage(pdf.getPages().get(i), "2021-11-1","作者hzr");
}
//将添加文本和图片之后的文档保存到桌面,路径自己检查自己的
pdf.saveToFile("C:\\Users\\Administrator\\Desktop\\textWaterMark.pdf");
}
public static void insertTextAndImage(PdfPageBase page, String s1,String s2) {
//要写东西肯定需要笔
//创建一个画笔,笔的颜色是黑色的
PdfSolidBrush brush1 = new PdfSolidBrush(new PdfRGBColor(Color.black));
//你要写什么字体呢?
//创建要使用的一个字体
PdfTrueTypeFont font1 = new PdfTrueTypeFont(new Font("宋体", Font.ROMAN_BASELINE, 16), true);
//你的文本格式是怎么样的?
//创建一个pdf文本格式
PdfStringFormat format1 = new PdfStringFormat();
//文本左对齐
format1.setAlignment(PdfTextAlignment.Right);
//你这些肯定要在pdf上进行添加,我们把我们的pdf想象成一个画布
//getCanvas()这个就是我们的画布
//drawString()我们开始作画
//s1 添加的文本, font1 字体格式, brush1 我们用的有颜色的笔,new Point2D.Float() 要放在画布的那个位置, format1 对齐方式
page.getCanvas().drawString(s1, font1, brush1,new Point2D.Float((float) page.getActualSize().getWidth()-5, 0),format1);
PdfSolidBrush brush2 = new PdfSolidBrush(new PdfRGBColor(Color.black));
PdfTrueTypeFont font2 = new PdfTrueTypeFont(new Font("宋体", Font.PLAIN, 16), true);
page.getCanvas().drawString(s2, font2, brush2,new Point2D.Float((float) page.getActualSize().getWidth()-5, (float) page.getActualSize().getHeight()-16),format1);
//画个美女
//找到一张美女的照片
PdfImage image = PdfImage.fromFile("C:\\Users\\Administrator\\Desktop\\girl.jpg");
//得到照片的宽度和高度
int width = image.getWidth()/2;
int height = image.getHeight()/2;
//继续作画,把图片放进去,而且得放到具体的位置
page.getCanvas().drawImage(image,20,350,width, height);
}
}
这里有一个关键的地方,我用的是maven,但是他官网给的那个maven依赖下载不下来,所以我只能自己下载jar包添加进去了。