導航:首頁 > 文件類型 > java生成word文件

java生成word文件

發布時間:2023-12-02 17:19:13

java如何根據word模板生成word文檔

先下載jacob_1.10.1.zip。
解壓後將jacob.dll放到windows/system32下面或\j2sdk\bin下面。
將jacob.jar加入項目。

/*
* Java2word.java
*
* Created on 2007年8月13日, 上午10:32
*
* To
change this template, choose Tools | Template Manager
* and open the template
in the editor.
*/

/*
* 傳入數據為HashMap對象,對象中的Key代表word模板中要替換的欄位,Value代表用來替換的值。
*
word模板中所有要替換的欄位(即HashMap中的Key)以特殊字元開頭和結尾,如:$code$、$date$……,
以免執行錯誤的替換。
*
所有要替換為圖片的欄位,Key中需包含image或者Value為圖片的全路徑(目前只判斷文件後綴名為:.bmp、
.jpg、.gif)。
*
要替換表格中的數據時,HashMap中的Key格式為「table$R@N」,其中:R代表從表格的第R行開始替換,N代表
word模板中的第N張表格;Value為ArrayList對象,ArrayList中包含的對象統一為String[],一條String[]代
表一行數據,ArrayList中第一條記錄為特殊記錄,記錄的是表格中要替換的列號,如:要替換第一列、第三列、
第五列的數據,則第一條記錄為String[3]
{「1」,」3」,」5」}。
*/

package com.word.util;

/**
*
* @author kdl
*/
import java.util.ArrayList;
import
java.util.HashMap;
import java.util.Iterator;

