導航:首頁 > 編程語言 > javapoi導出word

javapoi導出word

發布時間:2022-05-16 08:24:45

java 中用poi讀取word和用docx4j讀取word

不知道你是具體讀取Word裡面的什麼元素,下面以讀取文字和圖片為例吧,兩個代碼示例,你參考看看:

  1. 讀取文本

import com.spire.doc.Document;

import java.io.FileWriter;

import java.io.IOException;

public class ExtractText {

public static void main(String[] args) throws IOException {

//載入Word文檔
Document document = new Document();
document.loadFromFile("C:\Users\Administrator\Desktop\sample.docx");

//獲取文檔中的文本保存為String
String text=document.getText();

//將String寫入Txt文件
writeStringToTxt(text,"ExtractedText.txt");
}

public static void writeStringToTxt(String content, String txtFileName) throws IOException {

FileWriter fWriter= new FileWriter(txtFileName,true);
try {
fWriter.write(content);
}catch(IOException ex){
ex.printStackTrace();
}finally{
try{
fWriter.flush();
fWriter.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

}


2. 讀取圖片


import com.spire.doc.Document;

import com.spire.doc.documents.DocumentObjectType;

import com.spire.doc.fields.DocPicture;

import com.spire.doc.interfaces.ICompositeObject;

import com.spire.doc.interfaces.IDocumentObject;

import javax.imageio.ImageIO;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import java.util.ArrayList;

import java.util.LinkedList;

import java.util.List;

import java.util.Queue;

public class ExtractImages {

public static void main(String[] args) throws IOException {

//載入Word文檔

Document document = new Document();

document.loadFromFile("C:\Users\Administrator\Desktop\sample.docx");

//創建Queue對象

Queue nodes = new LinkedList();

nodes.add(document);

//創建List對象

List images = new ArrayList();

//遍歷文檔中的子對象

while (nodes.size() > 0) {

ICompositeObject node = nodes.poll();

for (int i = 0; i < node.getChildObjects().getCount(); i++) {

IDocumentObject child = node.getChildObjects().get(i);

if (child instanceof ICompositeObject) {

nodes.add((ICompositeObject) child);

//獲取圖片並添加到List

if (child.getDocumentObjectType() == DocumentObjectType.Picture) {

DocPicture picture = (DocPicture) child;

images.add(picture.getImage());

}

}

}

}

//將圖片保存為PNG格式文件

for (int i = 0; i < images.size(); i++) {

File file = new File(String.format("output/圖片-%d.png", i));

ImageIO.write(images.get(i), "PNG", file);

}

}

}

注意這里使用的jar包是spire.doc.jar,需要在java程序中先導入jar文件。

❷ java poi模板導出word後用微軟的word打不開,但是wps可以,跪求大牛解決一下,不勝感激。

樓主你好,首先你檢測一下你的word是否正常,方法是:點開始,再點運行,輸入winword /safe(注意,/前面有一個空格),看看是否能打開word,如果可以,那麼word是正常的,沒有問題。那麼樓主打不開word可能是通用模板的問題了,通用模板的具體路徑為:C:\Documents and Settings\Administrator\Application Data\Microsoft\Templates,把這個文件夾下的內容全部徹底刪除,然後再去打開word,它會自動生成一個默認的通用模板,問題應該就能解決了!

❸ java用poi導出word文檔,我要導出一個表格,表格的單元格中還要有一個表格,請問怎麼實現

有個最簡單,不用使用任何 poi 或其他第三方類庫的方法生成 excel ,或 word ,

你把一個生成好的 word 例子用文件另存為 xml , docx 之類,然後你再直接用記事本去打開這個 docx ,你就會發現是 xml 格式,

這個時候,你在程序裡面就直接用普通代碼生成這個 xml 就可以了。

❹ java poi 怎麼控制輸出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 [email protected]
* @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();
}

}

}

❺ 怎麼用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文檔

