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(0, layerFile.getName().lastIndexOf(".")); // 图片名称(对应页数)

    boolean isNum = currentPageNo.matches("[0-9]+");
    if (!isNum) {
     throw new IllegalArgumentException("图层名称是不是数字");
    }

    Image img = Image.getInstance(layerPath);
    img.setAbsolutePosition(0, 0);
    if (n > 0 && 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:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现Html转Pdf的方法

    本文实例讲述了Java实现Html转Pdf的方法.分享给大家供大家参考.具体如下: package test; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream; import org.xhtmlrenderer.pdf.ITextFontResolver; import org.xhtmlrenderer.pdf.ITextRenderer; import com.lowagie.

  • java根据模板动态生成PDF实例

    一.需求说明: 根据业务需要,需要在服务器端生成可动态配置的PDF文档,方便数据可视化查看. 二.解决方案: iText+FreeMarker+JFreeChart生成可动态配置的PDF文档 iText有很强大的PDF处理能力,但是样式和排版不好控制,直接写PDF文档,数据的动态渲染很麻烦. FreeMarker能配置动态的html模板,正好解决了样式.动态渲染和排版问题. JFreeChart有这方便的画图API,能画出简单的折线.柱状和饼图,基本能满足需要. 三.实现功能: 1.能动态配置P

  • java实现PPT转PDF出现中文乱码问题的解决方法

    ppt转成pdf,原理是ppt转成图片,再用图片生产pdf,过程有个问题,不管是ppt还是pptx,都遇到中文乱码,编程方框的问题,其中ppt后缀网上随便找就有解决方案,就是设置字体为统一字体,pptx如果页面是一种中文字体不会有问题,如果一个页面有微软雅黑和宋体,就会导致部分中文方框,怀疑是poi处理的时候,只读取第一种字体,所以导致多个中文字体乱码. 百度和谷歌都找了很久,有看到说apache官网有人说是bug,但他们回复说是字体问题,这个问题其实我觉得poi可能可以自己做,读取原来字体设置

  • java使用pdfbox操作pdf文件示例

    还有一个用于创建PDF文件的项目----iText. PDFBox下面有两个子项目:FontBox是一个处理PDF字体的java类库:JempBox是一个处理XMP元数据的java类库. 一个简单示例: 要引入pdfbox-app-1.6.0.jar这个包. 复制代码 代码如下: package pdf; import java.io.File;import java.net.MalformedURLException; import org.apache.pdfbox.pdmodel.PDDo

  • java中输出pdf文件代码分享

    package snake; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import com.lowagie.text.Document; import com.lowagie.text.DocumentException; import com.lowag

  • Java开源工具iText生成PDF简单实例

    iText下载页面: http://sourceforge.net/projects/itext/files/ 1.创建简单的PDF文件 package console.pdf; import java.io.FileNotFoundException; import java.io.FileOutputStream; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com

  • java中pdf转图片的实现方法

    JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用. 一.icepdf.有收费版和开源版,几种方法里最推荐的.转换的效果比较好,能识别我手头文件中的中文,就是转换后可能字体的关系部分字间距有点宽.因为,字体支持是要收费的,所以转换的图片会带有官方的水印.去水印的方法可以查看另一篇文章:icepdf去水印方法 1.下载icepdf的架包,并导入项目中,这里用到4个,如下: 2.附上代码例子: String filePath = "c:/test.pdf

  • Java生成PDF文件的实例代码

    复制代码 代码如下: package com.qhdstar.java.pdf; import java.awt.Color;import java.io.FileOutputStream; import com.lowagie.text.Chapter;import com.lowagie.text.Document;import com.lowagie.text.Font;import com.lowagie.text.FontFactory;import com.lowagie.text.

  • java控制Pdf自动打印的小例子

    复制代码 代码如下: public byte[] autoPrintPdf(byte[] pdf_byte) { ByteArrayOutputStream bos=null;  try {   PdfReader reader = new PdfReader(pdf_byte);   bos = new ByteArrayOutputStream();   PdfStamper ps = new PdfStamper(reader, bos);   StringBuffer script =

  • java在pdf中生成表格的方法

    1.目标 在pdf中生成一个可变表头的表格,并向其中填充数据.通过泛型动态的生成表头,通过反射动态获取实体类(我这里是User)的get方法动态获得数据,从而达到动态生成表格. 每天生成一个文件夹存储生成的pdf文件(文件夹的命名是年月日时间戳),如:20151110 生成的文件可能在毫秒级别,故文件的命名规则是"到毫秒的时间戳-uuid",如:20151110100245690-ece540e5-7737-4ab7-b2d6-87bc23917c8c.pdf 通过读取properti

随机推荐