JAVA PDF 给PDF添加文字/图片水印(指定内容),并且设置位置
提示:看完这个简单的demo 后就知道怎样去操作一个PDF了
文章目录
- 前言
- 一、前提准备
- 二、使用步骤
- 1.引入库
- 2.以下是部分代码的作用
- 总结
前言
提示:操作PDF其实是一件很简单的事情,比一般的CRUD都简单
例如:我们拿到了一个需求,我需要给这个PDF设置一个电子签名(就是一张图片盖在这个PDF上,然后输出到服务器的某个指定文件夹中)和年月日(自定义的文字)
提示:以下是本篇文章正文内容,下面案例可供参考
一、前提准备
示例:因为我这个是demo 所以我们准备两个文件
1.原始PDF(模板PDF,需要操作的文件) J:/test.pdf
2.需要放到PDF种的签名(就是一张图片嘛)J:/666.png
二、使用步骤
1.引入库
代码如下(示例):
其实我们只需要用到两个包,maven引入即可(复制过去)
org.apache.pdfbox pdfbox 2.0.28 com.itextpdf itextpdf 5.5.13.32.以下是部分代码的作用
代码如下(示例):
首先我们需要读取这两个文件(路径换成你自己的服务器路径就好)File file = ResourceUtils.getFile("J:/test.pdf"); Image img = Image.getInstance("J:/ikun.jpg"); 然后我们需要提前设置需要输出的路径(就是你生成后文件放到哪儿) PdfStamper stamper = new PdfStamper(reader, Files.newOutputStream(Paths.get("J:/abc.pdf")));图片操作的代码块
PdfGState pdfGState = new PdfGState(); pdfGState.setFillOpacity(0.7F); contentByte.setGState(pdfGState); //图片的位置 img.setAbsolutePosition(430, 220); //这是图片的尺寸 img.scaleAbsolute(100, 100); img.setCompressionLevel(100);
文字的代码块
//设置字体大小contentByte.setFontAndSize(BaseFont.createFont(fontFile.getAbsolutePath(),BaseFont .IDENTITY_H,BaseFont.NOT_EMBEDDED), 13f); // 设置文字 contentByte.setColorFill(BaseColor.LIGHT_GRAY); contentByte.showTextAligned(Element.ALIGN_CENTER, "13511111111", 450, 200, 0); contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getYear()), 450, 143, 0); contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getMonthValue()), 490, 143, 0); contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getDayOfMonth()), 128, 130, 0);
上面就是文件和文字的操作
3.总体的DEMO代码
package com.cm.email; import com.itextpdf.text.BaseColor; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Element; import com.itextpdf.text.Image; import com.itextpdf.text.pdf.*; import lombok.extern.slf4j.Slf4j; import org.springframework.util.ResourceUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RestController; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Paths; import java.time.LocalDate; @Slf4j @RestController public class WaterMarkUtils { @PostMapping("/set-pdf") public void pdfs() throws DocumentException, IOException { File file = ResourceUtils.getFile("J:/test.pdf"); Image img = Image.getInstance("J:/ikun(1).jpg"); File fontFile = ResourceUtils.getFile("classpath:font/simfang.ttf"); InputStream inputStream = Files.newInputStream(file.toPath()); // 读取原始 PDF 文件 PdfReader reader = new PdfReader(inputStream); PdfStamper stamper = new PdfStamper(reader, Files.newOutputStream(Paths.get("J:/abc.pdf"))); try { // 获取 PDF 中的页数 int pageCount = reader.getNumberOfPages(); // 获取第几页pdf PdfContentByte contentByte = stamper.getOverContent(pageCount); contentByte.beginText(); //给图片设置透明度 PdfGState pdfGState = new PdfGState(); pdfGState.setFillOpacity(0.7F); contentByte.setGState(pdfGState); //图片的位置 img.setAbsolutePosition(430, 220); //这是图片的尺寸 img.scaleAbsolute(100, 100); img.setCompressionLevel(100); //设置字体大小 contentByte.setFontAndSize(BaseFont.createFont(fontFile.getAbsolutePath(),BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED), 13f); // 设置文字 contentByte.setColorFill(BaseColor.LIGHT_GRAY); contentByte.showTextAligned(Element.ALIGN_CENTER, "13511111111", 450, 200, 0); contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getYear()), 450, 143, 0); contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getMonthValue()), 490, 143, 0); contentByte.showTextAligned(Element.ALIGN_CENTER, String.valueOf(LocalDate.now().getDayOfMonth()), 128, 130, 0); //添加图品结束等等 contentByte.addImage(img); contentByte.endText(); }catch (Exception e){ e.printStackTrace(); }finally { // 保存修改后的 PDF 文件并关闭文件流 stamper.close(); reader.close(); } } }4.具体效果
总结
提示:关于字体这些东西,还有比如说文字的颜色啊,可以自己去看看,这里只是简单的演示
以上就是今天要讲的内容,本文仅仅简单介绍了java操作PDF的使用,代理直接拿过去运行即可。
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

