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官网的添加支持, ...
随机推荐
- 使用GNVM工具高效切换node版本
在开发中,有时候需要在多个node版本之间切换,重复手动下载安装node安装包来切换版本很麻烦,在Mac系统中可以使用nvm工具,而windows系统无法使用nvm工具.gnvm解决了在windows ...
- Reduce TIME_WAIT
see time wait number netstat -nat | awk '{print $6}' | sort | uniq -c | sort -n vi /etc/sysctl.conf ...
- 微软 workflow 工作流总结
1.状态机工作流 (1)状态机工作流从state1 流转到 state2 到stateN (2) state中有执行状态和退出状态 (3) 在进入下一个步骤(state1 到 state2)前,首先会 ...
- 60秒的快速巡检Linux服务器性能
uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP, ...
- 【原创】Mac book pro入手后,需要做哪些才能开始开展自动化测试工作
2018国庆节,脑袋一热,入手了一台Mac book pro,从此掉坑到了这个异构的操作系统中,因为之前工作中接触了Windows.Linux.Unix等操作系统的诸多版本,基本的操作倒是不成问题,但 ...
- 检查 TCP 80 端口是否正常工作
检查 TCP 80 端口是否正常工作 2017-09-13 22:12:50 目录 Windows Server 2012 Windows Server 2008 CentOS 7.3 Ubuntu ...
- 搭建zookeeper+kafka集群
搭建zookeeper+kafka集群 一.环境及准备 集群环境: 软件版本: 部署前操作: 关闭防火墙,关闭selinux(生产环境按需关闭或打开) 同步服务器时间,选择公网ntpd服务器或 ...
- TestNG实现日志输出
这里介绍的是TestNG中的Report类来实现简单的log输出这个很简单直接看例子吧 package com.rrx.test; import java.io.IOException; import ...
- Openstack EOL 版本离线安装源
当Openstack EOL,网上的yum源无法安装openstack版本和rdo ,则无法正常通过yum源直接安装openstack和rdo ,只是直接安装openstack后,也无法通过yum源 ...
- Hive 特殊日期获取 tips
获取当前日期 SELECT CURRENT_DATE, CURRENT_TIMESTAMP, from_unixtime(unix_timestamp()); 上个月1号 concat(substr( ...