- 浏览: 433823 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (113)
- web (14)
- javaScript (9)
- sql (8)
- tomcat (5)
- jsp (14)
- HTML (7)
- struts 2 (7)
- java SE (5)
- oracle (12)
- hibernate (10)
- spring (5)
- IDE (2)
- Flex (3)
- xml (1)
- eclipse RCP (2)
- SpringSide (0)
- birt (1)
- 系统 (1)
- DB2 (2)
- Spring 数据源 (1)
- IBM WAS (4)
- JMS (1)
- git (1)
- RONE平台 (0)
- jquery (1)
- web dwr (0)
- SVN 版本管理 (1)
- swing (1)
- maven (2)
- JBPM (1)
- javaScript Knockout.js (1)
- javaScript jquery (1)
- 测试 unitils (1)
最新评论
-
FigLiu:
亲测可行,谢谢博主
window.open (参数使用post方式提交) -
smilea001:
为什么我两种方法都用了 ,还是不行
struts2 ognl 异常 -
youjianbo_han_87:
你试过指定他的target属性不,貌似没用。
MzTreeView 1.0 树形控件 -
venn:
不错,正好项目用到birt
birt3.7 集成安装部署 -
zhangyang5023637:
第一个有用,第二个貌似无效。
如何让超链接的 href属性失效
引用
package com.zhaipuhong.j2se.pdf;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Paragraph;
import com.lowagie.text.pdf.PdfWriter;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfPCell;
import java.awt.Color;
public class PdfServlet extends HttpServlet {
private static final long serialVersionUID = -6033026500372479591L;
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// step 1 建立文档对象
Document document = new Document();
try {
//设置文档相应类型
response.setContentType("application/pdf");
PdfWriter.getInstance(document, response.getOutputStream());
// step 3 打开文档
document.open();
//支持中文
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese, 12, com.lowagie.text.Font.NORMAL);
Paragraph pragraph=new Paragraph("你好", FontChinese);
// step 4 向文档中添加内容
document.add(pragraph);
document.add(new Paragraph(" Hello World !"));
document.add(new Paragraph("Date 时间"+new Date().toString()));
document.add(new Paragraph(new Date().toString()));
document.add(new Paragraph(new Date().toString()));
PdfPTable table = new PdfPTable(3);
PdfPCell cell = new PdfPCell(new Paragraph("header with colspan 3"));
cell.setColspan(3);
table.addCell(cell);
table.addCell("1.1");
table.addCell("2.1");
table.addCell("3.1");
table.addCell("1.2");
table.addCell("2.2");
table.addCell("3.2");
cell = new PdfPCell(new Paragraph("cell test1"));
cell.setBorderColor(new Color(255, 0, 0));
table.addCell(cell);
cell = new PdfPCell(new Paragraph("cell test2"));
cell.setColspan(2);
cell.setBackgroundColor(new Color(0xC0, 0xC0, 0xC0));
table.addCell(cell);
document.add(table);
}catch(DocumentException de) {
de.printStackTrace();
System.err.println("document: " + de.getMessage());
}
// step 5: 关闭文档对象
document.close();
}
//支持中文
public Paragraph getChineseString(String chineseString){
Paragraph pragraph=null;
BaseFont bfChinese = null;
try {
bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",
BaseFont.NOT_EMBEDDED);
com.lowagie.text.Font FontChinese = new com.lowagie.text.Font(bfChinese,
12, com.lowagie.text.Font.NORMAL);
pragraph = new Paragraph(chineseString, FontChinese);
}
catch (Exception ex) {
ex.printStackTrace();
}
return pragraph;
}
}
引用
iText经验总结
admin 发表于: 2008-6-05 14:45 来源: pdf之家
因为前些日子在一个项目中用到了iText,稍有收获,便总结于此,以供他人所需。
iText是一个比较底层的pdf库,很多项目的pdf操作都是以它为基础的。像spring,以及另一个比较有名的报表工具jasperreports。简单的pdf报表输出用它比较合适,比较复杂的话使用起来就比较困难了,你要手工编写太多的代码。
比较好的是iText网站上提供相当多的示例代码,比较容易入门。我这里只说一些在它的文档里并没有直接讲到的东西。
1 关于Document
Document的几种构造函数:
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom);
下面两种比较有用,如果是你想定义纸张大小和边缘的时候。对于Margin,iText上提到“You can also change the margins while you are adding content. Note that the changes will only be noticed on the NEXT page. If you want the margins mirrored (odd and even pages), you can do this with this method: setMarginMirroring(true). ”不过,对于table似乎并不好使。table并不会了理会你设定的margin,如果想改变它的magin还是需要去改变它的宽度(setWidth)。
2 pdf表单
使用PdfStamper是可以填充pdf表单的,这样就给出了一种很好的报表生成思路。
word制作报表样式-->acrobat转pdf-->itext填充数据-->输出pdf
这做非常简单,因为可以比较容易的控制pdf的样式。我对于Java的报表工具了解的并不多,不过在jasperreports,即使用GUI工具做一个样式比较复杂的报表也不是怎么容易。比如有那种斜线的表头,比较花哨的嵌套表格。这样的情况还是比较多见的,客户不会关系你实现起来是否困难。不过想要使用这种方式也有不足的地方。首先是acrobat把word转化成pdf的时候,格式总是保持不好,特别的是字体。然后是文件的体积这样生成的pdf会比直接用iText生成的pdf文件大很多,acrobat在pdf里加入了太多无用的信息。初次使用iText填充Adobe Designer生成的pdf表单时会有点小麻烦。在Designer中设计了一个name的text文本框的绑定名为name。照着iText中例子使用使用PdfStamper的setField方法去这样写form.setField("name", "XXXX");并不会成功。原因是Adobe Designer生成的表单名都是具有层次的,它可能是这个样子form1[0].#subform[0].name[0]。不过我们可以用一个方法把它们列出来,只要做一次就知道结构了,可以使用类似下面的代码:
PdfReader reader = new PdfReader("form.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileOutputStream("registered_flat.pdf"));
AcroFields form = stamp.getAcroFields();
for (Iterator it = form.getFields().keySet().iterator(); it
.hasNext();) {
System.out.println(it.next());
}
如果直接用iText编程生成的表单就不会有这样的问题,设定的什么名字就是什么名字。
3 表单元素
pdf并不像html那样具有良好清晰的结构,而是一个有层次的文档类型。在它的maillist里,作者说明了iText虽然可以操作现存的pdf文件但是没办法去还原它的结构的。没办法像html一样,能从一个pdf文件获得一个清晰的“源文件”的。关于层次,可以从iText上得到详细的讲述,获取去看看pdf规范。表单和普通文本是不在一个层上的。没办法适用对待文本表各一样把它们简单的add进Document对象。获取一个cb直接去用绝对定位的方法可以加入表单元素,不过很多的时候因为排版并不能那么简单的去做。就是在html中布局一样可以使用表格定位。想把一个表单元素加入cell,要借助cell的setCellEvent方法。以一个checkbox为例。新建一个类CheckBoxForm,实现PdfPCellEvent接口。需要实现一个cellLayout的方法。
public void cellLayout(PdfPCell cell, Rectangle position, PdfContentByte[] canvases)
position可以好好利用,它包含当前cell的位置信息,你可以用它来确定自己checkbox的位置。
position.top()-position.bottom()就能得到高position.right()-position.left()可以得到长,如果需要这两个值得花可以如此计算。下面的代码就是定义一个宽度为a的checkbox的rectangle 。它在cell中水平居中,垂直也居中。
float bo = (position.top()-position.bottom()-a)/2;
float ao = (position.right()-position.left()-a)/2;
Rectangle rectangle = new Rectangle(position.left() + ao, position
.bottom() + bo, position.left() +ao+ a, position.bottom()+ bo + a);
然后把它加入Document
RadioCheckField tf = new RadioCheckField(writer, rectangle, fieldname,
"f");
tf.setCheckType(RadioCheckField.TYPE_SQUARE);
tf.setBorderWidth(1);
tf.setBorderColor(Color.black);
tf.setBackgroundColor(Color.white);
try {
PdfFormField field = tf.getCheckField();
writer.addAnnotation(field);
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
其它的元素与此类似。
4 PdfPTable和Table
说不上哪种更好用,有时候不能不使用PdfPTable。可惜它只有setColspan方法,没有setRowspan。嵌套的时候也有区别,PdfPTable是用addcell()加入嵌套表的,table则有一个更明了的方法insertTable()。PdfPTable想进行设置border之类的操作要先获得一个默认cell,
pdfPTableName.getDefaultCell().setBorder(Rectangle.NO_BORDER);//设置无框的表
另外在PdfPTable中,一些修饰属性会因为设置的时机不正确而没有效果。如,适用cell的构造函数加入了文本,在cell的setVerticalAlignment()fangfa去设定垂直对齐方式就不会有效。还有一个有意思的不同是table默认外边框是加粗的,而PdfPTable则一样粗细。
5 字体
iText的例子有很多足够用,给出一些pdf的字体名称和编码,如果想使用内嵌字体的话。
语言 PDF 字体名
简体中文 STSong-Light
繁体中文 MHei-Medium
MSung-Light
日语 HeiseiKakuGo-W5
HeiseiMin-W3
韩语 HYGoThic-Medium
HYSMyeongJo-Medium
字符集 编码
简体中文 UniGB-UCS2-H
UniGB-UCS2-V
繁体中文 UniCNS-UCS2-H
UniCNS-UCS2-V
日语 UniJIS-UCS2-H
UniJIS-UCS2-V
UniJIS-UCS2-HW-H
UniJIS-UCS2-HW-V
韩语 UniKS-UCS2-H
UniKS-UCS2-H
必须要有Asian的包才可以用,也可以使用TrueType字体。
发表评论
-
tomcat7
2013-09-26 14:16 0参考: tomcat7 内存配置修改方法 http://zx ... -
jquery chosen
2012-12-12 14:29 0引用 $(function(){ $(".chz ... -
jquery 对select 下拉的一些常用操作备忘
2012-12-12 14:27 1220引用 jQuery获取Select元素,并选择的Text和Va ... -
struts2 输出流展示图片或xml 备忘
2013-07-30 09:02 1677采用非resultType是stream 直接acton方法里 ... -
ThreadLocal + session 保存当前登陆用户信息
2012-09-10 14:11 0一般应用都涉及到取当前登陆人信息, 这里用Session保存当 ... -
使用ant jar命令打包标签tld
2012-08-09 15:02 1822项目自定义了一些JSP标签,想做成jar包引用就好,设计了tl ... -
BigDecimal 值 0E-7
2012-08-04 15:12 10133引用 BigDecimal值‘0’,在IBM的JDK下,我调用 ... -
struts POI 下载excel 的设置
2012-06-14 11:21 1797引用 Struts.xml <result name= ... -
window.open (参数使用post方式提交)
2012-05-31 15:15 30074一般 window.open 传参数都是用Get..方式..在 ... -
使用X-UA-Compatible来设置IE8/IE9兼容模式
2012-05-30 14:34 25344引用 IE 关于X-UA-Compatible ... -
Tomcat内存溢出
2012-03-01 13:09 1132引用 -Xms128M -Xmx512M -XX:Pe ... -
Strut2 URL 标签传参给ACTION只能取到第一参数值问题
2011-07-06 14:03 3048jsp <s:url var="qht&q ... -
freemarker
2011-06-21 10:20 0Freemarke 引用 Freemarker - 几个比较实 ... -
表格组件 JMESA 3 使用--关于服务端分页
2011-06-08 09:33 1980jmesa的官方网站 http://code.google.c ... -
JQuery 一些基础
2011-01-05 10:17 12103.核心对象及常用方法和属性 a)名称 ... -
eclipse下用Ant编译大量java文件时出Java heap space异常解决方法
2009-09-14 13:31 2053用eclipse 开发,在用ant编译web工程时,碰到jav ... -
MzTreeView 1.0 树形控件
2008-12-10 17:32 6812MzTreeView 1.0 树形控件 使用: 1.下载控 ...
相关推荐
IText和iTextAsian是两个在Java和.NET平台上广泛使用的PDF处理库,它们主要用于创建、编辑和处理PDF文档。IText是主要的核心库,而iTextAsian则是一个扩展,专门针对亚洲字符集的支持,如中文、日文和韩文。 IText...
iText是一款广泛使用的Java库,专门用于创建和编辑PDF(Portable Document Format)文件。这个类库使得开发者能够方便地在应用程序中集成PDF生成和修改功能,而无需深入了解PDF的复杂规格。标题中的“iText_pdf.rar_...
iText是一款广泛使用的开源Java库,专门用于生成和编辑PDF文档。这个中文帮助文档提供了详细的指导,帮助开发者理解和使用iText来创建包含丰富内容的PDF文件。以下是对iText库和文档中涉及的关键知识点的详细解释: ...
iText是一款广泛使用的Java库,专门用于创建和编辑PDF文档。它提供了丰富的API,使得开发者可以轻松地在应用程序中添加PDF生成和处理功能。而iTextAsian是iText的一个扩展,专门为支持亚洲语言(如中文、日文和韩文...
iText 是一个流行的Java库,专门用于处理PDF文档。它提供了创建、编辑、读取PDF文件的功能,并且具有高度灵活性和可扩展性。在提供的文件列表中,我们看到几个与iText相关的JAR文件,分别是: 1. itext-rtf-2.1.7....
IText7是一款强大的Java库,专门用于创建和编辑PDF文档。这个"IText7jar集合"可能是指包含多个版本或不同组件的IText7 JAR文件的打包集合,供开发者在不同的项目环境中选择使用。在Java开发中,JAR(Java Archive)...
iText 是一个流行的Java库,用于创建和修改PDF文档。这个压缩包包含了iText7的jar文件和相关的英文文档,同时也包含了一些关于iText5的资料。iText7是iText系列的一个重大升级版本,因此在功能和API设计上与iText5...
在这个场景中,`iText-2.0.7.jar`和`iTextAsian.jar`是两个关键的库文件,它们提供了必要的API来实现这个功能。 `iText`库的核心功能是创建PDF文档,但在2.x版本中,它也支持生成Word文档,虽然这个功能相对较弱,...
iText是一款广泛使用的Java库,专门用于创建和编辑PDF文档。在处理中文字符时,iText可能会遇到一些挑战,因为默认情况下它可能不支持中文字符集。为了克服这个问题,我们引入了iTextAsian.jar,这是一个扩展了iText...
iText是一款广泛使用的Java库,专门用于创建和编辑PDF文档。它提供了丰富的API,使得开发者可以轻松地在应用程序中生成、修改和操作PDF文件。在处理中文内容时,iText通常需要额外的组件来支持汉字的正确显示和排版...
iText和iTextAsian是两个Java库,主要用于生成和处理PDF文档。这两个JAR(Java Archive)文件在IT行业中扮演着重要角色,特别是在自动化文档生成和报表制作的场景下。 iText是一个开源的Java库,它允许开发人员通过...
iText 是一个流行的Java库,专门用于处理PDF文档。它提供了丰富的功能,包括创建、编辑、解析和签署PDF文件。这个压缩包包含了iText库的几个关键组件,具体包括: 1. **iText-2.1.7.jar**: 这是iText的主要库文件,...
iText是一款广泛使用的Java库,专门用于生成和编辑PDF文档。这个入门开发文档将引导你了解如何在Java项目中使用iText来创建PDF文件。首先,我们需要在项目中添加iText的相关依赖,以便使用其提供的各种功能。以下是...
IText是一款著名的开源Java库,专门用于处理PDF文档。在这个特定的场景中,我们讨论的是IText 2.1.7版本的jar包,它包含了处理PDF和导出到Word等格式的功能。以下是对这个库及其相关组件的详细说明: 1. **IText库*...
iText是一款著名的开源Java库,专门用于创建和编辑PDF文档。在标题中提到的"iText5.5中文包"是指iText库的5.5.2版本,它经过优化,能够有效地处理中文字符,为Java开发者提供了一个强大的工具来生成包含中文内容的...
"itext-2.1.7源码包以及 解决iText生成pdf时中文标点存在行首问题的修改class" 这个标题提到了两个关键点。首先,`itext-2.1.7`是开源Java库iText的一个版本,用于创建、修改和操作PDF文档。这个版本的源码包提供了...
《使用iText库在Java中生成PDF和Word文档》 在Java编程中,生成文档是一项常见的任务,尤其在数据报告、合同制作或者自动化流程中。iText是一个强大的库,能够帮助开发者轻松创建和编辑PDF及Word文档。本文将详细...
iText是一款广泛使用的开源Java库,专为处理PDF文档而设计。这个库允许开发者创建、修改、分割和合并PDF文档,以及添加数字签名、表单字段等高级功能。在这个压缩包中,我们有两个版本的iText库:iText-5.0.6.jar和...
在这种情况下,可以使用iTextPDF库以及其针对亚洲字符集的扩展iText-Asian。这两个库提供了强大的功能,让我们能够方便地处理PDF文档,包括添加中文文字水印。以下是对这两个库以及如何在Java中实现这一功能的详细...