首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

怎么使用JAVA、POI读写word文档?

2012-12-21 
如何使用JAVA、POI读写word文档??能不能将一个word的内容完全读过来,放到一个新生成的word文件中去,要求能

如何使用JAVA、POI读写word文档??
能不能将一个word的内容完全读过来,放到一个新生成的word文件中去,要求能将word中的表格、图片等保留,格式不变。最好能给个例子?网上多是很早以前的那个解决方法如下:,只能读文本内容,且新生成的word文件打开时总是要提示选择编码,不太好用,希望能有新的解决方案??!!

poi操作word
    1.1 添加poi支持:包下载地址http://www.apache.org/dyn/closer.cgi/poi/release/

     1.2 POI对Excel文件的读取操作比较方便,POI还提供对Word的DOC格式文件的读取。但在它的发行版本中没有发布对Word支持的模块,需要另外下载一个POI的扩展的Jar包。下载地址为http://www.ibiblio.org/maven2/org/textmining/tm-extractors/0.4/ 下载extractors-0.4_zip这个文件

2、提取Doc文件内容

public static String readDoc(String doc) throws Exception {
    // 创建输入流读取DOC文件
     FileInputStream in = new FileInputStream(new File(doc));
     WordExtractor extractor = null;
     String text = null;
    // 创建WordExtractor
     extractor = new WordExtractor();
    // 对DOC文件进行提取
     text = extractor.extractText(in);
    return text;
}

public static void main(String[] args) {
        try{
            String text = WordReader.readDoc("c:/test.doc");
            System.out.println(text);
         }catch(Exception e){
             e.printStackTrace();
         }
     }



3、写入Doc文档 

import java.io.ByteArrayInputStream;
import java.io.FileOutputStream;
import java.io.IOException;




import org.apache.poi.poifs.filesystem.DirectoryEntry;
import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

public class WordWriter {
public static boolean writeDoc(String path, String content) { 
    boolean w = false; 
   try { 

   // byte b[] = content.getBytes("ISO-8859-1"); 
   byte b[] = content.getBytes(); 

   ByteArrayInputStream bais = new ByteArrayInputStream(b); 

   POIFSFileSystem fs = new POIFSFileSystem(); 
   DirectoryEntry directory = fs.getRoot(); 

   DocumentEntry de = directory.createDocument("WordDocument", bais); 

   FileOutputStream ostream = new FileOutputStream(path); 

   fs.writeFilesystem(ostream); 

   bais.close(); 
   ostream.close(); 

   } catch (IOException e) { 
   e.printStackTrace(); 
   } 
   return w; 
   } 
   public static void main(String[] args) throws Exception{ 
   String wr=WordReader.readDoc("D:\\test.doc");
   boolean b = writeDoc("D:\\result.doc",wr); 
   } 


}

 

[解决办法]
纠结了好多天,没办法,不用POI了,好像POI对word的支持确实还不够啊,现在换用iText了,
itext的包,自己去网上下载吧
可参考:
http://linder0209.javaeye.com/blog/202516

http://javacrazyer.javaeye.com/blog/623719


[解决办法]
下面链接是不错的选择

 Java使用iText生成word文件的解决方案
[解决办法]
老兄现在怎么样了?
[解决办法]
已经换用iText做了,而且相对poi比较简单,第一个网址的例子好用,有图片,有表格,格式控制起来也叫容易。
[解决办法]
用itext可以读写word和excel里的域吗? 如果可以能发个例子给我吗? 或者其它解决方案读写word和excel里的域的
maosha8@163.com
谢谢
[解决办法]
把WORD表格内容读出来后,能不能再显示在GUI自己生成的表格上?
[解决办法]
纠结,itext怎么读取word模版,然后在特定的地方插入文字和图片?
[解决办法]
package com.sample; 

import java.awt.Color; 
import java.io.FileOutputStream; 
import java.io.IOException; 

import com.lowagie.text.Cell; 
import com.lowagie.text.Document; 
import com.lowagie.text.DocumentException; 
import com.lowagie.text.Element; 
import com.lowagie.text.Font; 
import com.lowagie.text.FontFactory; 
import com.lowagie.text.Image; 
import com.lowagie.text.PageSize; 
import com.lowagie.text.Paragraph; 
import com.lowagie.text.Phrase; 
import com.lowagie.text.Table; 
import com.lowagie.text.pdf.BaseFont; 
import com.lowagie.text.rtf.RtfWriter2; 

