java通過poi解析word入門的操作方法
介紹
Apache POI 是一個(gè)處理Miscrosoft Office各種文件格式的開源項(xiàng)目??梢允褂肞OI在Java程序中對Miscrosoft Office各種文件進(jìn)行讀寫操作。
一、了解word docx文檔的結(jié)構(gòu)
將word文檔另存為xml文檔

打開xml文檔,可以查看到xml的結(jié)構(gòu)

二、引入POI的依賴
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>三、解析Word文檔常用API
加載Word文檔
讀取docx文件,獲取XWPFDocument 實(shí)例
FileInputStream fis = new FileInputStream("C:\\test.docx");
XWPFDocument document = new XWPFDocument(fis);獲取文檔整體結(jié)構(gòu)
document.getBodyElements獲取了docx文檔所有的元素,可以根據(jù)類型判斷段落、表格、還是引注。段落(XWPFParagraph)、表格(XWPFTable)、引注(XWPFSDT)
List<IBodyElement> bodyElements = document.getBodyElements();
for(int i=0;i<size;i++) {
IBodyElement iBodyElement = bodyElements.get(i);
if(iBodyElement instanceof XWPFParagraph){
XWPFParagraph xwpParagraph=(XWPFParagraph)iBodyElement;
}
if(iBodyElement instanceof XWPFTable){
XWPFTable xwpfTable=(XWPFTable)iBodyElement;
}
if(iBodyElement instanceof XWPFSDT){
XWPFSDT xwpfSdt=(XWPFSDT)iBodyElement;
}
}獲取文檔中的段落
// 獲取所有段落 List<XWPFParagraph> paragraphs = document.getParagraphs();
獲取文檔中的表格
// 獲取所有表格 List<XWPFTable> xwpfTableList = xwpfDocument.getTables();
獲取文檔中的腳注
// 獲取所有腳注 List<XWPFFootnote> footnotes = document.getFootnotes();
四、解析Word中的段落示例
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class WordReader {
public static void main(String[] args) {
try {
// 加載Word文檔
FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\test.docx");
XWPFDocument document = new XWPFDocument(fis);
// 獲取所有段落
List<XWPFParagraph> paragraphs = document.getParagraphs();
int index=0;
for (XWPFParagraph paragraph : paragraphs) {
// 獲取段落樣式
String style = paragraph.getStyle();
System.out.println(index++);
System.out.println("style "+style);
System.out.println("getStyleID "+paragraph.getStyleID());
System.out.println(paragraph.getText());
if (paragraph.getStyleID() != null && paragraph.getStyleID().startsWith("Heading")) {
System.out.println("title:"+paragraph.getText());
}
}
// 關(guān)閉文檔
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}五、讀取Word文檔并遍歷圖片
使用POI讀取Word文檔并遍歷其中的圖片,通常涉及以下幾個(gè)步驟:
- 創(chuàng)建
XWPFDocument對象:使用XWPFDocument類來表示W(wǎng)ord文檔,并通過OPCPackage.open()方法加載文檔。 - 遍歷文檔內(nèi)容:Word文檔中的圖片通常包含在段落(
XWPFParagraph)的運(yùn)行(XWPFRun)中。你需要遍歷文檔中的每個(gè)段落,再遍歷每個(gè)段落中的每個(gè)運(yùn)行。 - 獲取圖片數(shù)據(jù):在每個(gè)運(yùn)行中,你可以通過調(diào)用
getEmbeddedPictures()方法來獲取嵌入的圖片列表(注意,這個(gè)方法可能在新版本的POI中有所不同,具體請參考官方文檔)。然后,通過XWPFPictureData對象獲取圖片的二進(jìn)制數(shù)據(jù)和類型。 - 處理圖片數(shù)據(jù):一旦你獲得了圖片的二進(jìn)制數(shù)據(jù),就可以將其保存到文件系統(tǒng)中,或進(jìn)行其他處理。
六、解析Word中的圖片示例
下面的示例是獲取圖片 環(huán)繞方式,此外,我們還可以使用其他方法來獲取圖片的相關(guān)信息,例如獲取圖片的寬度、高度等。Java POI庫提供了豐富的API,可以滿足各種圖片處理需求。
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
public class WordPictureTest {
public static void main(String[] args) {
try {
// 加載Word文檔
FileInputStream fis = new FileInputStream("C:\\Users\\Administrator\\Desktop\\pic.docx");
XWPFDocument document = new XWPFDocument(fis);
// 獲取所有段落
List<XWPFParagraph> paragraphs = document.getParagraphs();
int index=0;
for (XWPFParagraph paragraph : paragraphs) {
parsePicture(paragraph);
}
// 關(guān)閉文檔
document.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void parsePicture(XWPFParagraph paragraph){
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run:runs){
List<XWPFPicture> embeddedPictures = run.getEmbeddedPictures();
for(XWPFPicture picture:embeddedPictures){
String fileName = picture.getPictureData().getFileName();
System.out.println(fileName);
CTDrawing drawing = run.getCTR().getDrawingArray(0);
List<CTAnchor> anchorList = drawing.getAnchorList();
List<CTInline> inlineList = drawing.getInlineList();
System.out.println("anchorList "+anchorList.size());
//inlineList.size>0 說明時(shí)嵌入式的布局
System.out.println("inlineList "+inlineList.size());
for (CTAnchor anchor :anchorList){
//文字環(huán)繞
boolean behindDoc = anchor.getBehindDoc();
boolean setWrapSquare = anchor.isSetWrapSquare();
boolean setWrapThrough = anchor.isSetWrapThrough();
boolean setWrapTight = anchor.isSetWrapTight();
boolean setWrapTopAndBottom = anchor.isSetWrapTopAndBottom();
boolean setWrapNone = anchor.isSetWrapNone();
System.out.println("setWrapNone "+setWrapNone +" behindDoc "+behindDoc);
}
}
}
}五、項(xiàng)目下載
word文擋解析檢查項(xiàng)目下載地址
https://download.csdn.net/download/gwc791224/89597904
到此這篇關(guān)于java通過poi解析word入門的文章就介紹到這了,更多相關(guān)java poi解析word入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java使用poi-tl1.9.1生成Word文檔的技巧分享
- java 使用POI合并兩個(gè)word文檔
- java實(shí)現(xiàn)在線預(yù)覽--poi實(shí)現(xiàn)word、excel、ppt轉(zhuǎn)html的方法
- java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實(shí)現(xiàn)
- 利用Java Apache POI 生成Word文檔示例代碼
- java Apache poi 對word doc文件進(jìn)行讀寫操作
- Java使用poi將word轉(zhuǎn)換為html
- Java中使用Apache POI讀取word文件簡單示例
- java使用poi讀取ppt文件和poi讀取excel、word示例
相關(guān)文章
Java Web學(xué)習(xí)之Cookie和Session的深入理解
這篇文章主要給大家介紹了關(guān)于Java Web學(xué)習(xí)之Cookie和Session的相關(guān)資料,需要的朋友可以參考下2018-04-04
詳解Java8與Runtime.getRuntime().availableProcessors()
這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)
RequestMappingHandlerMapping接口是Spring MVC中的一個(gè)核心組件,負(fù)責(zé)處理請求映射和處理器的匹配這篇文章主要介紹了Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹,需要的朋友可以參考下2024-07-07
大廠禁止SpringBoot在項(xiàng)目使用Tomcat容器原理解析
這篇文章主要為大家介紹了大廠禁止SpringBoot在項(xiàng)目使用Tomcat原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07
Java?中?Class?Path?和?Package的使用詳解
這篇文章主要介紹了Java?中?Class?Path和Package的使用詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-08-08