import com.jacob.activeX.ActiveXComponent;
import
com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class Java2word {

private boolean saveOnExit;

/**
* word文檔
*/
Dispatch doc = null;

/**
* word運行程序對象s
*/
private ActiveXComponent
word;
/**
* 所有word文檔
*/
private Dispatch
documents;

/**
* 構造函數
*/

public Java2word() {
if(word==null){
word = new
ActiveXComponent("Word.Application");
word.setProperty("Visible",new
Variant(false));
}
if(documents==null)

documents = word.getProperty("Documents").toDispatch();
saveOnExit =
false;
}

/**
* 設置參數:退出時是否保存
* @param
saveOnExit boolean true-退出時保存文件,false-退出時不保存文件
*/
public void
setSaveOnExit(boolean saveOnExit) {
this.saveOnExit =
saveOnExit;
}
/**
* 得到參數:退出時是否保存
* @return
boolean true-退出時保存文件,false-退出時不保存文件
*/
public boolean
getSaveOnExit() {
return saveOnExit;
}

/**
* 打開文件
* @param inputDoc String 要打開的文件,全路徑
*
@return Dispatch 打開的文件
*/
public Dispatch open(String inputDoc)
{
return
Dispatch.call(documents,"Open",inputDoc).toDispatch();
//return
Dispatch.invoke(documents,"Open",Dispatch.Method,new Object[]{inputDoc},new
int[1]).toDispatch();
}

/**
* 選定內容
*
@return Dispatch 選定的范圍或插入點
*/
public Dispatch select()
{
return word.getProperty("Selection").toDispatch();

}

/**
* 把選定內容或插入點向上移動
* @param selection
Dispatch 要移動的內容
* @param count int 移動的距離
*/
public
void moveUp(Dispatch selection,int count) {
for(int i = 0;i <
count;i ++)
Dispatch.call(selection,"MoveUp");

}

/**
* 把選定內容或插入點向下移動
* @param selection
Dispatch 要移動的內容
* @param count int 移動的距離
*/
public
void moveDown(Dispatch selection,int count) {
for(int i = 0;i <
count;i ++)
Dispatch.call(selection,"MoveDown");

}

/**
* 把選定內容或插入點向左移動
* @param selection
Dispatch 要移動的內容
* @param count int 移動的距離
*/
public
void moveLeft(Dispatch selection,int count) {
for(int i = 0;i <
count;i ++) {
Dispatch.call(selection,"MoveLeft");

}
}

/**
* 把選定內容或插入點向右移動
* @param
selection Dispatch 要移動的內容
* @param count int 移動的距離
*/

public void moveRight(Dispatch selection,int count) {
for(int i =
0;i < count;i ++)

Dispatch.call(selection,"MoveRight");
}

/**
*
把插入點移動到文件首位置
* @param selection Dispatch 插入點
*/
public
void moveStart(Dispatch selection) {

Dispatch.call(selection,"HomeKey",new Variant(6));
}

/**
* 從選定內容或插入點開始查找文本
* @param selection Dispatch
選定內容
* @param toFindText String 要查找的文本
* @return boolean
true-查找到並選中該文本,false-未查找到文本
*/
public boolean find(Dispatch
selection,String toFindText) {
//從selection所在位置開始查詢

Dispatch find = word.call(selection,"Find").toDispatch();

//設置要查找的內容
Dispatch.put(find,"Text",toFindText);

//向前查找
Dispatch.put(find,"Forward","True");

//設置格式
Dispatch.put(find,"Format","True");

//大小寫匹配
Dispatch.put(find,"MatchCase","True");

//全字匹配
Dispatch.put(find,"MatchWholeWord","True");

//查找並選中
return Dispatch.call(find,"Execute").getBoolean();

}

/**
* 把選定內容替換為設定文本
* @param selection
Dispatch 選定內容
* @param newText String 替換為文本
*/
public
void replace(Dispatch selection,String newText) {

//設置替換文本
Dispatch.put(selection,"Text",newText);

}

/**
* 全局替換
* @param selection Dispatch
選定內容或起始插入點
* @param oldText String 要替換的文本
* @param newText
String 替換為文本
*/
public void replaceAll(Dispatch
selection,String oldText,Object replaceObj) {
//移動到文件開頭

moveStart(selection);

if(oldText.startsWith("table") ||
replaceObj instanceof ArrayList)

replaceTable(selection,oldText,(ArrayList) replaceObj);
else
{
String newText = (String) replaceObj;

if(newText==null)
newText="";

if(oldText.indexOf("image") != -1&!newText.trim().equals("") ||
newText.lastIndexOf(".bmp") != -1 || newText.lastIndexOf(".jpg") != -1 ||
newText.lastIndexOf(".gif") != -1){

while(find(selection,oldText)) {

replaceImage(selection,newText);

Dispatch.call(selection,"MoveRight");
}

}else{
while(find(selection,oldText))
{
replace(selection,newText);

Dispatch.call(selection,"MoveRight");
}

}
}
}

/**
* 替換圖片
* @param
selection Dispatch 圖片的插入點
* @param imagePath String 圖片文件(全路徑)

*/
public void replaceImage(Dispatch selection,String imagePath)
{

Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),"AddPicture",imagePath);

}

/**
* 替換表格
* @param selection Dispatch
插入點
* @param tableName String
表格名稱,形如table$1@1、[email protected]$R@N,R代表從表格中的第N行開始填充,N代表word文件中的第N張表

* @param fields HashMap 表格中要替換的欄位與數據的對應表
*/
public void
replaceTable(Dispatch selection,String tableName,ArrayList dataList)
{
if(dataList.size() <= 1) {

System.out.println("Empty table!");
return;

}

//要填充的列
String[] cols = (String[])
dataList.get(0);

//表格序號
String tbIndex =
tableName.substring(tableName.lastIndexOf("@") + 1);

//從第幾行開始填充
int fromRow =
Integer.parseInt(tableName.substring(tableName.lastIndexOf("$") +
1,tableName.lastIndexOf("@")));
//所有表格
Dispatch tables =
Dispatch.get(doc,"Tables").toDispatch();
//要填充的表格

Dispatch table = Dispatch.call(tables,"Item",new
Variant(tbIndex)).toDispatch();
//表格的所有行
Dispatch rows =
Dispatch.get(table,"Rows").toDispatch();
//填充表格
for(int
i = 1;i < dataList.size();i ++) {
//某一行數據

String[] datas = (String[]) dataList.get(i);

//在表格中添加一行
if(Dispatch.get(rows,"Count").getInt() < fromRow +
i - 1)
Dispatch.call(rows,"Add");

//填充該行的相關列
for(int j = 0;j < datas.length;j ++)
{
//得到單元格
Dispatch cell =
Dispatch.call(table,"Cell",Integer.toString(fromRow + i -
1),cols[j]).toDispatch();
//選中單元格

Dispatch.call(cell,"Select");
//設置格式

Dispatch font = Dispatch.get(selection,"Font").toDispatch();

Dispatch.put(font,"Bold","0");

Dispatch.put(font,"Italic","0");
//輸入數據

Dispatch.put(selection,"Text",datas[j]);
}
}

}

