itext读取pdf表格.docx
《itext读取pdf表格.docx》由会员分享,可在线阅读,更多相关《itext读取pdf表格.docx(8页珍藏版)》请在冰豆网上搜索。
![itext读取pdf表格.docx](https://file1.bdocx.com/fileroot1/2023-1/2/16085597-9ddd-402b-a502-5e9365b1194b/16085597-9ddd-402b-a502-5e9365b1194b1.gif)
itext读取pdf表格
竭诚为您提供优质文档/双击可除
itext,读取pdf表格
篇一:
itext中table和pdftable的区别
itext中pdfptable和table区别
1.itextsharp.text.table的Rowspan方法可以合并行,缺点是,每行的高度是根据内容自动调整的.
2.pdfptable的minimumheight方法可以设置行的高度,但是不能合并行.
3.现在的问题是既要能合并行,又要能设置行的高度.
pdfptable的pdfpcell有个方法disableborderside
(1);
disableborderside();方法有一个参数,有四个值1,2,4,8分别对应每行的上,下,左,右四个边框.
pdfptable每行的四个边框默认是显示的.要想隐藏上边框,disableborderside();方法的参数设置为1就行了.
这样就pdfptable就可以变相地实现合并行.唯一不足的是合并行里面的内容要动态实现就不好调整了.
例子1:
(pdfptable的用法)
stringoption2="1,选择题测试题目选择题测试题目选择题测试题目选择题测试题目选择题测试题目选择题测试题目选择题测试题目";
paragraphoptions2=newparagraph(option2,newFont(bfchinese,
12));
options1.setalignment(element.align_leFt);
doc.add(options2);
pdfptabletable1=newpdfptable(4);
table1.sethorizontalalignment(element.align_middle);inthws1[]={15,30,15,30,};
table1.setwidths(hws1);
table1.settotalwidth(100);
image.scaleabsolute(100,100);
phrasecontent=newphrase("a选择题选项测试,加图片的的。
选择题选项测试,加图片的的。
选择题选项测试,加图片的的。
",font);
pdfpcellcellleft1=newpdfpcell(content);
cellleft1.setcolspan
(2);
cellleft1.sethorizontalalignment(element.align_leFt);cellleft1.disableborderside
(1);
cellleft1.disableborderside
(2);
cellleft1.disableborderside(4);
cellleft1.disableborderside(8);
table1.addcell(cellleft1);
pdfpcellcellright1=newpdfpcell(image);
cellright1.setcolspan
(2);
cellright1.sethorizontalalignment(element.align_centeR);cellright1.disableborderside
(1);
cellright1.disableborderside
(2);
cellright1.disableborderside(4);
cellright1.disableborderside(8);
table1.addcell(cellright1);
例子2:
(table的用法)
pdfptabletable=newpdfptable
(2);//两列
35table.setwidthpercentage(100);
36//传入的对象信息
37count=list.size();
//避免因为最后一行数据由于不能满足总列数而导致itext自动将其去掉,38而生成一些多余的数
39intcolumn=2;
40intpersons=count;
41intyushu=persons%2;
42inttmppersons=persons+(column-yushu);
43stringbarcodestring="";
44stringbarcode="";
45//对象信息输入pdf文件
46for(inti=0;i 47if(i 48//构造个两列一行的表格
49pdfptablemytable=newpdfptable
(2);
50//插入图片
51imageimage=image.getinstance("image路径");
52mytable.addcell(image);
53mytable.setwidthpercentage(80);
54stringcntext="测试";
55mess=newparagraph(cntext,newcom.lowagie.text.Font(bfchinese,11));56//第二列放文字信息
57mytable.addcell(mess);
58//在单元格中放置构造好的一个表格59table.addcell(mytable);
篇二:
基于bs的java+itext导出pdF报表
常常会需要按照模板把数据库的数据整理打印出来,尝试过ireport、word、pdF,各有各得优点,pdf在使用上是非常方便的,只要制作好模板,基本上就算是成功了一半了。
下面完整的把web工程中到处pdf的流程列出来,希望对网友们有点帮助。
1.制作模板
1)首先,在word里面画好表格(注意是表格,刚开始的时候觉得表格对格式不好控制,就用画图工具里面的矩形画,那样是不行的),按照需要打印的格式。
这一步是很重要的,因为如果word表格需要修改的话,会引起后面很多修改,工作量是很大的,所有提醒网友一定要确定最终模板后再进行操作。
2)然后就是导出pdf了。
安装adobeacrobat(我用的是adobeacrobat8professional),网上可以找到安装程序。
安装后word里面会出现导出为pdf的控件,,如果没有的话也可以选择文件--打印,打印机中选择adobepdf,打印出pdf。
3)修改pdf模板。
用adobeacrobat打开pdf模板,运行“表单--运行表单域识别”,该工具就会自动识别出需要填写内容的表格。
如果有个别地方不能识别,可以点击“视图--工具栏--表单”找出表单工具,
点击
文本的地方画出文本域。
双击识别出的文本域(),修改“名称(当作该文本,可以在需要输入域的标志,程序中给该字段赋值就是通过这个标志进行的,所以这个名字不能重复,而且最好是有一定意义的)”、“外观--字体(
2.导出代码
1)加载所需jar包,itext-2.1.3.jar(导出pdf所需包),itextasian.jar(亚洲语言包)。
2)整段代码如下:
)”,所有文本域都修改好保存。
1.publicvoidgenqRb()throwsioexception{
2.
3.
4.httpservletRequestrequest=servletactioncontext.getRequest();
5.httpservletResponseresponse=servletactioncontext.getResponse();
6.response.reset();
7.bytearrayoutputstreamba=newbytearrayoutputstream();
8.bytearrayoutputstreamtotalba=newbytearrayoutputstream();
9.pushbuttonFieldpushbuttonField=null;
10.stringpath=request.getsession().getservletcontext().getRealpath("/");
11.try{
12./*打开已经定义好字段以后的pdf模板*/
13.stringtemplatepdF=path+"pdf//qrb_zsb.pdf";
14.
15./*使用中文字体*/
16.baseFontbf=baseFont.createFont("stsong-light","unigb-ucs2-h",
17.baseFont.not_embedded);
18.FontFontchinese=newFont(bf,8,Font.noRmal);
19.Fontfontchinesesmall=newFont(bf,6,Font.noRmal);
20.
21.pdfReaderreader=null;
22.pdfstamperstamp=null;
23.acroFieldsform=null;
24.pdfcopyFieldscopy=newpdfcopyFields(totalba);
25.reader=newpdfReader(templatepdF);
26./*将要生成的目标pdF文件名称*/
27.ba=newbytearrayoutputstream();
28.stamp=newpdfstamper(reader,ba);
29.
30./*取出报表模板中的所有字段*/
31.form=stamp.getacroFields();
32./*为字段赋值,注意字段名称是区分大小写的*/
33.form.setFieldproperty("name","textfont",bf,null);
34.
35.......
36.
37.//获取数据库中的数据
38.bmxxbmxx=listbmxx();
39.
40.form.setField("xm",bmxx.getxm());
41.stamp.setFormFlattening(true);
42.reader.close();
43.stamp.close();
44.copy.adddocument(newpdfReader(ba.tobytearray()));
45.ba.close();
46.copy.close();
47.reader=newpdfReader(totalba.tobytearray());
48.stamp=newpdfstamper(reader,ba);
49.form=stamp.getacroFields();
50.stamp.close();
51.reader.close();
52.system.out.println("------------正在导出:
ba.size:
"+ba.size()
53.+"||totalba.size():
"+totalba.size());
54.
55.}catch(documentexceptionde){
56.de.printstacktrace();
57.system.err.println("adocumenterror:
"+de.getmessage());
58.}
59.//settingsomeresponseheaders
60.response.setheader("expires","0");
61.response.setheader("cache-control",
62."must-revalidate,post-check=0,pre-check=0");
63.response.setheader("pragma","
public");
64.
65.response.setcontenttype("application/pdf");
66.
67.
68./*如果想出来让ie提示你是打开还是保存的对话框,加上下面这句就可以了*/
69.response.setheader("content-disposition","attachment;filename="
70.+"bmxxqrb.pdf");
71.
72.response.setcontentlength(ba.size());
73.try{
74.servletoutputstreamout=response.getoutputstream();
75.ba.writeto(out);
76.//ba1.writeto(out);
77.out.flush();
78.out.close();
79.ba.close();
80.totalba.close();
81.}catch(ioexceptione){
82.e.printstacktrace();
83.system.err.println("adocumenterror:
"+e.getmessage());
84.}finally{
85.if(ba!
=null)
86.ba.close();
87.if(totalba!
=null)
88.totalba.close();
89.}
90.}
篇三:
itext输出pdf
itext输出pdf文件
一、经典的“五步”:
利用itext五步创建一个pdF文件:
helloword。
第一步,创建一个itextpdf.text.document对象的实例:
documentdocument=newdocument();
第二步,为该document创建一个writer实例:
pdfwriter.getinstance(document,newFilestream("chap0101.pdf",Filemode.create));
第三步,打开当前document:
document.open();
第四步,为当前document添加内容:
document.add(newparagraph("helloworld"));
第五步,关闭document
document.close();
在例中,不难看出,制作一个pdF文件是非常简单的。
二、详细一点:
第一步,创建一个document对象实例:
document对象的构造方法有三种:
1.publicdocument();
2.publicdocument(Rectanglepagesize);
3.publicdocument(Rectanglepagesize,intmarginleft,
intmarginRight,intmargintop,intmarginbottom);//marginleft,marginRight,margintop,marginbottom分别对应左右上下页边距
第一个构造函数以a4页面作为参数调用第二个构造函数,第二个构造函数以每边3磅页边距为参数调用第三个构造函数。
通常我们只要用第一个或第二个就可以了,如:
documentdocument=newdocument(pagesize.a4);
//如果希望使用横向页面,你只须使用rotate()方法
document=newdocument(pagesize.a4.rotate());
当然,你也可以自己定义一个纸张页面,如下面的例子:
//创建一个1027*768大小的浅黄色背景的页面
Rectanglepagesize=newRectangle(1024,768);
pagesize.backgroundcolor=newcolor(0xff,0xff,0xde);
documentdocument=newdocument(pagesize);
第二步,创建writer实例:
你可以通过下面的方法创建一个实例:
pdfwriterwriter=pdfwriter.getinstance(document,
newFilestream("chap01xx.pdf"));
其中,第二个参数可以是任何一种流,你可以写入文件中或者直接输出到servlet等等。
一个document可以创建多个writer实例,你可以用多个writer实例来输出不同的pdf。
第三步,打开document:
这个地方没什么说的,一句话:
document.open();
但是请注意:
有些设置是在document打开之前添加的,如页面效果等。
第四步,添加内容:
这一步是整个过程的最大的部分,接下来的内容基本都是在此范围内的。
具体内容请查看后面几章,在这里,我想说的是,若果你创建了多个writer实例,并且你希望这几个writer实例输出的pdf文件有些许不同的地方。
请参考下面例子的部分代码:
//创建两个writer实例
pdfwriterwritera=pdfwriter.getinstance(document,new
Filestream("writera.pdf",Filemode.create));
pdfwriterwriterb=pdfwriter.getinstance(document,new
Filestream("writerb.pdf",Filemode.create));
document.open();
//writera不添加下面这段话
writera.pause();
document.add(newparagraph("这段文字不会显示在writera输出的pdf文件
writera.pdf中"));
//writera添加下面这段话
writera.resume();
document.add(newparagraph("这段文字会显示在writera输出的pdf文件
writerb.pdf中"));
第五步,关闭document
关闭document非常重要,因为它将关闭正在运行的writer并将内容写入文件,该方法在最后被调用,你应该总是要关闭文档。
document.close();
至此,itext可以成功创建一个pdf文件了。
下面是一个itext生成pdf文件的示例,里面出
现的一些类和方法将在后面讲到:
importjava.io.Fileoutputstream;
importcom.itextpdf.text.basecolor;
importcom.itextpdf.text.document;
importcom.itextpdf.text.pagesize;
importcom.itextpdf.text.paragraph;
importcom.itextpdf.text.pdf.pdfpcell;
importcom.itextpdf.text.pdf.pdfptable;
importcom.itextpdf.text.pdf.pdfwriter;
publicclassitexttest{
publicstaticvoidmain(string[]args){system.out.println("thefirstpdf");/**第一步,创建一个document对象*/documentdocument=newdocument(pagesize.a4);try{/**第二步,创建一个writer实例*/pdfwriterwriter=pdfwriter.getinstance(document,newFileoutputstream("d:
\\theFirstpdf.pdf"));/**第三步,打开document*/document.open();/**第四步,添加内容*///创建一个有3列的表格pdfptabletable=newpdfptable(3);//创建一个段落paragraphpara=newparagraph("headerwithcolspan3");//定义一个表格单元,并将段落放入表格单元中pdfpcellcell=newpdfpcell(para);//设置表格单元的列跨度cell.setcolspan(3);table.addcell(cell);//把下面的9项依次加入到表格中,当一行填满自动填到下一行中table.addcell("1.1");table.addcell("1.2");table.addcell("1.3");table.addcell("2.1");table.addcell("2.2");table.addcell("2.3");table.addcell("3.1");table.addcell("3.2");
}}}table.addcell("3.3");//重新定义单元格cell=newpdfpcell(newparagraph("celltest1"));//定义单元格的边框颜色cell.setbordercolor(basecolor.Red);//把单元格添加到表格中table.addcell(cell);//重新定义单元格cell=newpdfpcell(newparagraph("celltest2"));//定义单元格的背景颜色cell.setbackgroundcolor(basecolor.blue);//把单元格添加到表格中table.addcell(cell);//把表格添加到文档中document.add(table);e.printstacktrace();}catch(exceptione){/**第五步,关闭document*/document.close();
第二章块、短句和段落
一、块
块(chunk)是能被添加到文档的文本的最小单位,块可以用于构建其他基础元素如短句、段落、锚点等,块是一个有确定字体的字符串,要添加块到文档中时,其他所有布局变量均要被定义。
下面一行中,我们创建了一个内容为“helloworld”、红色、斜体、couRieR字体、尺寸20的一个块:
chunkchunk=newchunk("helloworld",
FontFactory.getFont(FontFactory.couRieR,20,
Font.italic,basecolor.Red));
二、短句
短句(phrases)是一系列以特定间距(两行之间的距离)作为参数的块,一个短句有一个主字体,但短句中的一些块具有不同于主字体的字体,你有更多的选择去创建短句。
短句的创建方式和块类似:
phraseph=newphrase(newchunk("hellow