用它的底层接口,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文档等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)