/**
* 保存文件
* @param outputPath String
輸出文件(包含路徑)
*/
public void save(String outputPath) {

Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs",outputPath);

}

/**
* 關閉文件
* @param document Dispatch
要關閉的文件
*/
public void close(Dispatch doc) {

Dispatch.call(doc,"Close",new Variant(saveOnExit));

word.invoke("Quit",new Variant[]{});
word = null;

}

/**
* 根據模板、數據生成word文件
* @param inputPath
String 模板文件(包含路徑)
* @param outPath String 輸出文件(包含路徑)
* @param
data HashMap 數據包(包含要填充的欄位、對應的數據)
*/
public void toWord(String
inputPath,String outPath,HashMap data) {
String oldText;

Object newValue;
try {
if(doc==null)

doc = open(inputPath);

Dispatch selection =
select();

Iterator keys =
data.keySet().iterator();
while(keys.hasNext())
{
oldText = (String) keys.next();

newValue = data.get(oldText);

replaceAll(selection,oldText,newValue);

}

save(outPath);
} catch(Exception
e) {
System.out.println("操作word文件失敗!");

e.printStackTrace();
} finally {
if(doc !=
null)
close(doc);
}
}

㈡ java 自動生成word怎麼生成

用java生成word文檔
poi是apache的一個項目,不過就算用poi你可能都覺得很煩,不過不要緊,這里提供了更加簡單的一個介面給你:
http://mirrors.ibiblio.org/pub/mirrors/maven2/org/textmining/tm-extractors/0.4/
這個包就是:tm-extractors-0.4.jar
下載之後,放到你的classpath就可以了,下面是如何使用它的一個例子:
import java.io.*;
import org.textmining.text.extraction.WordExtractor;
/**
*
Title: pdf extraction

*
Description: email:[email protected]

*
Copyright: Matrix Copyright (c) 2003

*
Company: Matrix.org.cn

* @author chris
* @version 1.0,who use this example pls remain the declare
*/

public class PdfExtractor {
public PdfExtractor() {
}
public static void main(String args[]) throws Exception
{
FileInputStream in = new FileInputStream ("c:\\a.doc");
WordExtractor extractor = new WordExtractor();
String str = extractor.extractText(in);
System.out.println("the result length is"+str.length());
System.out.println("the result is"+str);
}
}

㈢ 怎麼用java導出word

java導出word代碼如下:

