网站首页 > java教程 正文
java操作pdf之iText快速入门
iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。
iText官网: http://itextpdf.com/
官网示例: http://itextpdf.com/examples/
更多示例: https://kb.itextpdf.com/home/it5kb/examples
Maven依赖:
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.itextpdf/itext-asian -->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
添加水印
文字水印
public class PdfWaterMark {
public static final String RESULT = "src/main/resources/font_water_mark.pdf";
public static void main(String[] args) throws FileNotFoundException, DocumentException {
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
// 打开文档
document.open();
// 加入水印
PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
// 开始设置水印
waterMar.beginText();
// 设置水印透明度
PdfGState gs = new PdfGState();
// 设置填充字体不透明度为0.4f
gs.setFillOpacity(0.4f);
try {
// 设置水印字体参数及大小 (字体参数,字体编码格式,是否将字体信息嵌入到pdf中(一般不需要嵌入),字体大小)
waterMar.setFontAndSize(BaseFont.createFont(BaseFont.HELVETICA, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED), 60);
// 设置透明度
waterMar.setGState(gs);
// 设置水印对齐方式 水印内容 X坐标 Y坐标 旋转角度
waterMar.showTextAligned(Element.ALIGN_RIGHT, "www.newland.com", 500, 430, 45);
// 设置水印颜色
waterMar.setColorFill(BaseColor.GRAY);
//结束设置
waterMar.endText();
waterMar.stroke();
} catch (IOException e) {
e.printStackTrace();
}
// 加入文档内容
document.add(new Paragraph("my first pdf demo"));
// 关闭文档
document.close();
pdfWriter.close();
}
}
图片水印
public class PdfWaterMark {
public static final String RESULT = "src/main/resources/img_water_mark.pdf";
public static void main(String[] args) throws FileNotFoundException, DocumentException {
Document document = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream(RESULT));
// 打开文档
document.open();
// 加入水印
PdfContentByte waterMar = pdfWriter.getDirectContentUnder();
// 开始设置水印
waterMar.beginText();
// 设置水印透明度
PdfGState gs = new PdfGState();
// 设置填充字体不透明度为0.4f
gs.setFillOpacity(0.4f);
try {
Image image = Image.getInstance("D:\\Folder\\image\\logo.png");
// 设置坐标 绝对位置 X Y
image.setAbsolutePosition(200, 300);
// 设置旋转弧度
image.setRotation(30);// 旋转 弧度
// 设置旋转角度
image.setRotationDegrees(45);// 旋转 角度
// 设置等比缩放
image.scalePercent(30);// 依照比例缩放
// image.scaleAbsolute(200,100);//自定义大小
// 设置透明度
waterMar.setGState(gs);
// 添加水印图片
waterMar.addImage(image);
// 设置透明度
waterMar.setGState(gs);
//结束设置
waterMar.endText();
waterMar.stroke();
} catch (IOException e) {
e.printStackTrace();
}
// 加入文档内容
document.add(new Paragraph("hello world"));
// 关闭文档
document.close();
pdfWriter.close();
}
}
给已经存在的pdf添加文字水印
/**
* 已有的pdf文件添加水印
* @param inputFile:要加水印的源文件的路径
* @param outputFile:加水印后文件的输出路径
* @param waterMarkName:要加的水印名
*/
public static void waterMark(String inputFile,String outputFile, String waterMarkName) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
BaseFont base = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);
PdfGState gs = new PdfGState();
//改透明度
gs.setFillOpacity(0.5f);
gs.setStrokeOpacity(0.4f);
int total = reader.getNumberOfPages() + 1;
JLabel label = new JLabel();
label.setText(waterMarkName);
PdfContentByte under;
// 添加一个水印
for (int i = 1; i < total; i++) {
// 在内容上方加水印
under = stamper.getOverContent(i);
//在内容下方加水印
//under = stamper.getUnderContent(i);
gs.setFillOpacity(0.5f);
under.setGState(gs);
under.beginText();
//改变颜色
under.setColorFill(BaseColor.LIGHT_GRAY);
//改水印文字大小
under.setFontAndSize(base, 100);
under.setTextMatrix(70, 200);
//后3个参数,x坐标,y坐标,角度
under.showTextAligned(Element.ALIGN_CENTER, waterMarkName, 300, 350, 55);
under.endText();
}
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
给已经存在的pdf添加图片水印
/**
* @param inputFile:要加水印的源文件的路径
* @param outputFile:加水印后文件的输出路径
* @param pocturePath: 图片的位置
*/
public static void pictureWaterMark(String inputFile, String outputFile, String pocturePath) {
try {
PdfReader reader = new PdfReader(inputFile);
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFile));
PdfGState gs = new PdfGState();
//设置透明度
gs.setFillOpacity(0.3f);
gs.setStrokeOpacity(0.4f);
int total = reader.getNumberOfPages() + 1;
PdfContentByte waterMar;
// 添加一个水印
for (int i = 1; i < total; i++) {
// 在内容上方加水印
waterMar = stamper.getOverContent(i);
//在内容下方加水印
//under = stamper.getUnderContent(i);
waterMar.setGState(gs);
waterMar.beginText();
Image image = Image.getInstance(pocturePath);
// 设置坐标 绝对位置 X Y
image.setAbsolutePosition(150, 250);
// 设置旋转弧度
image.setRotation(30);// 旋转 弧度
// 设置旋转角度
image.setRotationDegrees(45);// 旋转 角度
// 设置等比缩放
image.scalePercent(30);// 依照比例缩放
// image.scaleAbsolute(200,100);//自定义大小
// 添加水印图片
waterMar.addImage(image);
// 设置透明度
waterMar.setGState(gs);
//结束设置
waterMar.endText();
waterMar.stroke();
}
stamper.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
猜你喜欢
- 2024-10-09 Java 合并、拆分PDF文档(javapdf合并成一个pdf)
- 2024-10-09 Java 转换TIFF到PDF(java转pdf文件)
- 2024-10-09 Word处理控件Aspose.Words功能演示:使用 Java 将 RTF 转换为 PDF
- 2024-10-09 惊呆了了,居然发现了这本Java从小白到大牛的高清版PDF
- 2024-10-09 「Java」PDF文档格式转换之PDF转tiff
- 2024-10-09 Java 拆分PDF页面(java拆分word)
- 2024-10-09 使用Java 将PPT转换为PDF、XPS等格式
- 2024-10-09 Spire.PDF for Java v2.9.1上线!支持多页PDF转换为单个SVG
- 2024-10-09 SpringBoot集成文件 - 如何集成itextpdf导出PDF?itext的变迁?
- 2024-10-09 怎样把电子书转换成PDF?看完这篇你就会了
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)