`

利用itext操作pdf从数据库导出大量数据--创建PDF表格(三)

 
阅读更多
【原始需求】
通过SQL及JDBC模式导出各类业务数据,以PDF文件格式存放,要求该文件只能查看和打印(不能编辑和篡改),文件要有公司相关标志和水印功能。

【需求分析】
1、 通过SQL及JDBC模式导出业务数据,业务数据以表格内容格式存放于PDF文件
2、 PDF文件注明版权
3、 PDF页面中增加水印,公司文字或图片

【设计分析】
1、 生成PDF文件
2、 PDF文件注明版权
3、 PDF增加文字和图片水印
4、 PDF表格列数可能很多,比如1-50列信息,导出时需判断A4纸格式或其他格式宽度。
5、 PDF表格行数量可能超大,比如10万以上,甚至100万以上。
6、 增加水印信息后,文件大小增量应比较小,比如小于5%。

【功能开发】
1、 生成PDF文件
2、 支持中文字体
3、 PDF文件内容为表格,表格有表头
4、 PDF文件内容支持中文,表格内容上下居中,左右居中或左对齐/右对齐
5、 PDF列信息多寡不同,PDF采用页面宽度也能根据列信息按比例调整
6、 PDF行信息超大时写入模式,不能引起内存溢出等问题,有一定的并发性支撑能力。
7、 PDF文件增加作者相关版权信息
8、 PDF页头增加版权相关信息
9、 PDF文件修改权限限制,实现文档只可读取的权限
10、 PDF文件增加文字或图片水印功能,要求文字或图片在整个页面清晰可见。增加的水印信息不能使PDF文件大小增长超过5%。
11、 对PDF文件进行加密

【开发总结】
1、 大数据量写入的内存溢出问题采用文件流模式解决
2、 图片水印需要采用单例图片对象来处理,避免增加图片水印后PDF文件大小猛增
3、 PDF文件生成时,特别是当表格数据比较大时,CPU和JVM内存资源消耗都比较高,这样系统并发性较低。个人笔记本电脑单PDF文件导出时,CPU资源使用率在30%左右,JVM内存资源达到堆大小的极限,因为垃圾回收的缘故避免了内存溢出(已按流式数据处理方式)。
4、 水印的位置需要根据PDF页面大小和水印本身的信息位置范围来确定

利用itext操作pdf从数据库导出大量数据--功能汇总(一)

利用itext操作pdf从数据库导出大量数据--创建PDF相关(二)

利用itext操作pdf从数据库导出大量数据--创建PDF表格(三)

利用itext操作pdf从数据库导出大量数据--添加水印(四)

package com.fruitking.testpdf.util;

import java.awt.Color;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Font;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

public class PDFCreate2Table {
	
	private String[][] normalTableContent = new String[][]{
			{"序号","姓名","年龄","职业","籍贯","学历","单位名称","联系电话","联系地址","备注"},
			{"1","许果","31","软件工程师","浙江杭州","大学本科","浙江水果大王信息技术有限公司","18905710571","浙江省杭州市西湖区三墩镇三墩街188号","他是一名优秀的IT工程师,日常爱好旅游,运动"}
	};
	
	private String[][] columnTooMuchTableContent = new String[][]{
			{"序号","姓名","年龄","职业","籍贯","学历","单位名称","联系电话","联系地址",
				"语文","数学","英语","物理","化学","生物","政治","历史","地理","音乐","美术","体育","课外实践","学校名称","备注"},
			{"1","许果","31","软件工程师","浙江杭州","大学本科","浙江水果大王信息技术有限公司","18905710571","浙江省杭州市西湖区三墩镇三墩街188号",
					"85","95","75","90","90","85","80","90","90","75","65","75","80","石城中学","他是一名优秀的IT工程师,日常爱好旅游,运动"}
	};
	
	/**
	 * 创建一份普通表格的PDF文件
	 * @param fullFilePath
	 * @return
	 */
	public boolean createNormalTable(String fullFilePath,int rowsNumber){
        Document pdfDocument = new Document();
        try {
        	//构建一个PDF文档输出流程
        	OutputStream pdfFileOutputStream = new FileOutputStream(new File(fullFilePath));
        	PdfWriter.getInstance(pdfDocument,pdfFileOutputStream);
        	//设置中文字体和字体样式
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
            Font f8 = new Font(bfChinese, 8, Font.NORMAL);
            //打开PDF文件流
        	pdfDocument.open();
            //创建一个N列的表格控件
            PdfPTable pdfTable = new PdfPTable(normalTableContent[0].length);
            //设置表格占PDF文档100%宽度
            pdfTable.setWidthPercentage(100);
            //水平方向表格控件左对齐
            pdfTable.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
            //创建一个表格的表头单元格
            PdfPCell pdfTableHeaderCell = new PdfPCell();
            //设置表格的表头单元格颜色
            pdfTableHeaderCell.setBackgroundColor(new Color(213, 141, 69));
            pdfTableHeaderCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            for(String tableHeaderInfo : normalTableContent[0]){
            	pdfTableHeaderCell.setPhrase(new Paragraph(tableHeaderInfo, f8));
            	pdfTable.addCell(pdfTableHeaderCell);
            }
            //创建一个表格的正文内容单元格
            PdfPCell pdfTableContentCell = new PdfPCell();
            pdfTableContentCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            pdfTableContentCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
            //表格内容行数的填充
            for(int i = 0;i < rowsNumber;i++){
	            for(String tableContentInfo : normalTableContent[1]){
	            	pdfTableContentCell.setPhrase(new Paragraph(tableContentInfo, f8));
	            	pdfTable.addCell(pdfTableContentCell);
	            }
            }
            pdfDocument.add(pdfTable);
            return true;
        }catch(FileNotFoundException de) {
            de.printStackTrace();
            System.err.println("pdf file: " + de.getMessage());
            return false;
        }catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
            return false;
        }catch(IOException de) {
            de.printStackTrace();
            System.err.println("pdf font: " + de.getMessage());
            return false;
        }finally{
            //关闭PDF文档流,OutputStream文件输出流也将在PDF文档流关闭方法内部关闭
        	if(pdfDocument!=null){
        		pdfDocument.close();
        	}
        }        
    }
	
	/**
	 * 创建一份表格行内容超长的PDF文件
	 * 产生的问题:如果表格行内容足够多时,容易产生Java程序内存溢出问题
	 * 解决办法:采用PDF文件流式写入方式。即表格内容每写入某个数字的行数时,其内容一方面写满物理文件,另一方面释放内存中存留的内容。
	 * @param fullFilePath
	 * @return
	 */
	public boolean createRowTooMuchTable(String fullFilePath,int rowsNumber,int submitAmount){
        Document pdfDocument = new Document();
        try {
        	//构建一个PDF文档输出流程
        	OutputStream pdfFileOutputStream = new FileOutputStream(new File(fullFilePath));
        	PdfWriter.getInstance(pdfDocument,pdfFileOutputStream);
        	//设置中文字体和字体样式
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
            Font f8 = new Font(bfChinese, 8, Font.NORMAL);
            //打开PDF文件流
        	pdfDocument.open();
            //创建一个N列的表格控件
            PdfPTable pdfTable = new PdfPTable(normalTableContent[0].length);
            //设置表格占PDF文档100%宽度
            pdfTable.setWidthPercentage(100);
            //水平方向表格控件左对齐
            pdfTable.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
            //创建一个表格的表头单元格
            PdfPCell pdfTableHeaderCell = new PdfPCell();
            //设置表格的表头单元格颜色
            pdfTableHeaderCell.setBackgroundColor(new Color(213, 141, 69));
            pdfTableHeaderCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            for(String tableHeaderInfo : normalTableContent[0]){
            	pdfTableHeaderCell.setPhrase(new Paragraph(tableHeaderInfo, f8));
            	pdfTable.addCell(pdfTableHeaderCell);
            }
            //创建一个表格的正文内容单元格
            PdfPCell pdfTableContentCell = new PdfPCell();
            pdfTableContentCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            pdfTableContentCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
            //表格内容行数的填充
            for(int i = 1;i < rowsNumber;i++){
	            for(String tableContentInfo : normalTableContent[1]){
	            	pdfTableContentCell.setPhrase(new Paragraph(tableContentInfo, f8));
	            	pdfTable.addCell(pdfTableContentCell);
	            }
	            //表格内容每写满某个数字的行数时,其内容一方面写入物理文件,另一方面释放内存中存留的内容。
	            if((i%submitAmount)==0){
	            	pdfDocument.add(pdfTable);
	            	pdfTable.deleteBodyRows();
                }else if(i==rowsNumber){
                	//如果全部类容完毕且又没达到某个行数限制,则也要写入物理文件中。
                	pdfDocument.add(pdfTable);
                	pdfTable.deleteBodyRows();
                }
            }
            return true;
        }catch(FileNotFoundException de) {
            de.printStackTrace();
            System.err.println("pdf file: " + de.getMessage());
            return false;
        }catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
            return false;
        }catch(IOException de) {
            de.printStackTrace();
            System.err.println("pdf font: " + de.getMessage());
            return false;
        }finally{
            //关闭PDF文档流,OutputStream文件输出流也将在PDF文档流关闭方法内部关闭
        	if(pdfDocument!=null){
        		pdfDocument.close();
        	}
        }        
    }
	
	/**
	 * 创建一份表格列信息超长的PDF文件
	 * 产生的问题:如果表格行列信息足够多时,默认的A4纸格式大小文档版面把列信息压缩得不好看
	 * 解决办法:采用A3,A2,A1,A0等宽度更宽的页面板式
	 * @param fullFilePath
	 * @return
	 */
	public boolean createColumnTooMuchTable(String fullFilePath,int rowsNumber){
        Document pdfDocument = new Document(PageSize.A2,50,50,50,50);
        try {
        	//构建一个PDF文档输出流程
        	OutputStream pdfFileOutputStream = new FileOutputStream(new File(fullFilePath));
        	PdfWriter.getInstance(pdfDocument,pdfFileOutputStream);
        	//设置中文字体和字体样式
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
            Font f8 = new Font(bfChinese, 8, Font.NORMAL);
            //打开PDF文件流
        	pdfDocument.open();
            //创建一个N列的表格控件
            PdfPTable pdfTable = new PdfPTable(columnTooMuchTableContent[0].length);
            //设置表格占PDF文档100%宽度
            pdfTable.setWidthPercentage(100);
            //水平方向表格控件左对齐
            pdfTable.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
            //创建一个表格的表头单元格
            PdfPCell pdfTableHeaderCell = new PdfPCell();
            //设置表格的表头单元格颜色
            pdfTableHeaderCell.setBackgroundColor(new Color(213, 141, 69));
            pdfTableHeaderCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            for(String tableHeaderInfo : columnTooMuchTableContent[0]){
            	pdfTableHeaderCell.setPhrase(new Paragraph(tableHeaderInfo, f8));
            	pdfTable.addCell(pdfTableHeaderCell);
            }
            //创建一个表格的正文内容单元格
            PdfPCell pdfTableContentCell = new PdfPCell();
            pdfTableContentCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            pdfTableContentCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
            //表格内容行数的填充
            for(int i = 0;i < rowsNumber;i++){
	            for(String tableContentInfo : columnTooMuchTableContent[1]){
	            	pdfTableContentCell.setPhrase(new Paragraph(tableContentInfo, f8));
	            	pdfTable.addCell(pdfTableContentCell);
	            }
            }
            pdfDocument.add(pdfTable);
            return true;
        }catch(FileNotFoundException de) {
            de.printStackTrace();
            System.err.println("pdf file: " + de.getMessage());
            return false;
        }catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
            return false;
        }catch(IOException de) {
            de.printStackTrace();
            System.err.println("pdf font: " + de.getMessage());
            return false;
        }finally{
            //关闭PDF文档流,OutputStream文件输出流也将在PDF文档流关闭方法内部关闭
        	if(pdfDocument!=null){
        		pdfDocument.close();
        	}
        }        
    }
	
	/**
	 * 创建一份表格列信息超长的PDF文件
	 * 产生的问题:如果表格行列信息足够多时,默认的A4纸格式大小文档版面把列信息压缩得不好看;
	 * 产生的问题:如果表格行内容足够多时,容易产生Java程序内存溢出问题
	 * 解决办法:采用A3,A2,A1,A0等宽度更宽的页面板式;
	 * 解决办法:采用PDF文件流式写入方式。即表格内容每写入某个数字的行数时,其内容一方面写满物理文件,另一方面释放内存中存留的内容。
	 * @param fullFilePath
	 * @return
	 */
	public boolean createRowsAndColumnTooMuchTable(String fullFilePath,int rowsNumber,int submitAmount){
		Document pdfDocument = new Document(PageSize.A2,50,50,50,50);
        try {
        	//构建一个PDF文档输出流程
        	OutputStream pdfFileOutputStream = new FileOutputStream(new File(fullFilePath));
        	PdfWriter.getInstance(pdfDocument,pdfFileOutputStream);
        	//设置中文字体和字体样式
            BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);  
            Font f8 = new Font(bfChinese, 8, Font.NORMAL);
            //打开PDF文件流
        	pdfDocument.open();
            //创建一个N列的表格控件
            PdfPTable pdfTable = new PdfPTable(columnTooMuchTableContent[0].length);
            //设置表格占PDF文档100%宽度
            pdfTable.setWidthPercentage(100);
            //水平方向表格控件左对齐
            pdfTable.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
            //创建一个表格的表头单元格
            PdfPCell pdfTableHeaderCell = new PdfPCell();
            //设置表格的表头单元格颜色
            pdfTableHeaderCell.setBackgroundColor(new Color(213, 141, 69));
            pdfTableHeaderCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            for(String tableHeaderInfo : columnTooMuchTableContent[0]){
            	pdfTableHeaderCell.setPhrase(new Paragraph(tableHeaderInfo, f8));
            	pdfTable.addCell(pdfTableHeaderCell);
            }
            //创建一个表格的正文内容单元格
            PdfPCell pdfTableContentCell = new PdfPCell();
            pdfTableContentCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
            pdfTableContentCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE);
            //表格内容行数的填充
            for(int i = 0;i < rowsNumber;i++){
	            for(String tableContentInfo : columnTooMuchTableContent[1]){
	            	pdfTableContentCell.setPhrase(new Paragraph(tableContentInfo, f8));
	            	pdfTable.addCell(pdfTableContentCell);
	            }
	            //表格内容每写满某个数字的行数时,其内容一方面写入物理文件,另一方面释放内存中存留的内容。
	            if((i%submitAmount)==0){
	            	pdfDocument.add(pdfTable);
	            	pdfTable.deleteBodyRows();
                }else if(i==rowsNumber){
                	//如果全部类容完毕且又没达到某个行数限制,则也要写入物理文件中。
                	pdfDocument.add(pdfTable);
                	pdfTable.deleteBodyRows();
                }
            }
            return true;
        }catch(FileNotFoundException de) {
            de.printStackTrace();
            System.err.println("pdf file: " + de.getMessage());
            return false;
        }catch(DocumentException de) {
            de.printStackTrace();
            System.err.println("document: " + de.getMessage());
            return false;
        }catch(IOException de) {
            de.printStackTrace();
            System.err.println("pdf font: " + de.getMessage());
            return false;
        }finally{
            //关闭PDF文档流,OutputStream文件输出流也将在PDF文档流关闭方法内部关闭
        	if(pdfDocument!=null){
        		pdfDocument.close();
        	}
        }        
    }

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		PDFCreate2Table pdfCreate2Table = new PDFCreate2Table();
		long startTime1 = System.currentTimeMillis();
		boolean result1 = pdfCreate2Table.createNormalTable("D:/temp/pdftest/21表格正常内容文档.pdf", 500);
		long endTime1 = System.currentTimeMillis();
		System.out.println("表格正常内容的pdf文档创建结果:" + result1+"。总计花费时间:"+((endTime1-startTime1)/1000)+"秒");
		System.out.println("--------------------------------------------------------------------------");
		long startTime2 = System.currentTimeMillis();
		boolean result2 = pdfCreate2Table.createRowTooMuchTable("D:/temp/pdftest/22表格行信息超长文档.pdf", 500000,2000);
		long endTime2 = System.currentTimeMillis();
		System.out.println("表格行信息超长的pdf文档创建结果:" + result2+"。总计花费时间:"+((endTime2-startTime2)/1000)+"秒");
		System.out.println("--------------------------------------------------------------------------");
		long startTime3 = System.currentTimeMillis();
		boolean result3 = pdfCreate2Table.createColumnTooMuchTable("D:/temp/pdftest/23表格列信息超长文档.pdf", 5000);
		long endTime3 = System.currentTimeMillis();
		System.out.println("表格行信息超长的pdf文档创建结果:" + result3+"。总计花费时间:"+((endTime3-startTime3)/1000)+"秒");
		System.out.println("--------------------------------------------------------------------------");
		long startTime4 = System.currentTimeMillis();
		boolean result4 = pdfCreate2Table.createRowTooMuchTable("D:/temp/pdftest/24表格行列都信息超长文档.pdf", 200000,2000);
		long endTime4 = System.currentTimeMillis();
		System.out.println("表格行列信息都超长的pdf文档创建结果:" + result4+"。总计花费时间:"+((endTime4-startTime4)/1000)+"秒");
		
	}

}
分享到:
评论

相关推荐

    利用itext操作pdf从数据库导出大量数据--汇总(一)

    这篇博客"利用iText操作PDF从数据库导出大量数据--汇总(一)"显然讨论了如何利用iText将数据库中的数据高效地导出到PDF文件中,这对于报告生成、数据分析或者报表制作等场景非常有用。 首先,我们需要了解iText的...

    利用itext操作pdf从数据库导出大量数据--功能汇总(一)

    标题 "利用itext操作pdf从数据库导出大量数据--功能汇总(一)" 提到的是一个关于使用iText库在Java环境中操作PDF文档,并从数据库中导出大量数据的实践教程。iText是一个流行的开源Java库,专门用于创建、修改和...

    利用itext操作pdf从数据库导出大量数据

    通过实践和调试,你可以掌握利用iText从数据库导出大量数据到PDF文档的技能,这在报表生成、数据导出等方面非常实用。 总之,iText是一个强大且灵活的工具,它使得在Java应用中处理PDF文档变得简单。结合数据库技术...

    java iText 实现从数据库中导出数据到已有的PDF模板

    Java中的iText库是一个强大的...总的来说,Java结合iText实现从数据库导出数据到PDF模板涉及了数据库操作、Java I/O、PDF处理和数据映射等多个技术点。理解并掌握这些技能,对于开发高效、灵活的数据导出功能至关重要。

    itext生成pdf文件-表格

    在IT行业中,生成PDF文件是一...总之,iText是一个强大且灵活的PDF处理库,通过熟练掌握`PdfPTable`的使用,可以轻松创建各种复杂的PDF表格。结合实际项目需求和提供的文档资料,您可以进一步提升在PDF生成方面的技能。

    iText输出pdf表格

    通常,`Print05019Service.java`会包含业务逻辑,如获取数据源,`Print05019.java`则负责将这些数据转化为PDF表格。服务类可能会调用数据库查询或者处理其他数据源,然后将结果传递给视图层,即`Print05019.java`,...

    JAVA ITEXT 导出试卷

    开发者可能通过创建一个`PaperWriter`类,封装了试卷生成的逻辑,包括读取试题数据(可能是从数据库、CSV文件或XML文件中获取),然后使用iText将这些数据转换为PDF格式。`PaperWriter`可能包含了一系列方法,如`...

    springboot使用itext生成pdf并保存到本地

    本教程将探讨如何利用iText库在Spring Boot应用中从HTML页面生成PDF,并进行一系列的定制化操作,如添加页眉、页码、水印、目录以及二维码。 首先,iText是一个强大的Java库,专门用于创建和编辑PDF文档。它提供了...

    java导出pdf、加表格、加水印

    在Java开发中,导出PDF、添加表格以及加水印是常见的需求,这些功能可以用于创建报告、发票、证书等文档。PDF(Portable Document Format)是一种广泛应用的文档格式,能够跨平台保持一致的布局和样式。下面将详细...

    导出PDF (iText实现) PdfDownloadDS

    标题中的“导出PDF (iText实现) PdfDownloadDS”指的是使用iText库来生成PDF文档的示例或服务,可能是一个数据下载系统,其中“DS”可能代表“Download Service”。iText是一个流行的Java库,它允许开发人员创建、...

    itext-5.5.6

    3. **表格处理**:iText 5.5.6在处理表格方面表现出色,支持动态添加行和列,合并单元格,调整表格样式,以及数据的导入导出。这对于需要将数据库数据转换为PDF格式的企业来说非常实用。 4. **Excel支持**:虽然...

    itext PDF报表

    - 企业内部系统,如CRM或ERP,经常使用iText来导出用户界面的数据为PDF格式,便于打印和分享。 7. **学习资源** - iText官方文档提供了详细的API参考和示例代码,是学习iText的好起点。 - 书籍《iText in Action...

    利用iText在JSP中生成PDF报表.rar源码都有 和列子

    在JSP(JavaServer Pages)环境中,开发者经常使用iText来动态生成PDF报表,这在数据导出、报告生成或者电子发票等场景中非常常见。这个压缩包“利用iText在JSP中生成PDF报表.rar”提供了一个实例,帮助我们理解如何...

    Datawindow 导出到PDF文件

    它可以动态地从数据库中获取数据,支持多种数据源,如SQL Server、Oracle等,并提供了丰富的样式和格式设置选项,使用户可以创建复杂的报表和界面。 2. **PDF导出的功能**: 将Datawindow导出为PDF格式,主要是...

    java根据模板导出PDF详细教程(包含统计图)

    首先,iText是一个强大的Java库,专门用于创建和操作PDF文档。它提供了丰富的API,可以用来添加文本、图像、表格等各种元素到PDF中,同时还支持PDF的读取和修改。在我们的场景中,iText将作为生成PDF的主要工具,...

    easypoi导入导出excel表格.pdf

    在Java开发中,对于数据的导入导出,尤其是Excel表格,是一种非常常见的需求。而easypoi为我们提供了简洁的方式来实现这一功能。 ### eapoi导出导入概述 easypoi是一个基于Apache POI的简单易用的Java Excel操作...

    itext 导出 word 实例

    本实例将重点讲解如何利用iText来导出Word表格,这对于需要将数据从应用程序导出到可编辑文档的场景非常有用。 首先,我们需要理解iText中的`Document`类是创建PDF或Word文档的基础。在创建Word表格的实例中,我们...

    itext导出pdf

    在标题中提到的"itext插件导出pdf文档"实际上是指使用IText库来编写程序,将数据或者内容输出为PDF格式的文件。 **IText的使用场景** 1. **报告生成**:IText非常适合用来生成动态报告,例如业务分析报告、财务...

Global site tag (gtag.js) - Google Analytics