java 用POI处理比较大的word和excel文档。

java 用POI处理比较大的word和excel文档。,第1张

用它的底层接口,EVentModel来 *** 作会比较省内存,但代码写起来比较麻烦。9M左右就内存溢出的话,应该是你设置的Heap size太小了。增大Heap的大小也是必须的。

如果是xls的,用JExcel会比POI省内存。但它不支持2010。

1下载

下载38beta4版本,请记得一定要下载该版本,其他版本读取word模板并改写内容生成新的文件后,打开新文件时会提示“word无法读取文档,文档可能损坏。”

2集成到项目

这一步很简单,只要把下载后解压得到的poi-38-beta4-20110826jar和poi-scratchpad-38-beta4-20110826jar两个文件复制到java web项目的lib目录下就行了

3制作word模板

把需要变动的值全部用代码来代替,例如你需要改变名称的值,则可以在模板中用name来表示。详细见附件中的doc文件。

4调用接口方法实现对word的读写 *** 作

整个过程就是先读取模板,然后修改内容,再重新生成新的文档保存到本地或者输出文件流提供下载,下面分别是生成新文档和输出文件流两种方式的代码片断,详细的代码请见下列代码中的readwriteWord()两个重载方法。

你好,试试以下代码行不行。

package comsample;

import javaawtColor;

import javaioFileOutputStream;

import javaioIOException;

import comlowagietextCell;

import comlowagietextDocument;

import comlowagietextDocumentException;

import comlowagietextElement;

import comlowagietextFont;

import comlowagietextFontFactory;

import comlowagietextImage;

import comlowagietextPageSize;

import comlowagietextParagraph;

import comlowagietextPhrase;

import comlowagietextTable;

import comlowagietextpdfBaseFont;

import comlowagietextrtfRtfWriter2;

/

@author wangyanjun

@email bd_wyj@sinacom

@createDate Jun 12, 2008

/

public class CreateWordDemo {

public void createDocContext(String file) throws DocumentException,

IOException {

// 设置纸张大小

Document document = new Document(PageSizeA4);

// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中

RtfWriter2getInstance(document, new FileOutputStream(file));

documentopen();

// 设置中文字体

BaseFont bfChinese = BaseFontcreateFont("STSongStd-Light",

"UniGB-UCS2-H", BaseFontNOT_EMBEDDED);

// 标题字体风格

Font titleFont = new Font(bfChinese, 12, FontBOLD);

// 正文字体风格

Font contextFont = new Font(bfChinese, 10, FontNORMAL);

Paragraph title = new Paragraph("标题");

// 设置标题格式对齐方式

titlesetAlignment(ElementALIGN_CENTER);

titlesetFont(titleFont);

documentadd(title);

String contextString = "iText是一个能够快速产生PDF文件的java类库。"

+ " \n"// 换行

+ "iText的java类对于那些要产生包含文本,"

+ "表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。"

+ "使用iText与PDF能够使你正确的控制Servlet的输出。";

Paragraph context = new Paragraph(contextString);

// 正文格式左对齐

contextsetAlignment(ElementALIGN_LEFT);

contextsetFont(contextFont);

// 离上一段落(标题)空的行数

contextsetSpacingBefore(5);

// 设置第一行空的列数

contextsetFirstLineIndent(20);

documentadd(context);

//利用类FontFactory结合Font和Color可以设置各种各样字体样式

/

FontUNDERLINE 下划线,FontBOLD 粗体

/

Paragraph underline = new Paragraph("下划线的实现", FontFactorygetFont(

FontFactoryHELVETICA_BOLDOBLIQUE, 18, FontUNDERLINE,

new Color(0, 0, 255)));

documentadd(underline);

// 设置 Table 表格

Table aTable = new Table(3);

int width[] = {25,25,50};

aTablesetWidths(width);//设置每列所占比例

aTablesetWidth(90); // 占页面宽度 90%

aTablesetAlignment(ElementALIGN_CENTER);//居中显示

aTablesetAlignment(ElementALIGN_MIDDLE);//纵向居中显示

aTablesetAutoFillEmptyCells(true); //自动填满

aTablesetBorderWidth(1); //边框宽度

aTablesetBorderColor(new Color(0, 125, 255)); //边框颜色

aTablesetPadding(2);//衬距,看效果就知道什么意思了

aTablesetSpacing(3);//即单元格之间的间距

aTablesetBorder(2);//边框

//设置表头

/

cellsetHeader(true);是将该单元格作为表头信息显示;

cellsetColspan(3);指定了该单元格占3列;

为表格添加表头信息时,要注意的是一旦表头信息添加完了之后,

必须调用 endHeaders()方法,否则当表格跨页后,表头信息不会再显示

/

Cell haderCell = new Cell("表格表头");

haderCellsetHeader(true);

haderCellsetColspan(3);

aTableaddCell(haderCell);

aTableendHeaders();

Font fontChinese = new Font(bfChinese, 12, FontNORMAL, ColorGREEN);

Cell cell = new Cell(new Phrase("这是一个测试的 33 Table 数据", fontChinese ));

cellsetVerticalAlignment(ElementALIGN_TOP);

cellsetBorderColor(new Color(255, 0, 0));

cellsetRowspan(2);

aTableaddCell(cell);

aTableaddCell(new Cell("#1"));

aTableaddCell(new Cell("#2"));

aTableaddCell(new Cell("#3"));

aTableaddCell(new Cell("#4"));

Cell cell3 = new Cell(new Phrase("一行三列数据", fontChinese ));

cell3setColspan(3);

cell3setVerticalAlignment(ElementALIGN_CENTER);

aTableaddCell(cell3);

documentadd(aTable);

documentadd(new Paragraph("\n"));

//添加

Image img=ImagegetInstance("d:\\img01800jpg");

imgsetAbsolutePosition(0, 0);

imgsetAlignment(ImageRIGHT);//设置显示位置

imgscaleAbsolute(12,35);//直接设定显示尺寸

imgscalePercent(50);//表示显示的大小为原尺寸的50%

imgscalePercent(25, 12);//图像高宽的显示比例

imgsetRotation(30);//图像旋转一定角度

documentadd(img);

documentclose();

}

/

@param args

/

public static void main(String[] args) {

CreateWordDemo word = new CreateWordDemo();

String file = "c:/demo1doc";

try {

wordcreateDocContext(file);

} catch (DocumentException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

}

}

}

下方是读取 word 文件的 Java 代码,值得注意的是: POI 在读取 word 文件的时候不会读取 word 文件中的信息, 还有就是对于 2007 版的 word(docx), 如果 word 文件中有表格,所有表格中的数据都会在读取出来的字符串的最后。

首先通过POI读取word,然后用lucene创建索引,索引结构:name:文件名,text:内容。创建好索引之后,搜索,然后统计搜索结果。

POI读取word参考:

>

你可以把word文件用二进制的方式保存到数据库,再把他读取出来,

WordExtractor extractor = new WordExtractor();

String str = extractorextractText(in);

这个in 你可以把读取出来的二进制转为ByteArrayInputStream 对象。

以上就是关于java 用POI处理比较大的word和excel文档。全部的内容,包括:java 用POI处理比较大的word和excel文档。、java poi XWPFTable *** 作word表格的问题、如何使用JAVA,POI读写word文档等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9684745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存