最近一个项目要用JAVA动态生成WORD,采用了几种方案,如POI等,最终选择了jawin,这是一个在java环境下操作dll或lib的工具,其实就是把VBA写的脚本改在JAVA下能运行的.经过几天的试验,终于可以生成图片,生成表格,文字对齐,设置字体和颜色了,实际的项目中又对它进行了封装,我这里只把简化的版本发布出来,希望对大家有些帮助.
package ww.examples.jawin;
import java.util.Calendar;
import org.jawin.DispatchPtr;
import org.jawin.win32.Ole32;
public class testwordnew {
public static void main(String[] args) {
try {
Ole32.CoInitialize();
// 初始化
DispatchPtr app = new DispatchPtr("Word.Application");
// 创建word对象
app.put("Visible", true);
// 使word 可见
DispatchPtr docs = (DispatchPtr)app.get("Documents");
// 取得document对象集合(Documents)
DispatchPtr doc = (DispatchPtr) docs.invoke("Add");
// 新增一个文档
app.invoke("Activate");
// 激活当前文档
DispatchPtr docSelection = (DispatchPtr)app.get("Selection");
DispatchPtr objTextFont = (DispatchPtr)docSelection.get("Font");
// 取得Font对象
objTextFont.put("Name","黑体");
// 设置字体
objTextFont.put("Size","15");
objTextFont.put("Bold", "1");
// 设置字号
DispatchPtr paragraphFormat = (DispatchPtr)docSelection.get("ParagraphFormat");
// 取得Selection对象
paragraphFormat.put("Alignment", "0");
docSelection.invoke("TypeText","Jawwin test text!Jawin测试文本。111111111111111111111111");
docSelection.invoke("TypeParagraph");
paragraphFormat = (DispatchPtr)docSelection.get("ParagraphFormat");
paragraphFormat.put("Alignment", "1");
docSelection.invoke("TypeText","AAAAAAAAAAAAA");
docSelection.invoke("TypeParagraph");
DispatchPtr objTextFont1 = (DispatchPtr)docSelection.get("Font");
// 取得Font对象
objTextFont1.put("Name","黑体");
// 设置字体
objTextFont1.put("Size","30");
objTextFont1.put("Color", "3904870");
objTextFont1.put("Bold", "0");
//docSelection.invoke("Style","Heading 3");
paragraphFormat = (DispatchPtr)docSelection.get("ParagraphFormat");
paragraphFormat.put("Alignment", "2");
docSelection.invoke("TypeText","/nBBBBBBBBBBBBBBBB");
docSelection.invoke("TypeText","llllllllllllllll");
docSelection.invoke("TypeParagraph");
DispatchPtr inlineShapes = (DispatchPtr)docSelection.get("InlineShapes");
inlineShapes.invokeN("AddPicture",new Object[]{"C://Program Files//Microsoft Office//media//cagcat10//j0088542.wmf",false,true});
docSelection.invoke("TypeParagraph");
DispatchPtr stylehead = (DispatchPtr)doc.get("Styles");
DispatchPtr stylehead1 = (DispatchPtr)stylehead.invokeN("Item",new Object[]{"Heading 1"});
docSelection.put("Style", stylehead1);
docSelection.invoke("TypeText","/ntest heading 1/n");
docSelection.invoke("TypeParagraph");
DispatchPtr styleNormal = (DispatchPtr)stylehead.invokeN("Item",new Object[]{"Heading 1"});
docSelection.put("Style", styleNormal);
DispatchPtr range = (DispatchPtr)docSelection.get("Range");
DispatchPtr tables = (DispatchPtr) doc.get("Tables");
tables.invokeN("Add",new Object[]{range,5,5});
docSelection.invoke("TypeParagraph");
DispatchPtr table1 = (DispatchPtr) tables.invokeN("Item",new Object[]{"1"});
DispatchPtr colume = (DispatchPtr) table1.get("Columns");
DispatchPtr colume1 = (DispatchPtr) colume.invokeN("Item",new Object[]{"1"});
colume1.put("Width", 200);
DispatchPtr rows = (DispatchPtr) table1.get("Rows");
DispatchPtr row1 = (DispatchPtr) rows.invokeN("Item",new Object[]{"1"});
row1.put("Height", 200);
DispatchPtr cell = (DispatchPtr) table1.invokeN("Cell",new Object[]{"1","1"});
DispatchPtr cellrange = (DispatchPtr) cell.get("Range");
cellrange.put("Text", "cell value");
doc.invoke("SaveAs","c://jawintest"+Calendar.getInstance().getTime().getMinutes()+""+Calendar.getInstance().getTime().getSeconds()+".doc");
// 保存文档(保存在C盘根目录下)
// doc.invoke("Close");
// 关闭当前文档,去掉前面的注释符并重新编译后可生效
// app.invoke("Quit");
// 退出Word,去掉前面的注释符并重新编译后可生效
Ole32.CoUninitialize(); //释放对象
} catch (Exception e) {
e.printStackTrace();
}
}
}