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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: itextpdf是一个在Java环境下操作PDF文档的开源库。使用itextpdf可以实现创建、编辑、合并、拆分、转换PDF文档等功能,可广泛应用于企业文档的生成和管理、PDF报告的制作等场景。 itextpdf操作手册对itextpdf库的使用进行了详细介绍。手册主要分为三个部分,分别是前置知识准备、基础使用和高级使用。 前置知识准备部分介绍了需要掌握的Java基础知识、PDF文档的概念和结构、itextpdf的架构以及相关工具的使用。这一部分内容非常重要,对于初次使用itextpdf的开发者尤为重要,因为只有掌握了这些基础知识才能更好地理解后续内容。 基础使用部分介绍了itextpdf库的常用API和使用示例,包括创建PDF文档、添加页面、添加文本、添加图片、添加表格、添加注释等。这一部分内容非常详细,连手动创建PDF文档的每个步骤都有详细的说明和示例,使得用户可以快速上手使用itextpdf。 高级使用部分介绍了itextpdf库的高级特性,包括页面布局、字体处理、表格布局、加密、数字签名等。这是一个应用itextpdf进行开发的进阶部分,需要用户有一定的Java编程基础和itextpdf库的使用经验。 总之,itextpdf操作手册是itextpdf使用者必须掌握的一本工具书,对于想要在企业应用中使用itextpdf进行PDF文档处理的开发者尤为重要。 ### 回答2: iText是一个Java库,用于在PDF文档中创建和操作内容。它可以帮助我们轻松地生成PDF文档,插入文本、图片、表格、列表等内容,并可以进行页面布局和样式定义。 操作手册分为基础用法和高级用法两部分,基础用法介绍了如何在Java代码中创建一个简单的PDF文档,包括设置文档属性、插入文本和图片等。其中也介绍了如何设置字体、颜色和其他样式。 高级用法则介绍了如何更高效地操作PDF文档。举例来说,我们可以通过iText提供的API来合并、拆分和重排PDF文档,实现对文档内容的高效处理。在高级用法中,还会介绍如何设置表格、列表和书签等高级功能。 在学习iText时,我们需要了解Java中的文件和IO操作,以及一些基本的PDF知识,如页面布局和PDF文档结构等。同时,我们可以参考iText官方文档和示例代码,以加深理解。 总的来说,iText为Java程序员提供了一个强大且易用的PDF处理工具。学习iText可以让我们轻松地生成高质量的PDF文档,并可以对文档进行高效的操作和处理。 ### 回答3: itextpdf是一个Java库,用于创建和操作PDF文档。它提供了一系列类和方法来生成、编辑、合并、拆分和加密PDF文档。它还支持添加文本、图形、图像、表格、列表、超链接和书签等元素,以及创建PDF表单、水印和数字签名。 为了使用itextpdf,你需要将其库文件添加到你的Java项目中。一旦你熟悉了它的基本概念和术语,你可以开始创建你的PDF文档。你可以使用iText API来控制PDF文档的几乎所有方面,包括页面大小、旋转和布局,字体、颜色和对齐方式,甚至是PDF的元数据、标签和结构。 当你在处理PDF文档时,一些常用的操作包括读取、修改、添加和删除PDF页面、添加和删除PDF书签、加密和解密PDF文档等。除此之外,itextpdf还支持PDF表单的创建和填写、PDF的数字签名和时间戳签名,以及PDF文档的压缩和优化等广泛用途。 itextpdf的API文档和示例代码都可从其官方网站上获得。由于itextpdf的API非常强大和灵活,因此在开始使用前最好仔细阅读API文档,并参考官方示例以了解如何使用它的各个方面。另外,官方网站上还提供了一个免费的itextpdf教程,涵盖了从入门到高级用法的各种主题,非常有用。 总的来说,itextpdf是一个非常有用的PDF操作工具,可以让你轻松地创建、编辑和处理PDF文档。只要你花费一点时间学习它的API和使用技巧,就能够将其应用于各种应用场景中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值