package com.bank.util;
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;
public class WordTools {
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(0);//襯距,看效果就知道什麼意思了
aTable.setSpacing(0);//即單元格之間的間距
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("http://127.0.0.1:8080/testSystem/images/1_r1_c1.png");
// 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();
}
public static void main(String[] args){
WordTools b=new WordTools();
try {
b.createDocContext("d:/demo.doc");
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

㈣ Java怎麼操作OpenOffice創建word文檔並向其設置內容

OpenOffice java api:

簡單的說就是利用java程序可以操作OpenOffice的所有功能,比如創建doc文檔,插入文字,設置文字格式等等。

1. OpenOffice 給程序員提供了一個叫UNO (UniversalNetwork Objects)的組件技術.我理解的UNO: OpenOffice 類似於web程序中的伺服器,程序員寫的代碼類似於客戶端,利用UNO提供的介面和服務去完成對OpenOffice文檔的操作。所以寫程序首先要搭建 UNO環境:

1. 下載 OpenOffice

2.復制UNO提供的jar包: unoil.jar, java_uno.jar, juh.jar, jurt.jar, ridl.jar, unoloader.jar. (ps: 安裝了SDK之後在文件夾找)到自己的工程中,引入它們。

3. 下載文檔:DevelopersGuide.pdf.

4. 安裝了SDK後,重新啟動一下機器,然後就可以按照 DevelopersGuide 來學習 UNO 編程了。

5. 需要ava 環境。

補充: 安裝了SDK後, java, c++幫助文檔,樣常式序,其他關於sdk的信息 都放在本地openOffice安裝路徑一個叫sdk目錄下面,enjoy it !

總結一下已經實現的功能和碰到的問題匯總:

1. 首先要得到遠程office組件的上下文.通過:

com.sun.star.uno.XComponentContext xContext = com.sun.star.comp.helper.Bootstrap.bootstrap();

得到,如果OpenOffice安裝路徑不是在工程的路徑下面(我自己猜的), 就會報:

com.sun.star.comp.helper.BootstrapException: no office executable found!

解決辦法: 黑其源代碼, 看了源代碼就會發現其實OpenOffice是在尋找本地的soffice的shell文件,所以弄個變數來保存soffice在系統中的路徑,重新寫一 個Bootstrap就可以了。詳細請參照:論壇 。

2. 得到 XMultiComponentFactory (ComponentFactory 工廠)

com.sun.star.lang.XMultiComponentFactory xMCF = xContext.getServiceManager();

3. 得到各種組件可以通過下面代碼:

// docType 是 與 soffice 同目錄下面的OpenOffice的其他shell文件,swrite等等

protected XComponent newDocComponent(String docType)
throws java.lang.Exception {
String loadUrl = "private:factory/" + docType;

mxRemoteServiceManager = this.getRemoteServiceManager();
Object desktop = mxRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", mxRemoteContext);

XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime
.queryInterface(XComponentLoader.class, desktop);
PropertyValue[] loadProps = new PropertyValue[0];

return xComponentLoader.loadComponentFromURL(loadUrl, "_blank", 0,
loadProps);
}

4.得到 XTextDocument

XComponent xEmptyWriterComponent = newDocComponent("swriter");

XTextDocument mxDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,
xEmptyWriterComponent);

5. 得到一個文檔的引用

XText mxDocText = mxDoc.getText();

6. 得到文檔的屬性列表

XPropertySet mxDocProps = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, mxDoc);

7. 建立游標,用來插入新的內容。

XTextCursor mxDocCursor = mxDocText.createTextCursor();

XSentenceCursor xSentenceCursor = (XSentenceCursor) UnoRuntime
.queryInterface(XSentenceCursor.class, mxDocCursor);

XWordCursor xWordCursor = (XWordCursor) UnoRuntime.queryInterface(
XWordCursor.class, mxDocCursor);

8.得到游標屬性列表

XPropertySet xCursorProps = (XPropertySet) UnoRuntime .queryInterface(XPropertySet.class, mxDocCursor);

9.設置插入文字格式

xCursorProps.setPropertyValue("CharFontName", "宋體");
xCursorProps.setPropertyValue("CharWeight", new Float(FontWeight.BOLD));
xCursorProps.setPropertyValue("CharHeight", new Float(10.5));
// 居中顯示
xCursorProps.setPropertyValue("ParaAdjust", com.sun.star.style.ParagraphAdjust.CENTER);

10.在該游標處插入信息

