Itext操作PDF

引入jar包

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>
<dependency>  
   <groupId>com.itextpdf</groupId>  
   <artifactId>itext-asian</artifactId>  
   <version>5.2.0</version>
  </dependency>


/**

* 合并PDF
* @param PDFone 
* @param PDFtwo
* @param PDFfinal
* @throws Exception 
*/
public static  void mergePDF(String PDFone,String PDFtwo, String PDFfinal) throws Exception{
PdfReader reader1 = new PdfReader(PDFone);  
PdfReader reader2 = new PdfReader(PDFtwo);  

FileOutputStream out = new FileOutputStream(PDFfinal);  

Rectangle rect = new Rectangle(PageSize.A4);  //设置页面大小
Document document = new Document(rect);  
PdfWriter writer = PdfWriter.getInstance(document, out);  

//PdfReportM1HeaderFooter footer=new PdfReportM1HeaderFooter();//添加自定义事件
 //       writer.setPageEvent(footer);  这两句为添加页码代码,先注释掉,需要另外自定义 PdfReportM1HeaderFooter

document.open();  
PdfContentByte cb = writer.getDirectContent();  
  
List<PdfReader> readers = new ArrayList<PdfReader>();  
readers.add(reader1);  
readers.add(reader2);  

int pageOfCurrentReaderPDF = 0;  
Iterator<PdfReader> iteratorPDFReader = readers.iterator();  
  
while (iteratorPDFReader.hasNext()) {
    PdfReader pdfReader = iteratorPDFReader.next();  
  
    while (pageOfCurrentReaderPDF < pdfReader.getNumberOfPages()) {  
        pageOfCurrentReaderPDF++;  
        PdfImportedPage page = writer.getImportedPage(pdfReader, pageOfCurrentReaderPDF);
        document.setPageSize(new Rectangle(page.getWidth(), page.getHeight()));  //设置页面大小
        document.newPage();
        cb.addTemplate(page, 0, 0);  
    }  
    pageOfCurrentReaderPDF = 0;  
}
out.flush();
document.close();
out.close();
}
/**
* 删除指定页
* @param PDFPath PDF路径
* @param pageNum 删除指定页
* @throws Exception 
*/
public static void deletePage(String PDFPath,Integer pageNum) throws Exception{
PdfReader reader = new PdfReader(PDFPath);
List<Integer> list = new ArrayList<Integer>();
int numberOfPages = reader.getNumberOfPages();
for (int i = 1; i <=numberOfPages; i++) {
list.add(i);
}
list.remove(pageNum);
reader.selectPages(list);
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("D:\\" + "deletePageTemp.pdf"));  

stamp.flush();
stamp.close();
reader.close();
//删除原有文件
File old = new File(PDFPath);
old.delete();
File file = new File("D:\\" + "deletePageTemp.pdf");
file.renameTo(new File(PDFPath));//将生成新文件的位置移动至源文件
}
/**
* PDF指定页插入文件
* @param PDFPath 
* @param numPage
* @param insertPath
* @throws Exception
*/
public static void insertPage(String PDFPath,Integer numPage,String insertPath) throws Exception{
PdfReader reader = new PdfReader(PDFPath);
PdfReader readerInsert = new PdfReader(insertPath);
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("D:\\" + "insertPageTemp.pdf"));  
PdfWriter writer = stamp.getWriter();

int numberOfPages = readerInsert.getNumberOfPages();
for (int i = 1; i <= numberOfPages; i++) {//循环添加新增文件内容
stamp.insertPage(numPage+i, readerInsert.getPageSize(i));
stamp.getOverContent(numPage+i).addTemplate(writer.getImportedPage(readerInsert, i), 0, 0);
}
stamp.flush();
stamp.close();
reader.close();
readerInsert.close();

File old = new File(PDFPath);
old.delete();//删除原文件
File file = new File("D:\\" + "insertPageTemp.pdf");
file.renameTo(new File(PDFPath));//将生成新文件的位置移动至源文件
}
/**
* 将图片插入指定页
* @param PDFPath PDF路径
* @param numPage 插入指定页
* @param insertPath 图片路径
* @throws Exception
*/
public static void insertImage(String PDFPath,Integer numPage,String insertPath) throws Exception{
PdfReader reader = new PdfReader(PDFPath);
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("D:\\" + "insertImageTemp.pdf"));  

Image image = Image.getInstance(insertPath);
float width = image.getWidth();
float height = image.getHeight();
float widthA4 = PageSize.A4.getWidth();
float heightA4 = PageSize.A4.getHeight();
float tw=widthA4/width;
float th=heightA4/height;
float percent=tw<th?tw:th;
image.scalePercent(percent*100);//按照原有比例调整图片大小,适应页面尺寸
//计算图片插入正中央位置
float x=(widthA4-width*percent)/2;
float y=(heightA4-height*percent)/2;

image.setAbsolutePosition(x, y);
stamp.insertPage(numPage+1, new Rectangle(PageSize.A4));
stamp.getOverContent(numPage+1).addImage(image);
stamp.flush();
stamp.close();
reader.close();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值