Ⅰ java poi導出word 可以設置格式嗎
讀取word 2003及word 2007需要的jar包
讀取 2003 版本(.doc)的word文件相對來說比較簡單,只需要 poi-3.5-beta6-.jar 和 poi-scratchpad-3.5-beta6-.jar 兩個 jar 包即可, 而 2007 版本(.docx)就麻煩多,我說的這個麻煩不是我們寫代碼的時候麻煩,是要導入的 jar 包比較的多,有如下 7 個之多:
1. openxml4j-bin-beta.jar
2. poi-3.5-beta6-.jar
3. poi-ooxml-3.5-beta6-.jar
4 .dom4j-1.6.1.jar
5. geronimo-stax-api_1.0_spec-1.0.jar
6. ooxml-schemas-1.0.jar
7. xmlbeans-2.3.0.jar
其中 4-7 是 poi-ooxml-3.5-beta6-.jar 所依賴的 jar 包(在 poi-bin-3.5-beta6-.tar.gz 中的 ooxml-lib 目錄下可以找到)。
2.換行符號
硬換行:文件中換行,如果是鍵盤中使用了"enter"的換行。
軟換行:文件中一行的字元數容量有限,當字元數量超過一定值時,會自動切到下行顯示。
對程序來說,硬換行才是可以識別的、確定的換行,軟換行與字體大小、縮進有關。
3.讀取的注意事項
值得注意的是: POI 在讀取不會讀取 word 文件中的圖片信息; 還有就是對於 2007 版的 word(.docx), 如果 word 文件中有表格,所有表格中的數據都會在讀取出來的字元串的最後。
4.讀取word文本內容代碼
1 import java.io.File;
2 import java.io.FileInputStream;
3 import java.io.InputStream;
4
5 import org.apache.poi.POIXMLDocument;
6 import org.apache.poi.POIXMLTextExtractor;
7 import org.apache.poi.hwpf.extractor.WordExtractor;
8 import org.apache.poi.openxml4j.opc.OPCPackage;
9 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
10
11 public class Test {
12 public static void main(String[] args) {
13 try {
14 InputStream is = new FileInputStream(new File("2003.doc"));
15 WordExtractor ex = new WordExtractor(is);
16 String text2003 = ex.getText();
17 System.out.println(text2003);
18
19 OPCPackage opcPackage = POIXMLDocument.openPackage("2007.docx");
20 POIXMLTextExtractor extractor = new XWPFWordExtractor(opcPackage);
21 String text2007 = extractor.getText();
22 System.out.println(text2007);
23
24 } catch (Exception e) {
25 e.printStackTrace();
26 }
27 }
28 }
Ⅱ java poi 生成word表格怎麼 讓表格填充整個頁面和合並單元格
有個最簡單,不用使用任何
poi
或其他第三方類庫的方法生成
excel
,或
word
,
你把一個生成好的
word
例子用文件另存為
xml
,
docx之類,然後你再直接用記事本去打開這個
docx
,你就會發現是
xml
格式,
這個時候,你在程序裡面就直接用普通代碼生成這個
xml
就可以了。
Ⅲ 怎麼使用JAVA,POI讀寫word文檔
如何使用JAVA、POI讀寫word文檔??
能不能將一個word的內容完全讀過來,放到一個新生成的word文件中去,要求能將word中的表格、圖片等保留,格式不變。最好能給個例子?網上多是很早以前的那個解決方法如下:,只能讀文本內容,且新生成的word文件打開時總是要提示選擇編碼,不太好用,希望能有新的解決方案??!!
poi操作word
1.1 添加poi支持:包下載地址
1.2 POI對Excel文件的讀取操作比較方便,POI還提供對Word的DOC格式文件的讀取。但在它的發行版本中沒有發布對Word支持的模塊,需要另外下載一個POI的擴展的Jar包。下載地址為;下載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 s = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
DocumentEntry de = directory.createDocument("WordDocument", s);
FileOutputStream ostream = new FileOutputStream(path);
fs.writeFilesystem(ostream);
s.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);
Ⅳ Java 利用poi 可以直接讀取word中的表格保持樣式生成新的word么
1.讀取word
2003及word
2007需要的jar包
讀取
2003
版本(.doc)的word文件相對來說比較簡單,只需要
poi-3.5-beta6-20090622.jar
和
poi-scratchpad-3.5-beta6-20090622.jar
兩個
jar
包即可,
而
2007
版本(.docx)就麻煩多,我說的這個麻煩不是我們寫代碼的時候麻煩,是要導入的
jar
包比較的多,有如下
7
個之多:
1.
openxml4j-bin-beta.jar
2.
poi-3.5-beta6-20090622.jar
3.
poi-ooxml-3.5-beta6-20090622.jar
4
.dom4j-1.6.1.jar
5.
geronimo-stax-api_1.0_spec-1.0.jar
6.
ooxml-schemas-1.0.jar
7.
xmlbeans-2.3.0.jar
其中
4-7
是
poi-ooxml-3.5-beta6-20090622.jar
所依賴的
jar
包(在
poi-bin-3.5-beta6-20090622.tar.gz
中的
ooxml-lib
目錄下可以找到)。
2.換行符號
硬換行:文件中換行,如果是鍵盤中使用了"enter"的換行。
軟換行:文件中一行的字元數容量有限,當字元數量超過一定值時,會自動切到下行顯示。
對程序來說,硬換行才是可以識別的、確定的換行,軟換行與字體大小、縮進有關。
3.讀取的注意事項
值得注意的是:
POI
在讀取不會讀取
word
文件中的圖片信息;
還有就是對於
2007
版的
word(.docx),
如果
word
文件中有表格,所有表格中的數據都會在讀取出來的字元串的最後。
4.讀取word文本內容代碼
1
import
java.io.File;
2
import
java.io.FileInputStream;
3
import
java.io.InputStream;
4
5
import
org.apache.poi.POIXMLDocument;
6
import
org.apache.poi.POIXMLTextExtractor;
7
import
org.apache.poi.hwpf.extractor.WordExtractor;
8
import
org.apache.poi.openxml4j.opc.OPCPackage;
9
import
org.apache.poi.xwpf.extractor.XWPFWordExtractor;
10
11
public
class
Test
{
12
public
static
void
main(String[]
args)
{
13
try
{
14
InputStream
is
=
new
FileInputStream(new
File("2003.doc"));
15
WordExtractor
ex
=
new
WordExtractor(is);
16
String
text2003
=
ex.getText();
17
System.out.println(text2003);
18
19
OPCPackage
opcPackage
=
POIXMLDocument.openPackage("2007.docx");
20
POIXMLTextExtractor
extractor
=
new
XWPFWordExtractor(opcPackage);
21
String
text2007
=
extractor.getText();
22
System.out.println(text2007);
23
24
}
catch
(Exception
e)
{
25
e.printStackTrace();
26
}
27
}
28
}
Ⅳ 怎麼用java poi生成word表格
rt java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class XwpfTUtil {
/*String filePath = "/sta.docx";
InputStream is;
XWPFDocument doc;
Map<String, Object> params = new HashMap<String, Object>();
{
params.put("${name}", "xxx");
params.put("${sex}", "男");
params.put("${political}", "共青團員");
params.put("${place}", "sssss");
params.put("${classes}", "3102");
params.put("${id}", "213123123");
params.put("${qq}", "213123");
params.put("${tel}", "312313213");
params.put("${oldJob}", "sadasd");
params.put("${swap}", "是");
params.put("${first}", "asdasd");
params.put("${second}", "綜合事務部");
params.put("${award}", "asda");
params.put("${achievement}", "完成科協網站的開發");
params.put("${advice}", "沒有建議");
Ⅵ java用poi生成word文檔,並且給word文檔中的中文設置字體,我測試只能改英文字體
試試我這個
XWPFRun r1 = p.createRun();
r1.setText(text);
r1.setFontSize(16);
CTRPr rpr = r1.getCTR().isSetRPr() ? r1.getCTR().getRPr() : r1.getCTR().addNewRPr();
CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts();
fonts.setAscii("仿宋");
fonts.setEastAsia("仿宋");
fonts.setHAnsi("仿宋");
Ⅶ java 生成word用什麼方法好 poi 還是iText生成rtf
可以用jacob 這個是用java調用dll里的方法來操作word dll里的方法類似VBA
還可以用openoffice的api另存為word
iText沒用過 poi操作excel很方便 純文本的word還可以 有圖片 有表格的話就不行了
ps:java生成有表格的word好像都不是很好
Ⅷ java用poi導出word文檔,我要導出一個表格,表格的單元格中還要有一個表格,請問怎麼實現
有個最簡單,不用使用任何 poi 或其他第三方類庫的方法生成 excel ,或 word ,
你把一個生成好的 word 例子用文件另存為 xml , docx 之類,然後你再直接用記事本去打開這個 docx ,你就會發現是 xml 格式,
這個時候,你在程序裡面就直接用普通代碼生成這個 xml 就可以了。
Ⅸ java中怎麼使用poi創建,編輯word文檔
我最近也在學:僅有的一點資料
import java.io.*;
import java.util.*;
import org.apache.poi.poifs.filesystem.*;
import org.apache.poi.util.LittleEndian;
public class WordTest {
public WordTest() {
}
public static boolean writeWordFile(String path, String content) {
boolean w = false;
try {
// byte b[] = content.getBytes( "ISO-8859-1 ");
byte b[] = content.getBytes();
ByteArrayInputStream s = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
DocumentEntry de = directory.createDocument( "WordDocument ", s);
FileOutputStream ostream = new FileOutputStream(path);
fs.writeFilesystem(ostream);
s.close();
ostream.close();
} catch (IOException e) {
e.printStackTrace();
}
return w;
}
public static void main(String[] args){
boolean b = writeWordFile( "E://test.doc ", "hello ");
}
}
/*
public String extractText(InputStream in) throws IOException {
ArrayList text = new ArrayList();
POIFSFileSystem fsys = new POIFSFileSystem(in);
DocumentEntry headerProps = (DocumentEntry) fsys.getRoot().getEntry( "WordDocument ");
DocumentInputStream din = fsys.createDocumentInputStream( "WordDocument ");
byte[] header = new byte[headerProps.getSize()];
din.read(header);
din.close();
// Prende le informazioni dall 'header del documento
int info = LittleEndian.getShort(header, 0xa);
boolean useTable1 = (info & 0x200) != 0;
//boolean useTable1 = true;
// Prende informazioni dalla piece table
int complexOffset = LittleEndian.getInt(header, 0x1a2);
//int complexOffset = LittleEndian.getInt(header);
String tableName = null;
if (useTable1) {
tableName = "1Table ";
} else {
tableName = "0Table ";
}
DocumentEntry table = (DocumentEntry) fsys.getRoot().getEntry(tableName);
byte[] tableStream = new byte[table.getSize()];
din = fsys.createDocumentInputStream(tableName);
din.read(tableStream);
din.close();
din = null;
fsys = null;
table = null;
headerProps = null;
int multiple = findText(tableStream, complexOffset, text);