mxDocText.insertString(xSentenceCursor, 「Hello World", true);

11. 保存的關鍵代碼

protected void storeDocComponent(XComponent xDoc, String storeUrl)
throws java.lang.Exception {

XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
XStorable.class, xDoc);
PropertyValue[] storeProps = new PropertyValue[1];
storeProps[0] = new PropertyValue();
storeProps[0].Name = "FilterName";
storeProps[0].Value = "MS Word 97";

openOfficeJavaLogger.debug("... store \"" + xDoc.toString() + "\" to \"" + storeUrl
+ "\".");

xStorable.storeAsURL(storeUrl, storeProps);

㈤ java中如何生成word文檔的目錄頁

1.創建帶有格來式的word文檔源,將該需要動態展示的數據使用變數符替換。 2. 將剛剛創建的word文檔另存為xml格式。3.編輯這個XMl文檔去掉多餘的xml標記,如圖中藍色部分 4.從Freemarker官網【下載】最新的開發包,將freemarker.jar拷貝到自己的開發項目中。 5.新建DocUtil類,實現根據Doc模板生成word文件的方法6.用戶根據自己的需要,調用使用getDataMap獲取需要傳遞的變數,然後調用createDoc方法生成所需要的文檔。

㈥ java動態生成word,該怎麼解決

閱讀目錄

1. 製作 Word 模版,將你需要動態生成的欄位用${}替換。
2. 將 Word文檔保存為 xml 。
3.引入項目。


項目中需要用 java 程序生成doc 文件,網路一番,發現FreeMarker 的評價比較高。

FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出,至於想詳細了解 FreeMarker 的請自行網路。

  1. 製作 Word 模版,將你需要動態生成的欄位用${}替換。如:${name}、${age}

  2. 將 Word文檔保存為 xml。

  3. 引入項目。將 xml 文件更改後綴名 為 .ftl, 然後引用到你的項目中。

  4. 需要注意的問題:
    a. word 版本不能低於 2003 ,因為 2003 才開始支持 xml。

  5. 備註:

    a.template.process(),接受一個 Map 和 輸入流做為入參,Map 既是你需要動態生成到 doc 裡面的數據,欄位名必須與你在 .ftl 裡面定義的一致;

    b.如果你想利用這段代碼,需要有一個 .ftl 文件,並且在你的項目 src 目錄下面新建 template 目錄;

    c.輔助文件"FreeMarker.jar 、實例項目的.ftl "。

㈦ java生成word文檔的問題

Jacob解決Word文檔的讀寫問題收藏
Jacob 是Java-COM Bridge的縮寫,它在Java與微軟的COM組件之間構建一座橋梁。使用Jacob自帶的DLL動態鏈接庫,並通過JNI的方式實現了在Java平台上對COM程序的調用。Jacob下載的地址為:

http://sourceforge.net/project/showfiles.php?group_id=109543&package_id=118368

配置:

(1)將解壓包中的jacob.dll(x86常用,x64)拷到jdk安裝目錄下的jre\bin文件夾或windows安裝路徑下的WINDOWS\system32文件夾下

(2)將jacob.jar文件拷到classpath下即可

常見問題解決:

對於」java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\jacob-1.14.3-x86.dll: 由於應用程序配置不正確,應用程序未能啟動。重新安裝應用程序可能會糾正」這個問題,可以通過

重新下載Jacob的jar及dll文件(最好版本比現在的低,如1.11)解決

實例製作(主要功能:標題製作,表格製作,合並表格,替換文本,頁眉頁腳,書簽處理):

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class WordOperate {
public static void main(String args[]) {
ActiveXComponent wordApp = new ActiveXComponent("Word.Application"); // 啟動word
// Set the visible property as required.
Dispatch.put(wordApp, "Visible", new Variant(true));// //設置word可見
Dispatch docs = wordApp.getProperty("Documents").toDispatch();
// String inFile = "d:\\test.doc";
// Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method,
// new Object[] { inFile, new Variant(false), new Variant(false)},//參數3,false:可寫,true:只讀
// new int[1]).toDispatch();//打開文檔
Dispatch document = Dispatch.call(docs, "Add").toDispatch();// create new document

String userName = wordApp.getPropertyAsString("Username");// 顯示用戶信息
System.out.println("用戶名:" + userName);
// 文檔對齊,字體設置////////////////////////
Dispatch selection = Dispatch.get(wordApp, "Selection").toDispatch();
Dispatch align = Dispatch.get(selection, "ParagraphFormat")
.toDispatch(); // 行列格式化需要的對象
Dispatch font = Dispatch.get(selection, "Font").toDispatch(); // 字型格式化需要的對象
// 標題處理////////////////////////
Dispatch.put(align, "Alignment", "1"); // 1:置中 2:靠右 3:靠左
Dispatch.put(font, "Bold", "1"); // 字型租體
Dispatch.put(font, "Color", "1,0,0,0"); // 字型顏色紅色
Dispatch.call(selection, "TypeText", "Word文檔處理"); // 寫入標題內容
Dispatch.call(selection, "TypeParagraph"); // 空一行段落
Dispatch.put(align, "Alignment", "3"); // 1:置中 2:靠右 3:靠左
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); // 游標標往下一行
//表格處理////////////////////////
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
Dispatch range = Dispatch.get(selection, "Range").toDispatch();
Dispatch table1 = Dispatch.call(tables, "Add", range, new Variant(3),
new Variant(2), new Variant(1)).toDispatch(); // 設置行數,列數,表格外框寬度
// 所有表格
Variant tableAmount = Dispatch.get(tables, "count");
System.out.println(tableAmount);
// 要填充的表格
Dispatch t1 = Dispatch.call(tables, "Item", new Variant(1))
.toDispatch();
Dispatch t1_row = Dispatch.get(t1, "rows").toDispatch();// 所有行
int t1_rowNum = Dispatch.get(t1_row, "count").getInt();
Dispatch.call(Dispatch.get(t1, "columns").toDispatch(), "AutoFit");// 自動調整
int t1_colNum = Dispatch.get(Dispatch.get(t1, "columns").toDispatch(),
"count").getInt();
System.out.println(t1_rowNum + " " + t1_colNum);
for (int i = 1; i <= t1_rowNum; i++) {
for (int j = 1; j <= t1_colNum; j++) {
Dispatch cell = Dispatch.call(t1, "Cell", new Variant(i),
new Variant(j)).toDispatch();// 行,列
Dispatch.call(cell, "Select");
Dispatch.put(selection, "Text", "cell" + i + j); // 寫入word的內容
Dispatch.put(font, "Bold", "0"); // 字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,0"); // 字型顏色
Dispatch.put(font, "Italic", "1"); // 斜體 1:斜體 0:取消斜體
Dispatch.put(font, "Underline", "1"); // 下劃線
Dispatch Range = Dispatch.get(cell, "Range").toDispatch();
String cellContent = Dispatch.get(Range, "Text").toString();
System.out.println((cellContent.substring(0, cellContent
.length() - 1)).trim());
}
Dispatch.call(selection, "MoveDown"); // 游標往下一行(才不會輸入蓋過上一輸入位置)
}
//合並單元格////////////////////////
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); // 游標標往下一行
Dispatch range2 = Dispatch.get(selection, "Range").toDispatch();
Dispatch table2 = Dispatch.call(tables, "Add", range2, new Variant(8),
new Variant(4), new Variant(1)).toDispatch(); // 設置行數,列數,表格外框寬度
Dispatch t2 = Dispatch.call(tables, "Item", new Variant(2))
.toDispatch();
Dispatch beginCell = Dispatch.call(t2, "Cell", new Variant(1),
new Variant(1)).toDispatch();
Dispatch endCell = Dispatch.call(t2, "Cell", new Variant(4),
new Variant(4)).toDispatch();
Dispatch.call(beginCell, "Merge", endCell);

for (int row = 1; row <= Dispatch.get(
Dispatch.get(t2, "rows").toDispatch(), "count").getInt(); row++) {
for (int col = 1; col <= Dispatch.get(
Dispatch.get(t2, "columns").toDispatch(), "count").getInt(); col++) {

if (row == 1) {
Dispatch cell = Dispatch.call(t2, "Cell", new Variant(1),
new Variant(1)).toDispatch();// 行,列
Dispatch.call(cell, "Select");
Dispatch.put(font, "Color", "1,1,1,0"); // 字型顏色
Dispatch.put(selection, "Text", "merge Cell!");
} else {
Dispatch cell = Dispatch.call(t2, "Cell", new Variant(row),
new Variant(col)).toDispatch();// 行,列
Dispatch.call(cell, "Select");
Dispatch.put(font, "Color", "1,1,1,0"); // 字型顏色
Dispatch.put(selection, "Text", "cell" + row + col);
}
}
Dispatch.call(selection, "MoveDown");
}
//Dispatch.call(selection, "MoveRight", new Variant(1), new Variant(1));// 取消選擇
// Object content = Dispatch.get(doc,"Content").toDispatch();
// Word文檔內容查找及替換////////////////////////
Dispatch.call(selection, "TypeParagraph"); // 空一行段落
Dispatch.put(align, "Alignment", "3"); // 1:置中 2:靠右 3:靠左
Dispatch.put(font, "Color", 0);
Dispatch.put(selection, "Text", "歡迎,Hello,world!");
Dispatch.call(selection, "HomeKey", new Variant(6));// 移到開頭
Dispatch find = Dispatch.call(selection, "Find").toDispatch();// 獲得Find組件
Dispatch.put(find, "Text", "hello"); // 查找字元串"hello"
Dispatch.put(find, "Forward", "True");// 向前查找
// Dispatch.put(find, "Format", "True");// 設置格式
Dispatch.put(find, "MatchCase", "false");// 大小寫匹配
Dispatch.put(find, "MatchWholeWord", "True"); // 全字匹配
Dispatch.call(find, "Execute"); // 執行查詢
Dispatch.put(selection, "Text", "你好");// 替換為"你好"
//使用方法傳入的參數parameter調用word文檔中的MyWordMacro宏//
//Dispatch.call(document,macroName,parameter);
//Dispatch.invoke(document,macroName,Dispatch.Method,parameter,new int[1]);
//頁眉,頁腳處理////////////////////////
Dispatch ActiveWindow = wordApp.getProperty("ActiveWindow")
.toDispatch();
Dispatch ActivePane = Dispatch.get(ActiveWindow, "ActivePane")
.toDispatch();
Dispatch View = Dispatch.get(ActivePane, "View").toDispatch();
Dispatch.put(View, "SeekView", "9"); //9是設置頁眉
Dispatch.put(align, "Alignment", "1"); // 置中
Dispatch.put(selection, "Text", "這里是頁眉"); // 初始化時間
Dispatch.put(View, "SeekView", "10"); // 10是設置頁腳
Dispatch.put(align, "Alignment", "2"); // 靠右
Dispatch.put(selection, "Text", "這里是頁腳"); // 初始化從1開始
//書簽處理(打開文檔時處理)////////////////////////
//Dispatch activeDocument = wordApp.getProperty("ActiveDocument").toDispatch();
Dispatch bookMarks = Dispatch.call(document, "Bookmarks").toDispatch();
boolean isExist = Dispatch.call(bookMarks, "Exists", "bookMark1")
.getBoolean();
if (isExist == true) {
Dispatch rangeItem1 = Dispatch.call(bookMarks, "Item", "bookMark1")
.toDispatch();
Dispatch range1 = Dispatch.call(rangeItem1, "Range").toDispatch();
Dispatch.put(range1, "Text", new Variant("當前是書簽1的文本信息!"));
String bookMark1Value = Dispatch.get(range1, "Text").toString();
System.out.println(bookMark1Value);
} else {
System.out.println("當前書簽不存在,重新建立!");
Dispatch.call(bookMarks, "Add", "bookMark1", selection);
Dispatch rangeItem1 = Dispatch.call(bookMarks, "Item", "bookMark1")
.toDispatch();
Dispatch range1 = Dispatch.call(rangeItem1, "Range").toDispatch();
Dispatch.put(range1, "Text", new Variant("當前是書簽1的文本信息!"));
String bookMark1Value = Dispatch.get(range1, "Text").toString();
System.out.println(bookMark1Value);

}
//保存操作////////////////////////
Dispatch.call(document, "SaveAs", "D:/wordOperate.doc");
//Dispatch.invoke((Dispatch) doc, "SaveAs", Dispatch.Method, new Object[]{htmlPath, new Variant(8)}, new int[1]); //生成html文件
// 0 = wdDoNotSaveChanges
// -1 = wdSaveChanges
// -2 = wdPromptToSaveChanges
//Dispatch.call(document, "Close", new Variant(0));
// // worddoc.olefunction("protect",2,true,"");
// // Dispatch bookMarks = wordApp.call(docs,"Bookmarks").toDispatch();
// // System.out.println("bookmarks"+bookMarks.getProgramId());
// //Dispatch.call(doc, "Save"); //保存
// // Dispatch.call(doc, "Close", new Variant(true));
// //wordApp.invoke("Quit",new Variant[]{});
// wordApp.safeRelease();//Finalizers call this method
}
}

