JAVA 利用iText解析PDF

本文介绍如何在Java中使用iText库处理加密的PDF文件,通过示例代码展示了如何合并PDF文件,并提供了解密PDF的解决方案。

系统对接了一个接口,遇到了利用iText解析PDFURL,解析下来导致文件已加密,损坏的问题。
这篇文章针对于老项目,不能随意升级JDK,升级包的问题。

iText-2.1.7.jar为例:

import com.lowagie.text.pdf.PdfCopy;
import com.lowagie.text.pdf.PdfImportedPage;
import com.lowagie.text.pdf.PdfReader;

import java.io.File;
import java.io.FileOutputStream;
import java.util.List;

/**

  • Created by BugRoot
    */
    public class PDFUtil{

/**

  • @param fileNames pdf的url路径
  • @param outfile 保存pdf文件的地址
    /
    public static boolean mergePdfFiles(List fileNames, File outfile) throws Exception {
    boolean retValue = false;
    com.lowagie.text.Document document = null;
    try {
    String[] files = new String[fileNames.size()];
    for(int i=0;i<fileNames.size();i++){
    files[i]= fileNames.get(i);
    }
    document = new com.lowagie.text.Document(new PdfReader(files[0]).getPageSize(1));
    PdfCopy copy = new PdfCopy(document, new FileOutputStream(outfile));
    document.open();
    for (int i = 0; i < files.length; i++) {
    PdfReader reader = new PdfReader(files[i]);
    int n = reader.getNumberOfPages();
    for (int j = 1; j <= n; j++) {
    document.newPage();
    PdfImportedPage page = copy.getImportedPage(reader, j);
    copy.addPage(page);
    }
    }
    retValue = true;
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    document.close();
    }
    return retValue;
    }
    /
    *
    • 解密
    • @param fileNames pdf的url路径
    • @param outfile 保存pdf文件的地址
    • @return
    • @throws Exception
      */
      public static boolean mergePdfFilesDecrypt(List fileNames, File outfile) throws Exception {
      boolean retValue = false;
      com.lowagie.text.Document document = null;
      try {
      String[] files = new String[fileNames.size()];
      for(int i=0;i<fileNames.size();i++){
      files[i]= fileNames.get(i);
      }
      document = new com.lowagie.text.Document(new PdfReader(files[0]).getPageSize(1));
      PdfCopy copy = new PdfCopy(document, new FileOutputStream(outfile));
      document.open();
      for (int i = 0; i < files.length; i++) {
      PdfReader reader = new PdfReader(files[i]);
      // PdfReader.unethicalreading = true;//不支持
      Field f = PdfReader.class.getDeclaredField(“encrypted”);
      f.setAccessible(true);
      // f.set(reader, Boolean.TRUE);
      f.set(reader, false);
      int n = reader.getNumberOfPages();
      for (int j = 1; j <= n; j++) {
      document.newPage();
      PdfImportedPage page = copy.getImportedPage(reader, j);
      copy.addPage(page);
      }
      }
      retValue = true;
      } catch (Exception e) {
      e.printStackTrace();
      } finally {
      document.close();
      }
      return retValue;
      }
      }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值