java PDF添加图层,支持多页图层添加

代码:

  1. import java.io.File;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.util.List;
  5.  
  6. import com.itextpdf.text.DocumentException;
  7. import com.itextpdf.text.Image;
  8. import com.itextpdf.text.pdf.PdfContentByte;
  9. import com.itextpdf.text.pdf.PdfReader;
  10. import com.itextpdf.text.pdf.PdfStamper;
  11.  
  12. public class PdfUtils {
  13.  
  14. /**
  15. * PDF添加图层
  16. *
  17. * @param srcPdf
  18. * 原PDF文件路径
  19. * @param distPdf
  20. * 合成PDF输出路径
  21. * @param layerPathArr
  22. * 图层路径列表,图层名称需为数字(按照图片名称数字顺序合成在PDF对应页数上)
  23. * @return
  24. * @throws IOException
  25. * @throws DocumentException
  26. */
  27. public static String markLocalImage42Dist(String srcPdf, String distPdf, List<String> layerPathArr)
  28. throws IOException, DocumentException {
  29. File srcPdfFile = new File(srcPdf);
  30. if (!srcPdfFile.exists()) {
  31. throw new IllegalArgumentException("找不到需要添加图层的pdf文件");
  32. }
  33.  
  34. PdfReader reader = new PdfReader(srcPdf);
  35. int n = reader.getNumberOfPages(); // PDF页数
  36.  
  37. PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(distPdf));
  38. PdfContentByte over;
  39.  
  40. for (String layerPath : layerPathArr) {
  41. File layerFile = new File(layerPath);
  42. String currentPageNo = layerFile.getName().substring(, layerFile.getName().lastIndexOf(".")); // 图片名称(对应页数)
  43.  
  44. boolean isNum = currentPageNo.matches("[0-9]+");
  45. if (!isNum) {
  46. throw new IllegalArgumentException("图层名称是不是数字");
  47. }
  48.  
  49. Image img = Image.getInstance(layerPath);
  50. img.setAbsolutePosition(, );
  51. if (n > && n >= Integer.parseInt(currentPageNo)) {
  52. over = stamp.getOverContent(Integer.parseInt(currentPageNo));
  53. over.addImage(img);
  54. }
  55. }
  56. stamp.close();
  57. reader.close();
  58. return distPdf;
  59. }
  60.  
  61. }

测试:

  1. public static void main(String[] args) throws IOException, DocumentException {
  2. List<String> imgUrlList = new ArrayList<>();
  3. imgUrlList.add("D:/ts/testPDF/1.png");
  4. //imgUrlList.add("D:/ts/testPDF/2.png");
  5. imgUrlList.add("D:/ts/testPDF/3.png");
  6.  
  7. markLocalImage42Dist("D:/ts/testPDF/testPDF.pdf", "D:/ts/testPDF/testPDF2.pdf", imgUrlList);
  8. }

结果:

    

原PDF:

  

合成后PDF:

  

java PDF添加图层,支持多页图层添加的更多相关文章

  1. Java PDF页面设置——页面大小、页边距、纸张方向、页面旋转

    下面的示例将介绍通过Java编程来对PDF页面进行个性化设置的方法,包括设置页面大小.页边距.纸张方向.页面旋转等.这里有如下多种页面大小尺寸可供选择: 同时,设置文档内容旋转时,可支持如下角度进行内 ...

  2. C# 操作PDF 图层(Layer)——添加、删除图层、设置图层可见性

    前言 通过添加图层,我们可以将文本.图片.表格.图形等元素精确定位于页面指定位置,将这些元素进行叠放.组合形成页面的最终效果.此外,对于页面中已有的图层我们也可以进行设置图层可见性.删除图层等操作.因 ...

  3. java -PDF添加文本水印与图片水印

    java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30; public static void waterMark(Stri ...

  4. 页面直接导出为PDF文件,支持分页与页边距

    将WEB页面直接导出为pdf文件是经常会用到的一个功能,尤其是各种报表系统.总结了一下目前几种主流的做法: 在后端用代码生成pdf文件,比如iText一类: 在后端抓取页面并生成pdf文件,比如pha ...

  5. C#给PDF文档添加文本和图片页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  6. C#添加PDF页眉——添加文本、图片到页眉

    页眉常用于显示文档的附加信息,我们可以在页眉中插入文本或者图形,例如,页码.日期.公司徽标.文档标题.文件名或作者名等等.那么我们如何以编程的方式添加页眉呢?今天,这篇文章向大家分享如何使用了免费组件 ...

  7. 整理了2019年上千道Java面试题,近500页文档,用了1个月时间!

    spring 面试题 1.一般问题 1.1.不同版本的 spring Framework 有哪些主要功能? 1.2.什么是 spring Framework? 1.3.列举 spring Framew ...

  8. 简析Geoserver中获取图层列表以及各图层描述信息的三种方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 实际项目中需要获取到Geoserver中的图层组织以及各图层 ...

  9. 把自己Github上的代码添加Cocoapods支持

    转载请注明原链接:http://www.cnblogs.com/zhanggui/p/6003481.html 一.前言 这两天被cocoapods折磨的心力憔悴.看cocoapods官网的添加支持, ...

随机推荐

  1. Pytest高级进阶之Fixture

    From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...

  2. Laya for H5 之Bug追踪

    Laya For H5之Bug追踪 H5游戏一旦上线后,如何跟踪用户的崩溃日志呢?现在有很多第三方的工具,比如fundebug,其sdk接入简单,只需寥寥几行代码就可以追踪h5游戏的崩溃日志,bug日 ...

  3. 2018-2019-20175334实验二《Java面向对象程序设计》实验报告

    2018-2019-20175334实验二<Java面向对象程序设计>实验报告 一.实验内容及步骤 实验二面向对象程序设计-1 参考 http://www.cnblogs.com/roce ...

  4. 安装pytorch成功但cuda不可用

    贴上我看的教程https://zhuanlan.zhihu.com/p/26871672 一开始想用pycharm装pytorch,但不知道为什么一直失败.后来只能conda pip安装 但conda ...

  5. linux启动脚本,暂停脚本

    启动脚本: #!/bin/sh net_server_id="nw-server-001" net_server_name="cictec-network-bus-ser ...

  6. java核心-多线程-线程类-Callable、Future和FutureTask

    基本概念 <1>Callable,Callable和Runnable差不多,两者都是为那些其实例可能被另一个线程执行的类而设计的,最主要的差别在于Runnable不会 返回线程运算结果,C ...

  7. JAVA的DES加密解密在windows上测试一切正常,在linux上异常

    windows上加解密正常,linux上加密正常,解密时发生 如下异常,异常信息如下: [ERROR] 2018-10-15 09:30:35,998 method:com.iscas.ippc.co ...

  8. Emacs下scheme编程环境的设置

    Scheme编程环境搭建 1.1 安装Chez Scheme git clone https://github.com/cisco/ChezScheme.git cd ChezScheme ./con ...

  9. C# 获取指定路径下的文件结构(树形结构)

    namespace Vue.Content { public class FileNames { public int id { get; set; } public string text { ge ...

  10. selenium常用的模块

    from selenium import webdriver #select模块处理下拉框from selenium.webdriver.support.ui import Select # Keys ...