`

itext java生成pdf

阅读更多

1.PDF模版填充

     首先需要有一个pdf文件作为模版,可以用如adobe acrobat等工具,添加几个文本域在pdf中,下面就是模版完成后的部分截图。







Java代码

/**
* 批量导出PDF(一页为一条数据)
* @param dataList PDF模板数据集合
* @param MoudleUrl PDF模板路径
* @param exportUrl PDF导出路径
*/
public  static boolean exportPDF(ArrayList<Object> dataList ,String MoudleUrl ,String exportUrl){
try{
int isize = dataList.size();
if(isize == 0) return true;//没有数据不导出
FileOutputStream fos = new FileOutputStream(exportUrl);
//ByteArrayOutputStream baos[] = new ByteArrayOutputStream[isize];//每页的pdf流
ByteArrayOutputStream tempBytearray = null;

Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, fos);
doc.open();
PdfImportedPage impPage = null;

//字体
// BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
// Font font = new Font(bf, 12, Font.NORMAL);

for(int i=0;i<isize;i++){
//baos[i] = new ByteArrayOutputStream();
tempBytearray = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(MoudleUrl);
//PdfStamper ps = new PdfStamper(reader, baos[i]);
PdfStamper ps = new PdfStamper(reader, tempBytearray);
AcroFields afs = ps.getAcroFields();
Object moudObj = dataList.get(i);

Field[] fields = moudObj.getClass().getDeclaredFields();
int length = fields.length;
for(int j=0;j<length;j++){
String varName = fields[j].getName();
boolean accessFlag = fields[j].isAccessible();
fields[j].setAccessible(true);
Object varValue = fields[j].get(moudObj);
//如果有值填充值
if(varValue!=null) afs.setField(varName, varValue.toString());
//恢复访问权限
fields[j].setAccessible(accessFlag);
}

ps.setFormFlattening(true);
ps.close();

impPage = pdfCopy.getImportedPage(new PdfReader(tempBytearray.toByteArray()), 1); 
pdfCopy.addPage(impPage);
}

/**取出之前保存的每页内容*/ 
// for (int i = 0; i < isize; i++) { 
//  
// }

doc.close();
System.out.println("pdf 导出成功!");

return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
/**
* 批量导出PDF(一页为多条数据)
* @param dataList 模板数据集合
* @param MoudleUrl PDF模板路径
* @param exportUrl PDF导出路径
* @param pageSize 每页要显示的条数
* @param pageAttribute 每页页面属性
*/
public  static boolean exportPDFTable(ArrayList<Object> dataList ,String MoudleUrl ,String exportUrl ,int pageSize ,Map pageAttribute){
try{
int isize = dataList.size();
int totalPage = (isize/pageSize)+1;
FileOutputStream fos = new FileOutputStream(exportUrl);
ByteArrayOutputStream baos[] = new ByteArrayOutputStream[totalPage];//每页的pdf流

for(int i=0;i<totalPage;i++){
baos[i] = new ByteArrayOutputStream();
PdfReader reader = new PdfReader(MoudleUrl);
PdfStamper ps = new PdfStamper(reader, baos[i]);
AcroFields afs = ps.getAcroFields();

Iterator iter = pageAttribute.entrySet().iterator();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry) iter.next();
String key = entry.getKey().toString();
String val = entry.getValue().toString();
afs.setField(key, val);
}

for(int j=0;j<pageSize;j++){
if(((i*pageSize) + j)>=dataList.size()) break;
Object moudObj = dataList.get((i*pageSize) + j);
Field[] fields = moudObj.getClass().getDeclaredFields();
int length = fields.length;
for(int k=0;k<length;k++){
String varName = fields[k].getName();
boolean accessFlag = fields[k].isAccessible();
fields[k].setAccessible(true);
Object varValue = fields[k].get(moudObj);
//如果有值填充值
if(varValue!=null) afs.setField(varName+(j+1), varValue.toString());
//恢复访问权限
fields[k].setAccessible(accessFlag);
}

}

ps.setFormFlattening(true);
ps.close();
}

Document doc = new Document();
PdfCopy pdfCopy = new PdfCopy(doc, fos);
doc.open();
PdfImportedPage impPage = null;

/**取出之前保存的每页内容*/ 
for (int i = 0; i < totalPage; i++) { 
impPage = pdfCopy.getImportedPage(new PdfReader(baos[i].toByteArray()), 1); 
pdfCopy.addPage(impPage); 
}

doc.close();
System.out.println("pdf 导出成功!");

return true;
}catch(Exception e){
e.printStackTrace();
return false;
}
}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    iText Java生成PDF 加密 水印 - glen的日志 - 网易博客

    iText Java生成PDF 加密 水印 - glen的日志 - 网易博客

    iText JAVA 生成PDF文件

    使用iText生成PDF的基本步骤如下: 1. **初始化PDF文档**:首先,你需要创建一个`Document`对象,这代表了你要创建的PDF文档。你可以设置页面大小、边距和其他文档属性。 2. **创建PDF写入器**:然后,你需要创建...

    itext 生成pdf 目录

    本篇文章将深入探讨如何使用iText来生成PDF的目录。 首先,理解PDF目录的基本结构至关重要。PDF目录通常由一系列层次化的书签构成,每个书签对应文档中的一个部分、章节或子章节。在iText中,这些书签是通过`...

    Java生成pdf文件,解决中文乱码问题.pdf

    iText 库是一个流行的 Java 库,用于生成 PDF 文件。它提供了丰富的功能,包括文档结构、字体、颜色、图形等。使用 iText 库可以生成高品质的 PDF 文件,并解决中文乱码问题。 2. 设置中文字体 在生成 PDF 文件时...

    使用IText生成PDF和WORD文档

    总的来说,IText是一个强大且灵活的库,适用于生成PDF和Word文档。通过学习和掌握其API,开发者可以轻松地创建出符合需求的专业文档。在TestItext文件夹中,你可以找到更多关于IText的源码示例和资源,帮助你进一步...

    itext5生成PDF(含水印文字及图片)

    itext5生成PDF(含水印文字及图片)的源代码,操作说明详细,代码完整可用。

    Java 使用iText7生成带页码的PDF文件(同时生成目录,但是不会合并两个PDF)

    在IT行业中,生成PDF文件是常见的需求,尤其是在报告、文档或证书的生成上。Java作为一个强大的后端开发语言,提供了多种库来实现这一功能。本文将深入探讨如何使用iText7这个库在Java环境中生成带有页码和目录的PDF...

    使用iText生成PDF.doc

    总的来说,iText为开发者提供了一个全面的工具集,使得在Java中生成PDF变得简单高效。通过理解和熟练运用上述知识点,你可以创建满足各种需求的PDF文档。在实际开发中,还可以结合iText的其他高级特性,如书签、...

    itext5.5.10生成PDF

    本文将深入探讨iText 5.5.10在生成PDF方面的核心概念和常用方法,以及如何通过实例来理解和应用这些知识。 首先,生成PDF的基本流程包括创建PdfWriter对象、定义PdfDocument对象和添加内容。在iText中,`PdfWriter`...

    使用iText 7 生成pdf

    **使用iText 7生成PDF** 在IT行业中,PDF(Portable Document Format)是一种广泛用于创建、分享和打印文档的标准格式。iText是一个流行的Java库,它允许开发人员以编程方式生成、修改和处理PDF文件。iText 7是该库...

    Java IText生成PDF

    在本篇文章中,我们将深入探讨如何使用IText在Java环境中生成PDF文档。 首先,你需要在项目中引入IText库。如果是Maven项目,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;com.itextpdf&lt;/groupId&gt; ...

    java使用itext实现pdf文件下载

    1. **通过系统路径下载**:这种方式适用于后台生成PDF后,直接保存到服务器的某个路径,然后提供URL给用户下载。以下是一个简单的示例: ```java import javax.servlet.http.HttpServletResponse; import java.io....

    java通过itext操作pdf模板写入pdf合同数据

    在这个过程中,首先我们需要一个PDF模板,通常由Adobe Acrobat等专业工具生成,然后使用iText库在Java代码中读取模板并写入动态数据。 1. **iText库介绍** iText是开源的Java库,支持PDF 1.7标准,提供了一系列API...

    itext将图片生成PDF(高清版)

    在IT行业中,生成PDF文档是常见的需求,尤其当需要将图片转换为便于分享和打印的格式时。`iText`是一个强大的Java库,专门用于创建、编辑和处理PDF文档。本教程将详细介绍如何使用`iText`将图片转换为高清PDF,并...

    freemarker+itext生成PDF

    总结来说,"freemarker+itext生成PDF"的主题涵盖了使用FreeMarker模板引擎和Itext库在Java环境中动态生成PDF的技术。这是一项实用技能,对于需要自动化生成PDF文档的项目非常有价值。通过学习和实践这个主题,开发者...

    itext5 生成pdf 使用总结

    itext5 生成pdf 使用总结

    java生成pdf文件分页输出并添加水印

    总的来说,通过Java结合Itext库,我们可以方便地生成PDF文件,进行分页输出,并添加自定义的水印。这使得在Java应用中创建专业、美观的PDF文档成为可能。当然,实际操作中还需要考虑更多的细节,如错误处理、字体...

    解决Itext生成PDF中文不换行的jar

    为了解决"Java使用Itext生成PDF中文不换行"的问题,我们可以采取以下几种策略: 1. **设置字体和编码**:确保使用支持中文的字体,如SimSun、Arial Unicode MS等,并正确设置PDF的编码为UTF-8。Itext中的`Font`类...

    java生成PDF字体库包+PDF包亲测成功

    Java生成PDF字体库包与PDF相关的技术涉及到Java编程语言、PDF文档处理以及特定的库,如iText。本文将深入探讨这些关键知识点,以便你更好地理解如何在Java环境中创建和处理PDF文档。 首先,让我们从Java开始。Java...

Global site tag (gtag.js) - Google Analytics