public class HwpfTest {

@SuppressWarnings("deprecation")
@Test
public void testReadByExtractor() throws Exception {
InputStream is = new FileInputStream("D:\\test.doc");
WordExtractor extractor = new WordExtractor(is);
//輸出word文檔所有的文本
System.out.println(extractor.getText());
System.out.println(extractor.getTextFromPieces());
//輸出頁眉的內容
System.out.println("頁眉:" + extractor.getHeaderText());
//輸出頁腳的內容
System.out.println("頁腳:" + extractor.getFooterText());
//輸出當前word文檔的元數據信息,包括作者、文檔的修改時間等。
System.out.println(extractor.getMetadataTextExtractor().getText());
//獲取各個段落的文本
String paraTexts[] = extractor.getParagraphText();
for (int i=0; i<paraTexts.length; i++) {
System.out.println("Paragraph " + (i+1) + " : " + paraTexts[i]);
}
//輸出當前word的一些信息
printInfo(extractor.getSummaryInformation());
//輸出當前word的一些信息
this.printInfo(extractor.getDocSummaryInformation());
this.closeStream(is);
}

/**
* 輸出SummaryInfomation
* @param info
*/
private void printInfo(SummaryInformation info) {
//作者
System.out.println(info.getAuthor());
//字元統計
System.out.println(info.getCharCount());
//頁數
System.out.println(info.getPageCount());
//標題
System.out.println(info.getTitle());
//主題
System.out.println(info.getSubject());
}

/**
* 輸出DocumentSummaryInfomation
* @param info
*/
private void printInfo(DocumentSummaryInformation info) {
//分類
System.out.println(info.getCategory());
//公司
System.out.println(info.getCompany());
}

/**
* 關閉輸入流
* @param is
*/
private void closeStream(InputStream is) {
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}

❼ java poi導出word 可以設置格式嗎

  1. 讀取word 2003及word 2007需要的jar包

  2. 讀取 2003 版本(.doc)的word文件相對來說比較簡單,只需要 poi-3.5-beta6-.jar 和 poi-scratchpad-3.5-beta6-.jar 兩個 jar 包即可, 而 2007 版本(.docx)就麻煩多,我說的這個麻煩不是我們寫代碼的時候麻煩,是要導入的 jar 包比較的多,有如下 7 個之多:

  3. 1. openxml4j-bin-beta.jar

  4. 2. poi-3.5-beta6-.jar

  5. 3. poi-ooxml-3.5-beta6-.jar

  6. 4 .dom4j-1.6.1.jar

  7. 5. geronimo-stax-api_1.0_spec-1.0.jar

  8. 6. ooxml-schemas-1.0.jar

  9. 7. xmlbeans-2.3.0.jar

  10. 其中 4-7 是 poi-ooxml-3.5-beta6-.jar 所依賴的 jar 包(在 poi-bin-3.5-beta6-.tar.gz 中的 ooxml-lib 目錄下可以找到)。

  11. 2.換行符號

  12. 硬換行:文件中換行,如果是鍵盤中使用了"enter"的換行。

  13. 軟換行:文件中一行的字元數容量有限,當字元數量超過一定值時,會自動切到下行顯示。

  14. 對程序來說,硬換行才是可以識別的、確定的換行,軟換行與字體大小、縮進有關。

  15. 3.讀取的注意事項

  16. 值得注意的是: POI 在讀取不會讀取 word 文件中的圖片信息; 還有就是對於 2007 版的 word(.docx), 如果 word 文件中有表格,所有表格中的數據都會在讀取出來的字元串的最後。

  17. 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 }

❽ 使用poi3.17導出word後,用office軟體打開正常,用wps軟體打開後,頁眉頁腳都不顯示,知道是什麼情況嗎

使用poi3.17導出word後,用office軟體打開正常,用wps軟體打開後,頁眉頁腳都顯示,可能你的軟體軟體安排的有問題或者是打開有問題,一般都會顯示出來。。

❾ poi-Java導出word時,能實現在word正文內「插入附件」的效果嗎

這個貌似很難,上次我們項目里用到poi了,也是導出word,也希望能附加一些附件,但是這個好像沒什麼好辦法,因為本來就是把資料庫中的數據導出,你可能是想通過資料庫中的路徑取到某些文件,然後把這些文件放到word中,但是怎麼解決一一對應的關系?即使解決了,這個效果應該也不好實現,這是我的經驗。當然,如果你實現了,請告知一下,我也學習一下。嘿嘿。

閱讀全文

與javapoi導出word相關的資料

熱點內容
成龍保安公司電影 瀏覽:981
彼時曾相伴完整版網盤 瀏覽:351
android分享圖片到qq空間 瀏覽:260
日漫電影主角是小人 瀏覽:194
一個叫悟空的外國電影 瀏覽:703
重生八路軍抗日的小說 瀏覽:255
日本愛情電影有哪些 瀏覽:865
java大學實用教程答案 瀏覽:671
看電視劇的免費網站下載 瀏覽:529
直接看的網站懂得都懂 瀏覽:104
誇克解壓在哪個位置 瀏覽:522
在阿里雲上開發遠程伺服器 瀏覽:570
有個人叫喪清的電影 瀏覽:730
androidmysql驅動 瀏覽:687
偷襲珍珠港國語版全部 瀏覽:611
美國一個電影叫什麼漢 瀏覽:673
叔嫂外遇電影 瀏覽:736
露點外國電影 瀏覽:197
鎮江伺服器做棋牌游戲怎麼樣 瀏覽:855
uni小游戲源碼 瀏覽:116