/** 

* @author wangyanjun 
* @email bd_wyj@sina.com 
* @createDate Jun 12, 2008 
*/ 
public class CreateWordDemo { 

public void createDocContext(String file) throws DocumentException, 
IOException { 
// 设置纸张大小 
Document document = new Document(PageSize.A4); 
// 建立一个书写器(Writer)与document对象关联,通过书写器(Writer)可以将文档写入到磁盘中 
RtfWriter2.getInstance(document, new FileOutputStream(file)); 
document.open(); 
// 设置中文字体 
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light", 
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); 
// 标题字体风格 
Font titleFont = new Font(bfChinese, 12, Font.BOLD); 
// 正文字体风格 
Font contextFont = new Font(bfChinese, 10, Font.NORMAL); 
Paragraph title = new Paragraph("标题"); 
// 设置标题格式对齐方式 
title.setAlignment(Element.ALIGN_CENTER); 
title.setFont(titleFont); 
document.add(title); 

String contextString = "iText是一个能够快速产生PDF文件的java类库。" 
+ " \n"// 换行 
+ "iText的java类对于那些要产生包含文本," 
+ "表格,图形的只读文档是很有用的。它的类库尤其与java Servlet有很好的给合。" 
+ "使用iText与PDF能够使你正确的控制Servlet的输出。"; 
Paragraph context = new Paragraph(contextString); 
// 正文格式左对齐 
context.setAlignment(Element.ALIGN_LEFT); 
context.setFont(contextFont); 
// 离上一段落(标题)空的行数 
context.setSpacingBefore(5); 


// 设置第一行空的列数 
context.setFirstLineIndent(20); 
document.add(context); 

        //利用类FontFactory结合Font和Color可以设置各种各样字体样式 
/** 
* Font.UNDERLINE 下划线,Font.BOLD 粗体 
*/ 
Paragraph underline = new Paragraph("下划线的实现", FontFactory.getFont( 
FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE, 
new Color(0, 0, 255))); 
document.add(underline); 

// 设置 Table 表格 
Table aTable = new Table(3); 
int width[] = {25,25,50}; 
aTable.setWidths(width);//设置每列所占比例 
aTable.setWidth(90); // 占页面宽度 90% 

aTable.setAlignment(Element.ALIGN_CENTER);//居中显示 
aTable.setAlignment(Element.ALIGN_MIDDLE);//纵向居中显示 
aTable.setAutoFillEmptyCells(true); //自动填满 
aTable.setBorderWidth(1); //边框宽度 
aTable.setBorderColor(new Color(0, 125, 255)); //边框颜色 
aTable.setPadding(2);//衬距,看效果就知道什么意思了 
aTable.setSpacing(3);//即单元格之间的间距 
aTable.setBorder(2);//边框 

//设置表头 
/** 
* cell.setHeader(true);是将该单元格作为表头信息显示; 
* cell.setColspan(3);指定了该单元格占3列; 
* 为表格添加表头信息时,要注意的是一旦表头信息添加完了之后, 
* 必须调用 endHeaders()方法,否则当表格跨页后,表头信息不会再显示 
*/ 
Cell haderCell = new Cell("表格表头"); 
haderCell.setHeader(true); 
haderCell.setColspan(3); 
aTable.addCell(haderCell); 
aTable.endHeaders(); 

Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN); 
Cell cell = new Cell(new Phrase("这是一个测试的 3*3 Table 数据", fontChinese )); 
cell.setVerticalAlignment(Element.ALIGN_TOP); 
cell.setBorderColor(new Color(255, 0, 0)); 
cell.setRowspan(2); 
aTable.addCell(cell); 

aTable.addCell(new Cell("#1")); 
aTable.addCell(new Cell("#2")); 
aTable.addCell(new Cell("#3")); 
aTable.addCell(new Cell("#4")); 
Cell cell3 = new Cell(new Phrase("一行三列数据", fontChinese )); 
cell3.setColspan(3); 
cell3.setVerticalAlignment(Element.ALIGN_CENTER); 
aTable.addCell(cell3); 

document.add(aTable); 
document.add(new Paragraph("\n")); 
//添加图片 
Image img=Image.getInstance("d:\\img01800.jpg"); 
img.setAbsolutePosition(0, 0); 
img.setAlignment(Image.RIGHT);//设置图片显示位置 
img.scaleAbsolute(12,35);//直接设定显示尺寸 
img.scalePercent(50);//表示显示的大小为原尺寸的50% 
img.scalePercent(25, 12);//图像高宽的显示比例 
img.setRotation(30);//图像旋转一定角度 
document.add(img); 

document.close(); 


/** 
* @param args 
*/ 
public static void main(String[] args) { 
CreateWordDemo word = new CreateWordDemo(); 
String file = "c:/demo1.doc"; 
try { 
word.createDocContext(file); 
} catch (DocumentException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 





[解决办法]
能把Word样式的里面的表格读取出来吗

热点排行