java PDF添加图层,支持多页图层添加
java PDF添加图层,支持多页图层添加
代码:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List; import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.PdfStamper; public class PdfUtils { /**
* PDF添加图层
*
* @param srcPdf
* 原PDF文件路径
* @param distPdf
* 合成PDF输出路径
* @param layerPathArr
* 图层路径列表,图层名称需为数字(按照图片名称数字顺序合成在PDF对应页数上)
* @return
* @throws IOException
* @throws DocumentException
*/
public static String markLocalImage42Dist(String srcPdf, String distPdf, List<String> layerPathArr)
throws IOException, DocumentException {
File srcPdfFile = new File(srcPdf);
if (!srcPdfFile.exists()) {
throw new IllegalArgumentException("找不到需要添加图层的pdf文件");
} PdfReader reader = new PdfReader(srcPdf);
int n = reader.getNumberOfPages(); // PDF页数 PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(distPdf));
PdfContentByte over; for (String layerPath : layerPathArr) {
File layerFile = new File(layerPath);
String currentPageNo = layerFile.getName().substring(, layerFile.getName().lastIndexOf(".")); // 图片名称(对应页数) boolean isNum = currentPageNo.matches("[0-9]+");
if (!isNum) {
throw new IllegalArgumentException("图层名称是不是数字");
} Image img = Image.getInstance(layerPath);
img.setAbsolutePosition(, );
if (n > && n >= Integer.parseInt(currentPageNo)) {
over = stamp.getOverContent(Integer.parseInt(currentPageNo));
over.addImage(img);
}
}
stamp.close();
reader.close();
return distPdf;
} }
测试:
public static void main(String[] args) throws IOException, DocumentException {
List<String> imgUrlList = new ArrayList<>();
imgUrlList.add("D:/ts/testPDF/1.png");
//imgUrlList.add("D:/ts/testPDF/2.png");
imgUrlList.add("D:/ts/testPDF/3.png");
markLocalImage42Dist("D:/ts/testPDF/testPDF.pdf", "D:/ts/testPDF/testPDF2.pdf", imgUrlList);
}
结果:

原PDF:

合成后PDF:

java PDF添加图层,支持多页图层添加的更多相关文章
- Java PDF页面设置——页面大小、页边距、纸张方向、页面旋转
下面的示例将介绍通过Java编程来对PDF页面进行个性化设置的方法,包括设置页面大小.页边距.纸张方向.页面旋转等.这里有如下多种页面大小尺寸可供选择: 同时,设置文档内容旋转时,可支持如下角度进行内 ...
- C# 操作PDF 图层(Layer)——添加、删除图层、设置图层可见性
前言 通过添加图层,我们可以将文本.图片.表格.图形等元素精确定位于页面指定位置,将这些元素进行叠放.组合形成页面的最终效果.此外,对于页面中已有的图层我们也可以进行设置图层可见性.删除图层等操作.因 ...
- java -PDF添加文本水印与图片水印
java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30; public static void waterMark(Stri ...
- 页面直接导出为PDF文件,支持分页与页边距
将WEB页面直接导出为pdf文件是经常会用到的一个功能,尤其是各种报表系统.总结了一下目前几种主流的做法: 在后端用代码生成pdf文件,比如iText一类: 在后端抓取页面并生成pdf文件,比如pha ...
- C#给PDF文档添加文本和图片页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- C#添加PDF页眉——添加文本、图片到页眉
页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...
- 整理了2019年上千道Java面试题,近500页文档,用了1个月时间!
spring 面试题 1.一般问题 1.1.不同版本的 spring Framework 有哪些主要功能? 1.2.什么是 spring Framework? 1.3.列举 spring Framew ...
- 简析Geoserver中获取图层列表以及各图层描述信息的三种方法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层 ...
- 把自己Github上的代码添加Cocoapods支持
转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...
随机推荐
- RTP实时传输协议
RTP协议是包括一对协议:RTP和RTCP. RTP传输数据,RTCP传输控制信息. 一般基于UDP,RTP使用偶数端口,RTCP使用下一个奇数端口. 层次关系: APP -> RTP -> ...
- keepalived+mysql主从环境,keepalived返回值是RST,需求解决方法?
环境描述: mysql版本5.6.37 keepalived-1.2.19 系统centos 7:3.10.0-514.26.2.el7 web是:windows server 2 ...
- bat文件与Vbs文件常用操作(获取用户输入,执行VBS文件)
bat文件: set /P StrInput="输入数字:" echo 输入的数字为%StrInput% set /P Flg="是否执行(y/n):" IF ...
- [UE4]Add Offset
在原来值的基础上增加偏移
- CDNI - RFC7336翻译
CDNI框架 摘要 本文档提出了CDNI的一个框架.框架的目的是提供对CDNI问题空间的总体描述,和描述CDN互连所需的各种组件之间的 关系.CDNI需要指定接口和机制解决诸如请求路由,分发交换元数据 ...
- Resharper快捷键汇总
编辑Ctrl + Space 代码完成 Ctrl + Shift + Space代码完成Ctrl + Alt + Space代码完成Ctrl + P 显示参数信息Alt + Insert 生成构造函数 ...
- extentreports
关于extentreports使用的一些个人见解 首先导入jar包, 使用maven导入,我再次首先导入的是 <version>4.0.5</version>版本的jar包,但 ...
- JAVA 8 函数式接口--Consumer
从JDK8开始java支持函数式编程,JDK也提供了几个常用的函数式接口,这篇主要介绍Consumer接口.文本介绍的顺序依次为: 源码介绍 使用实例 jdk内对Consumer的典型使用 扩展类介绍 ...
- oracle出现sga导致ORA-00821 ORA-00093报错解决办法
本问题在linux环境下,windows环境下类似. 问题描述: 在数据库操作时不小心修改了share_pool的大小,导致重启数据库无法正常启动,报错为: SQL>startup; ORA-: ...
- python3 十六进制字符串进行分割并累加
最近忘性大,记录一下 需求: ‘80 11 F1 01 1A’字符串需要把每一个十六进制字符加起来,即80+11+F1+01+1A=? 很简单,不解释,直接上 hex(sum([int(i,16) f ...