- 浏览: 277144 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
北方狼:
请问,当表格列数过多时,除了调整pdf页面宽度,能否设置分页显 ...
利用itext操作pdf从数据库导出大量数据--功能汇总(一) -
15817048604:
.....................
利用itext操作pdf从数据库导出大量数据--添加水印(四) -
laoma102:
顶个,谢楼主
代理模式,JDK动态代理,SpringAOP来龙去脉 -
穷途末路:
给力,谢谢分享
Excel2003和Excel2007对下拉选择和下拉级联选择的操作以及java程序的调用 -
weir2009:
复杂的交叉表crosstab 怎么处理?
利用itext操作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从数据库导出大量数据--添加水印(四)
通过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从数据库导出大量数据--功能汇总(一)
2013-10-21 00:25 15570【原始需求】 通过SQL及JDBC模式导出各类业务数据,以PD ... -
利用itext操作pdf从数据库导出大量数据--添加水印(四)
2013-10-21 00:16 4140【原始需求】 通过SQL及JDBC模式导出各类业务数据,以PD ... -
利用itext操作pdf从数据库导出大量数据--创建PDF相关(二)
2013-10-21 00:12 4507【原始需求】 通过SQL及JDBC模式导出各类业务数据,以PD ... -
利用itext操作pdf从数据库导出大量数据--汇总(一)
2013-10-21 00:06 0【原始需求】 通过SQL及JDBC模式导出各类业务数据,以PD ... -
kettle应用程序集成代码
2013-06-19 21:32 1757package com.zjhcsoft.kettle.t ... -
转载:hibernate原理及应用知识点
2011-10-22 12:45 1970SSH面试题总结 ... -
上传一个ssh整个的工程,方便搭建基于spring的web应用
2010-12-07 20:36 1028web有struts2,spring hibernate组件 ... -
PIO的EXCEL的写入和导出
2010-11-25 14:16 2145PIO的EXCEL的字体样式,边框样式,背景色样式,下拉选择, ... -
上一篇的flex的远程对象调用,flex和spring集成分页的jar和截图
2010-06-04 22:18 1437需要的jar如附件 返回结果不需要设定特别的java对象和ac ... -
flex远程对象调用,flex和spring的集成,分页
2010-06-04 21:58 2435这里讲解四个例子 1,使用flex的远程调用方式(java的B ... -
j2ee概念规范结构学习
2010-01-11 11:19 1194J2EE规范:就是把把一系 ... -
Jboss下开发ejb应用之一消息驱动bean的应用
2010-01-06 17:28 1875Jboss下开发ejb应用之一消息驱动bean的应用,这是一篇 ... -
Jboss下开发ejb应用之一实体bean的应用
2010-01-05 16:26 1311Jboss下开发ejb应用之一 ... -
Jboss下开发ejb应用之一会话bean的应用
2010-01-05 11:57 1360Jboss下开发ejb应用之一 ... -
根据dhlayer整理的输入提示下拉列表信息
2009-09-24 11:26 1182根据dhlayer整理的输入提示下拉列表信息 这里用的是网络下 ... -
log4j的项目引用
2008-08-06 08:51 1140最近写了一个利用log4j记录方法调用信息(方法名 时间 ... -
freemarker 中的is undefined错误
2008-08-05 16:36 2048freemarker 中的is undefined错误一般都是 ... -
jasperreport报表的使用
2008-06-10 14:24 13521. 下载ireport和jasperreport。不知道就b ... -
使用dwr错误总结
2008-05-26 19:19 16551.是否在spring容器中创建了bean 2.是否在dwr. ... -
开源组件的使用总结之二
2008-05-18 13:10 1109web service 不同项目 不同系统 不同物理位置的 ...
相关推荐
java 利用itext操作pdf从数据库导出大量数据,有详细文档。
NULL 博文链接:https://fruitking.iteye.com/blog/1961421
NULL 博文链接:https://fruitking.iteye.com/blog/1961414
包含 itext-asian-5.2.0.jar itextpdf-5.5.5.jar
java iText 实现从数据库中导出数据到已有的PDF模板
java的PDF生成jar包,包含 iText-5.5.8.jar, iTextAsian.jar, itextpdf-5.5.8, itextpdf-5.5.8-javadoc, itext-xtra-5.5.8, xmlworker-5.5.8。 已打包中文字体
adobe pdf编辑器,解压安装即可使用,配合java利用itextpdf根据模板导出pdf文章中只做模板的方法;
itext-asian-5.2.0及itextpdf-5.5.13.1两个jar包用于处理PDF文件
itextpdf+itext-asian+xmlworker 导出pdf 表格 自动分页中文 目录.rar
NULL 博文链接:https://x125858805.iteye.com/blog/2239773
java 使用IText导出PDF(包含图片、表格、文字等等Demo和依赖包),最全IText使用Demo,下载即可用
通过SQL及JDBC模式导出各类业务数据,以PDF文件格式存放,要求该文件只能查看和打印(不能编辑和篡改),要有公司相关标志和水印功能。 1、生成PDF文件 2、PDF文件注明版权 3、PDF增加文字和图片水印 4、PDF表格列数...
一段经典的处理iText打印pdf表格代码。
适用于android,编译提示有问题的话,在app的Build.gradle的android下加如下代码: packagingOptions { exclude 'com/itextpdf/text/pdf/fonts/cmap_info.txt' }
itext-5 jar包,使用例子:https://developers.itextpdf.com/itext-5-examples; 官方下载地址:https://developers.itextpdf.com/downloads (觉得有帮助的话,可以选择下载,友情打赏1积分)
内含maven仓库在文件itext.txt文件中,含架包,需要先用adobe来生成pdf模板
iText7 用于html转换pdf核心包-html2pdf-1.0.1.jar。。。。
c# winform Itext 实现PDF导出简单demo,适合初学者学习