㈧ java 怎麼把pdf轉成word

有個pdf庫,Free Spire.PDF for Java,可以直接調用方法saveToFile("ToWord.docx",FileFormat.DOCX)轉成Word,方法很簡單。

可參考原文

㈨ 使用java生成word文檔中的ftl怎麼寫

Java語言提供了一種強大的注釋形式:文檔注釋。可以將源代碼里的文檔注釋提取成一份系統的API文檔。我們在開發中定義類、方法時可以先添加文檔注釋,然後使用javadoc工具來生成自己的API文檔。

文檔注釋以斜線後緊跟兩個星號(/**)開始,以星號後緊跟一個斜線(*/)作為結尾,中間部分全部都是文檔注釋,會被提取到API文檔中。

自行搜索一下javadoc即可,示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
* 類描述
*
* @author 作者
* @version 版本
*/
public class DemoClass {
/**
* 內部屬性:name
*/
private String name;

/**
* Setter方法
* @return name
*/
public String getName() {
return name;
}

/**
* Getter方法
* @param name
*/
public void setName(String name) {
this.name = name;
}

}

㈩ java怎麼由html生成word,保留html樣式

@RequestMapping("download")
public void exportWord( HttpServletRequest request, HttpServletResponse response)
throws Exception {
User user = AppContext.getLoginUser();
Student student = studentSvc.findByUserId(user.getId());
try {
//word內容
String content="<html><body></body></html>";
byte b[] = content.getBytes("utf-8"); //這里是必須要設置編碼的,不然導出中文就會亂碼。
ByteArrayInputStream s = new ByteArrayInputStream(b);//將位元組數組包裝到流中
/*
* 關鍵地方
* 生成word格式
*/
POIFSFileSystem poifs = new POIFSFileSystem();
DirectoryEntry directory = poifs.getRoot();
DocumentEntry documentEntry = directory.createDocument("WordDocument", s);
//輸出文件
String fileName="實習考核鑒定表";
request.setCharacterEncoding("utf-8");
response.setContentType("application/msword");//導出word格式
response.addHeader("Content-Disposition", "attachment;filename=" +
new String( (fileName + ".doc").getBytes(),
"iso-8859-1"));

OutputStream ostream = response.getOutputStream();
poifs.writeFilesystem(ostream);
s.close();
ostream.close();
}catch(Exception e){
AppUtils.logError("導出出錯:%s", e.getMessage());
}
}

閱讀全文

與java生成word文件相關的資料

熱點內容
蝴蝶錢包app 瀏覽:681
聯通查詢賬號密碼修改 瀏覽:774
文件頭線到上紙邊距離是多少 瀏覽:36
蘋果手機怎樣備份文件在哪裡 瀏覽:425
zemax在哪裡編程ZPL 瀏覽:563
如何撤銷word空白頁 瀏覽:296
什麼叫網路連接超時 瀏覽:49
京東熱點代碼 瀏覽:484
慧博app下載的文件放在哪裡 瀏覽:859
PDF文件橫向太長顯示不出來 瀏覽:974
js緩存文件怎麼打開 瀏覽:983
網頁如何打開編程碼 瀏覽:369
網站被終止安全訪問怎麼辦 瀏覽:672
用微信送達文件 瀏覽:655
win7硬碟安裝文件損壞 瀏覽:394
最終幻想14版本職業 瀏覽:175
紅警2哪個版本好 瀏覽:290
app開發短視頻頁面用什麼技術 瀏覽:471
魅族mx3手機後台運行程序圖標怎麼去掉 瀏覽:344
微信號突然被永久封 瀏覽:298

友情鏈接