网站首页 > 技术文章 正文
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-11 让我们了解HTTP(3) 现在基于http3有哪些应用
- 2024-10-11 如何在Java中将DOCX转换为PDF java实现docx转pdf
- 2024-10-11 字节跳动《Python项目开发实战》高清版 PDF 开放下载,简直神了
- 2024-10-11 牛!字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
- 2024-10-11 字节跳动把python入门知识点整理成手册了,高清PDF开放下载
- 2024-10-11 字节大佬熬夜肝出的《Python知识手册》,高清pdf开放下载
- 2024-10-11 看了这份《算法中文手册》笔记,就再也不怕字节了
- 2024-10-11 字节跳动《算法中文手册》火了,完整版 PDF 开放下载!
- 2024-10-11 字节跳动《Python项目开发实战》高清版 PDF 开放下载
- 2024-10-11 Linux 内核 | 网络流量限速方案大 PK
你 发表评论:
欢迎- 最近发表
-
- 在 Spring Boot 项目中使用 activiti
- 开箱即用-activiti流程引擎(active 流程引擎)
- 在springBoot项目中整合使用activiti
- activiti中的网关是干什么的?(activiti包含网关)
- SpringBoot集成工作流Activiti(完整源码和配套文档)
- Activiti工作流介绍及使用(activiti工作流会签)
- SpringBoot集成工作流Activiti(实际项目演示)
- activiti工作流引擎(activiti工作流引擎怎么用)
- 工作流Activiti初体验及在数据库中生成的表
- Activiti工作流浅析(activiti6.0工作流引擎深度解析)
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)