- 浏览: 546144 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
wa114d:
楼主工作几年了,好厉害
一个面试官对面试问题的分析 -
wobuxiaole:
Good,非常好
30岁前男人需要完成的事 -
小逗逗:
Good,非常好
30岁前男人需要完成的事 -
invincibleLiu:
好帖,要顶!(别投我隐藏啊,这是对BBS最原始一种支持)
Java:synchronized修饰符在静态方法与非静态方法上的区别 -
fayedShih:
第三题,不知道对不对
import java.util.con ...
企业牛逼面试题目 高手进来讨论答题
很久没更新 blog 了,工作和一些事情占用了大部分精力,实在是身不由己。今天终于有空整理一下最近用到的东西。
有个朋友的项目需要用到 PDF 报表下载,之前我只做过 Excel 的,相信再做一次 PDF 的下载一定很有趣吧。在网上找了一大圈,似乎 iText 比较符合我的要求,而且这个工具很早很早以前就有了,生命力很旺盛。进入 iText 的主页(http://www.lowagie.com/iText/),发现作者很勤劳,最近2个月都有新版本发布。哪知道现在高兴得太早了,一堆问题接踵而至。
下载倒是很简单,一个iText-2.1.4.jar搞定,然后去找入门文档,进了文档页面,一股浓郁的商业气氛迎面而来,这里只提供了部分文档,除非去买"iText in Action",随后被踢到 iText by Example 页面。好吧,既然这是老牌工具了,肯定有不少中文资料吧,找了一圈,没发现什么和生成并下载相关的 out of box 文档,很多都是经验性的总结和进阶文章。无奈又啃 iText by Example,在这里找到些有用的资源,iText in a Web Application正是我要找的,不过这个例子很简单。通过 Google 之后,又发现要下载一个 CJK 的包(iTextAsian.jar)才能正确显示中文,好吧我去找。很幸运的是在 iText by Example 里找到了这个 jar 的 link,兴致勃勃的跑去下载,结果这是个无效链接,最后在 sourceForge 上才找到,不容易啊。解决了这些问题,想必能够安稳的使用了吧,由于这个项目比较急,没什么耐心一个个的翻阅 iText by Example,想找点捷径,据说 iText 可以从 html 直接生成 PDF,窃喜!找了 apache common 的 httpclient,动态模拟 http 请求来抓 html,根据控制台的 print,的确把 html 抓到了,然后开始转换到 PDF,先解决了中文显示问题,可是后面的问题解决不了了,html 的 table 和 div 这些,转换到 PDF 都走样了... ...
很不爽,看来还是只有老老实实的啃 iText by Example实在点。这次稍微耐心点,一点点的看,首先搞清楚了它的 Font 设置,然后是 Table 和 Cell 的关系,经过反复调试,有点效果了。把代码贴出来,做个标记吧。以免以后又抓狂。
1 package org.rosenjiang.servlet;
2
3 import java.awt.Color;
4 import java.io.IOException;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.springframework.web.context.WebApplicationContext;
15 import org.springframework.web.context.support.WebApplicationContextUtils;
16
17 import org.rosenjiang.service.UserService;
18 import com.lowagie.text.Document;
19 import com.lowagie.text.DocumentException;
20 import com.lowagie.text.Font;
21 import com.lowagie.text.Paragraph;
22 import com.lowagie.text.pdf.BaseFont;
23 import com.lowagie.text.pdf.PdfPCell;
24 import com.lowagie.text.pdf.PdfPTable;
25 import com.lowagie.text.pdf.PdfWriter;
26
27 /*
28 * ReportServlet
29 * @author rosen jiang
30 * @since 2008-12
31 */
32 public class ReportServlet extends HttpServlet {
33
34 /**
35 * Return a PDF document for download.
36 *
37 */
38 public void doGet (HttpServletRequest request, HttpServletResponse response)
39 throws IOException, ServletException {
40 String account_id = request.getParameter("account_id");
41 String search_date_from = request.getParameter("search_date_from");
42 String to = request.getParameter("to");
43 WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
44 UserService userService = (UserService)ctx.getBean("userService");
45 List<Map<String, Object>> list = userService.getAccountActivity(account_id, search_date_from, to);
46 // create PDF document
47 Document document = new Document();
48 try {
49 //set response info
50 response.setContentType("application/x-msdownload;charset=UTF-8");
51 response.setHeader("Content-Disposition","attachment;filename=report.pdf");
52 //open output stream
53 PdfWriter.getInstance(document, response.getOutputStream());
54 // open PDF document
55 document.open();
56 // set chinese font
57 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
58 Font f2 = new Font(bfChinese, 2, Font.NORMAL);
59 Font f6 = new Font(bfChinese, 6, Font.NORMAL);
60 Font f8 = new Font(bfChinese, 8, Font.NORMAL);
61 Font f10 = new Font(bfChinese, 10, Font.NORMAL);
62 Font f12 = new Font(bfChinese, 12, Font.BOLD);
63 //set title
64 document.add(new Paragraph("金融报表", f12));
65 //<br>
66 document.add(new Paragraph(" ",f6));
67 //set sub title
68 document.add(new Paragraph("账户信息", f10));
69 //<br>
70 document.add(new Paragraph(" ", f2));
71 //process business data
72 if(list.size()>0 && list.get(0).get("bankbook_no")!=null){
73 float openBalance = 0;
74 //create table with 7 columns
75 PdfPTable table = new PdfPTable(7);
76 //100% width
77 table.setWidthPercentage(100);
78 table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
79 //create cells
80 PdfPCell cell = new PdfPCell();
81 //set color
82 cell.setBackgroundColor(new Color(213, 141, 69));
83 cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
84 //
85 cell.setPhrase(new Paragraph("交易日", f8));
86 table.addCell(cell);
87 cell.setPhrase(new Paragraph("类型", f8));
88 table.addCell(cell);
89 cell.setPhrase(new Paragraph("备注", f8));
90 table.addCell(cell);
91 cell.setPhrase(new Paragraph("ID", f8));
92 table.addCell(cell);
93 cell.setPhrase(new Paragraph("票号", f8));
94 table.addCell(cell);
95 cell.setPhrase(new Paragraph("合计", f8));
96 table.addCell(cell);
97 cell.setPhrase(new Paragraph("余额", f8));
98 table.addCell(cell);
99 //create another cell
100 PdfPCell newcell = new PdfPCell();
101 newcell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
102
103 Map<String, Object> map = new HashMap<String, Object>();
104 for(int i = 0; i < list.size(); i++){
105 map = list.get(i);
106 String cashInout = map.get("cash_inout").toString();
107 newcell.setPhrase(new Paragraph(map.get("trade_date").toString(), f8));
108 table.addCell(newcell);
109 newcell.setPhrase(new Paragraph(map.get("bankbook_type").toString(), f8));
110 table.addCell(newcell);
111 newcell.setPhrase(new Paragraph(map.get("memo").toString(), f8));
112 table.addCell(newcell);
113 newcell.setPhrase(new Paragraph(map.get("account_id").toString(), f8));
114 table.addCell(newcell);
115 newcell.setPhrase(new Paragraph(map.get("ticket_no").toString(), f8));
116 table.addCell(newcell);
117 newcell.setPhrase(new Paragraph(map.get("amount").toString(), f8));
118 table.addCell(newcell);
119 newcell.setPhrase(new Paragraph(openBalance+"", f8));
120 table.addCell(newcell);
121 if(cashInout.equals("I")){
122 openBalance = openBalance + Float.valueOf(map.get("amount").toString());
123 }else if(cashInout.equals("O")){
124 openBalance = openBalance - Float.valueOf(map.get("amount").toString());
125 }
126 }
127 //print total column
128 newcell.setPhrase(new Paragraph("合计"+openBalance, f8));
129 table.addCell("");
130 table.addCell("");
131 table.addCell("");
132 table.addCell("");
133 table.addCell("");
134 table.addCell("");
135 table.addCell(newcell);
136 document.add(table);
137 }else{
138 PdfPTable table = new PdfPTable(1);
139 table.setWidthPercentage(100);
140 table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
141 PdfPCell cell = new PdfPCell(new Paragraph("暂无数据"));
142 cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
143 table.addCell(cell);
144 document.add(table);
145 }
146 }
147 catch(DocumentException de) {
148 de.printStackTrace();
149 System.err.println("document: " + de.getMessage());
150 }finally{
151 // close the document and the outputstream is also closed internally
152 document.close();
153 }
154 }
155 }
代码结构清晰,本来也没什么东西,就是通过 Spring 调用 service 方法,获取数据后按照 iText 结构输出即可。不过代码里面有个很愚蠢的动作:document.add(new Paragraph(" ",f6)),主要是找不到如何输出空白行,所以只好出此下策。如果哪位有解法,请告知一下。
做技术的确不能太着急,慢慢来,总会找到出口的。
有个朋友的项目需要用到 PDF 报表下载,之前我只做过 Excel 的,相信再做一次 PDF 的下载一定很有趣吧。在网上找了一大圈,似乎 iText 比较符合我的要求,而且这个工具很早很早以前就有了,生命力很旺盛。进入 iText 的主页(http://www.lowagie.com/iText/),发现作者很勤劳,最近2个月都有新版本发布。哪知道现在高兴得太早了,一堆问题接踵而至。
下载倒是很简单,一个iText-2.1.4.jar搞定,然后去找入门文档,进了文档页面,一股浓郁的商业气氛迎面而来,这里只提供了部分文档,除非去买"iText in Action",随后被踢到 iText by Example 页面。好吧,既然这是老牌工具了,肯定有不少中文资料吧,找了一圈,没发现什么和生成并下载相关的 out of box 文档,很多都是经验性的总结和进阶文章。无奈又啃 iText by Example,在这里找到些有用的资源,iText in a Web Application正是我要找的,不过这个例子很简单。通过 Google 之后,又发现要下载一个 CJK 的包(iTextAsian.jar)才能正确显示中文,好吧我去找。很幸运的是在 iText by Example 里找到了这个 jar 的 link,兴致勃勃的跑去下载,结果这是个无效链接,最后在 sourceForge 上才找到,不容易啊。解决了这些问题,想必能够安稳的使用了吧,由于这个项目比较急,没什么耐心一个个的翻阅 iText by Example,想找点捷径,据说 iText 可以从 html 直接生成 PDF,窃喜!找了 apache common 的 httpclient,动态模拟 http 请求来抓 html,根据控制台的 print,的确把 html 抓到了,然后开始转换到 PDF,先解决了中文显示问题,可是后面的问题解决不了了,html 的 table 和 div 这些,转换到 PDF 都走样了... ...
很不爽,看来还是只有老老实实的啃 iText by Example实在点。这次稍微耐心点,一点点的看,首先搞清楚了它的 Font 设置,然后是 Table 和 Cell 的关系,经过反复调试,有点效果了。把代码贴出来,做个标记吧。以免以后又抓狂。
1 package org.rosenjiang.servlet;
2
3 import java.awt.Color;
4 import java.io.IOException;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import javax.servlet.ServletException;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13
14 import org.springframework.web.context.WebApplicationContext;
15 import org.springframework.web.context.support.WebApplicationContextUtils;
16
17 import org.rosenjiang.service.UserService;
18 import com.lowagie.text.Document;
19 import com.lowagie.text.DocumentException;
20 import com.lowagie.text.Font;
21 import com.lowagie.text.Paragraph;
22 import com.lowagie.text.pdf.BaseFont;
23 import com.lowagie.text.pdf.PdfPCell;
24 import com.lowagie.text.pdf.PdfPTable;
25 import com.lowagie.text.pdf.PdfWriter;
26
27 /*
28 * ReportServlet
29 * @author rosen jiang
30 * @since 2008-12
31 */
32 public class ReportServlet extends HttpServlet {
33
34 /**
35 * Return a PDF document for download.
36 *
37 */
38 public void doGet (HttpServletRequest request, HttpServletResponse response)
39 throws IOException, ServletException {
40 String account_id = request.getParameter("account_id");
41 String search_date_from = request.getParameter("search_date_from");
42 String to = request.getParameter("to");
43 WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
44 UserService userService = (UserService)ctx.getBean("userService");
45 List<Map<String, Object>> list = userService.getAccountActivity(account_id, search_date_from, to);
46 // create PDF document
47 Document document = new Document();
48 try {
49 //set response info
50 response.setContentType("application/x-msdownload;charset=UTF-8");
51 response.setHeader("Content-Disposition","attachment;filename=report.pdf");
52 //open output stream
53 PdfWriter.getInstance(document, response.getOutputStream());
54 // open PDF document
55 document.open();
56 // set chinese font
57 BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
58 Font f2 = new Font(bfChinese, 2, Font.NORMAL);
59 Font f6 = new Font(bfChinese, 6, Font.NORMAL);
60 Font f8 = new Font(bfChinese, 8, Font.NORMAL);
61 Font f10 = new Font(bfChinese, 10, Font.NORMAL);
62 Font f12 = new Font(bfChinese, 12, Font.BOLD);
63 //set title
64 document.add(new Paragraph("金融报表", f12));
65 //<br>
66 document.add(new Paragraph(" ",f6));
67 //set sub title
68 document.add(new Paragraph("账户信息", f10));
69 //<br>
70 document.add(new Paragraph(" ", f2));
71 //process business data
72 if(list.size()>0 && list.get(0).get("bankbook_no")!=null){
73 float openBalance = 0;
74 //create table with 7 columns
75 PdfPTable table = new PdfPTable(7);
76 //100% width
77 table.setWidthPercentage(100);
78 table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
79 //create cells
80 PdfPCell cell = new PdfPCell();
81 //set color
82 cell.setBackgroundColor(new Color(213, 141, 69));
83 cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
84 //
85 cell.setPhrase(new Paragraph("交易日", f8));
86 table.addCell(cell);
87 cell.setPhrase(new Paragraph("类型", f8));
88 table.addCell(cell);
89 cell.setPhrase(new Paragraph("备注", f8));
90 table.addCell(cell);
91 cell.setPhrase(new Paragraph("ID", f8));
92 table.addCell(cell);
93 cell.setPhrase(new Paragraph("票号", f8));
94 table.addCell(cell);
95 cell.setPhrase(new Paragraph("合计", f8));
96 table.addCell(cell);
97 cell.setPhrase(new Paragraph("余额", f8));
98 table.addCell(cell);
99 //create another cell
100 PdfPCell newcell = new PdfPCell();
101 newcell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
102
103 Map<String, Object> map = new HashMap<String, Object>();
104 for(int i = 0; i < list.size(); i++){
105 map = list.get(i);
106 String cashInout = map.get("cash_inout").toString();
107 newcell.setPhrase(new Paragraph(map.get("trade_date").toString(), f8));
108 table.addCell(newcell);
109 newcell.setPhrase(new Paragraph(map.get("bankbook_type").toString(), f8));
110 table.addCell(newcell);
111 newcell.setPhrase(new Paragraph(map.get("memo").toString(), f8));
112 table.addCell(newcell);
113 newcell.setPhrase(new Paragraph(map.get("account_id").toString(), f8));
114 table.addCell(newcell);
115 newcell.setPhrase(new Paragraph(map.get("ticket_no").toString(), f8));
116 table.addCell(newcell);
117 newcell.setPhrase(new Paragraph(map.get("amount").toString(), f8));
118 table.addCell(newcell);
119 newcell.setPhrase(new Paragraph(openBalance+"", f8));
120 table.addCell(newcell);
121 if(cashInout.equals("I")){
122 openBalance = openBalance + Float.valueOf(map.get("amount").toString());
123 }else if(cashInout.equals("O")){
124 openBalance = openBalance - Float.valueOf(map.get("amount").toString());
125 }
126 }
127 //print total column
128 newcell.setPhrase(new Paragraph("合计"+openBalance, f8));
129 table.addCell("");
130 table.addCell("");
131 table.addCell("");
132 table.addCell("");
133 table.addCell("");
134 table.addCell("");
135 table.addCell(newcell);
136 document.add(table);
137 }else{
138 PdfPTable table = new PdfPTable(1);
139 table.setWidthPercentage(100);
140 table.setHorizontalAlignment(PdfPTable.ALIGN_LEFT);
141 PdfPCell cell = new PdfPCell(new Paragraph("暂无数据"));
142 cell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER);
143 table.addCell(cell);
144 document.add(table);
145 }
146 }
147 catch(DocumentException de) {
148 de.printStackTrace();
149 System.err.println("document: " + de.getMessage());
150 }finally{
151 // close the document and the outputstream is also closed internally
152 document.close();
153 }
154 }
155 }
代码结构清晰,本来也没什么东西,就是通过 Spring 调用 service 方法,获取数据后按照 iText 结构输出即可。不过代码里面有个很愚蠢的动作:document.add(new Paragraph(" ",f6)),主要是找不到如何输出空白行,所以只好出此下策。如果哪位有解法,请告知一下。
做技术的确不能太着急,慢慢来,总会找到出口的。
发表评论
-
JRobin简介
2011-03-31 14:17 1408link:http://harry.iteye.com ... -
基于JRobin的网络监控管理
2011-03-31 13:45 1011link:http://hongliangpan.iteye. ... -
SVN的标准目录结构:trunk、branches、tags
2011-03-23 16:31 2074我们在一些著名开源项 ... -
从HTTP GET和POST的区别说起
2011-02-24 12:59 1019面试时得到的回答大多 ... -
如何减少网页的内存与CPU占用(zz)
2011-02-24 12:37 1546http://justjavac.iteye.com/blog ... -
开发时候,怎么debug依赖包源码
2011-02-21 16:01 1276编码的时候, 最好把JDK 的DOC/SRC 都纳入到ECLI ... -
httpclient 4
2010-11-24 17:38 10751. HttpClient4.0.1应用指南 ... -
转Java程序命令行下的执行
2010-11-04 12:30 1409IED用惯了,基础都快忘记了 javac 先不说了,环境变 ... -
通过Ssh协议连接到服务器执行执行的指令
2010-11-03 16:28 1776通过Ssh协议连接到服务器执行执行的指令。echo $?这条命 ... -
eclipse remote debug
2010-09-01 12:01 896$TOMCAT_HOME/ bin/ catalina.sh/ ... -
CATALINA_OPTS v JAVA_OPTS - What is the difference?
2010-08-31 19:06 1203There are two environment varia ... -
java.lang.OutOfMemoryError: PermGen space及其解决方法
2010-08-31 18:43 1024SUN JDK+Tomcat 运行服务的时候遇到问题,服 ... -
Tomcat多站点配置方法
2010-07-13 18:03 2565Tomcat多站点配置方法 A. ... -
myeclipse中文乱码 解决方案
2010-06-25 10:32 3355昨晚在Myeclipse导入一个项目,有中文乱码问题,所以郁闷 ... -
WebService之Axis2
2010-04-07 13:18 892http://www.jobedu.com.cn/archiv ... -
utf-8 中文乱码解决方案
2009-12-29 13:56 23891.java类: CharacterEncodingFilte ... -
telnet \socket \ httpproxy 三种客户端实现
2009-11-20 17:41 35461.socket实现方式: public class Tes ... -
书籍推荐
2009-11-17 15:08 1272《现代操作系统概论》《数据库系统概念》《算法与数据结构》《计算 ... -
ant使用
2009-11-05 13:13 998Ant是一种专为java量身订做的构建工具,基础已经了java ... -
web.xml 中的listener、 filter、servlet 加载顺序及其详解
2009-07-17 14:48 1026在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似 ...
相关推荐
通过实践和调试,你可以掌握利用iText从数据库导出大量数据到PDF文档的技能,这在报表生成、数据导出等方面非常实用。 总之,iText是一个强大且灵活的工具,它使得在Java应用中处理PDF文档变得简单。结合数据库技术...
这篇博客"利用iText操作PDF从数据库导出大量数据--汇总(一)"显然讨论了如何利用iText将数据库中的数据高效地导出到PDF文件中,这对于报告生成、数据分析或者报表制作等场景非常有用。 首先,我们需要了解iText的...
在实际开发中,这四个jar包通常一起使用,以实现从数据源获取信息,通过iReport设计报表模板,然后利用iText将报表导出为PDF格式。这种组合方式在企业级应用中非常常见,特别是在需要生成大量定制化报告的场景下。 ...
标题中的“iText导出PDF报表”指的是利用iText库来创建包含各种数据和格式的PDF报告。 首先,我们来详细了解一下iText的核心功能。iText支持从头开始创建PDF文档,包括添加文本、图像、表格、链接等元素。通过它的...
这个简单的demo展示了如何利用Itext库将数据导出为PDF格式,非常适合初学者理解和实践。下面,我们将深入探讨这个知识点,以及如何一步步实现这个功能。 首先,你需要在你的项目中引入ItextSharp库。ItextSharp是...
本篇文章将详细介绍如何利用iText将HTML转换为PDF,并介绍所需的jar包以及相关知识点。 首先,我们需要准备两个关键的jar包,即`iText-2.0.8.jar`和`core-renderer-R8.jar`。`iText-2.0.8.jar`是iText的主要库,...
通过分析和学习这个例子,开发者可以快速掌握在JSP中利用iText生成PDF报表的方法,将其应用到自己的项目中,实现各种复杂的PDF生成需求。例如,结合Spring MVC或Struts框架,可以创建更强大的报表生成服务,提供更...
本文将深入探讨如何利用iText在Java中实现报表的动态生成和填充。 首先,我们来看如何通过编程绘制实现报表的生成。对于内容动态变化的表格,使用iText进行程序化生成是最合适的方法。以下是一般步骤: 1. 创建`...
这篇博客 "freemarker+itext生成PDF" 可能详细介绍了如何结合这两者来生成PDF文件,这在报表生成、发票打印或任何需要静态化输出的场景中非常有用。 首先,让我们了解FreeMarker。FreeMarker是一个基于模板的语言,...
本篇将深入探讨如何利用`iText5`生成PDF报表,并结合FastDFS文件系统进行文件存储,以及将相关信息存入数据库。 首先,`iText5`是`iText`系列的一个版本,它提供了一系列API,使得开发者可以方便地创建、修改和处理...
本资源提供的“itextpdf-5.5.13.jar”,“jacob.jar”以及“jacob.dll”文件是针对Java环境下的文件转PDF操作的重要组件。这些工具库允许开发者通过编程方式将不同类型的文件转换为PDF格式,从而实现自动化处理和...
1. iText相关的jar:这可能包括`itextpdf.jar`,这是iText的主要库,包含了创建和操作PDF的基本功能。 2. Freemarker的jar:例如`freemarker.jar`,这是Freemarker模板引擎的核心库。 3. XMLWorker的jar:例如`...
例如,`com.itextpdf.text.Document` 和 `com.itextpdf.text.Paragraph` 是创建PDF的基本元素。通过这些类,开发者可以构建整个PDF结构,并调用相应的方法完成文档的创建和写入。 总之,iText 5.5.5是处理PDF文档的...
在Java 1.7环境下,我们可以利用IText库来生成PDF,并且设置一个弹出的下载框,让用户可以直接保存生成的PDF文件。这个过程涉及到几个关键步骤: 1. **引入IText库**: 首先,你需要在项目中导入IText的相关依赖。...
通过iText,开发者可以轻松地插入文本、图像、表格,甚至复杂的布局设计,实现自定义的PDF打印功能。 二、PDF基本概念 在深入iText之前,我们需要了解一些PDF的基础知识。PDF(Portable Document Format)是一种跨...
iText 是一个强大的PDF文档处理库,广泛应用于Java和.NET平台。在报表生成领域,iText 提供了丰富的功能,包括创建柱形图、饼图和折线...通过深入理解和实践,你可以充分利用iText的功能,提升报表的视觉质量和功能性。
本文将深入探讨如何使用ITEXT库导出PDF和Word,以及利用Apache POI库导出Excel报表文件。 首先,让我们来了解ITEXT库。ITEXT是一个开源Java库,专门用于创建和修改PDF文档。使用ITEXT,你可以方便地生成包含文本、...
在《iText in Action》第二版书中,作者Bruno Lowagie介绍了如何利用iText这一强大的Java库来创建和操作PDF文档。本书覆盖了iText 5版本,并通过众多实例深入浅出地讲解了各个方面的知识点。 ##### 1.1 PDF基础知识...
在这个"Struts2+IText动态导出PDF示例源码"项目中,开发者利用这两者结合,实现了在Web应用中动态生成PDF文件的功能。这在报表生成、合同制作、证书打印等场景中非常实用。 首先,Struts2作为控制器层框架,负责...
通过以上步骤,你就能成功地利用iText7和FreeMarker生成包含中文和图片的PDF文档了。这个方法灵活且易于维护,适合处理各种复杂的PDF生成需求。在实际应用中,可以根据具体需求调整模板和数据模型,实现更加定制化的...