java通過poi解析word入門的操作方法
介紹
Apache POI 是一個處理Miscrosoft Office各種文件格式的開源項目??梢允褂肞OI在Java程序中對Miscrosoft Office各種文件進行讀寫操作。
一、了解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 實例
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文檔并遍歷其中的圖片,通常涉及以下幾個步驟:
- 創(chuàng)建
XWPFDocument
對象:使用XWPFDocument
類來表示W(wǎng)ord文檔,并通過OPCPackage.open()
方法加載文檔。 - 遍歷文檔內(nèi)容:Word文檔中的圖片通常包含在段落(
XWPFParagraph
)的運行(XWPFRun
)中。你需要遍歷文檔中的每個段落,再遍歷每個段落中的每個運行。 - 獲取圖片數(shù)據(jù):在每個運行中,你可以通過調(diào)用
getEmbeddedPictures()
方法來獲取嵌入的圖片列表(注意,這個方法可能在新版本的POI中有所不同,具體請參考官方文檔)。然后,通過XWPFPictureData
對象獲取圖片的二進制數(shù)據(jù)和類型。 - 處理圖片數(shù)據(jù):一旦你獲得了圖片的二進制數(shù)據(jù),就可以將其保存到文件系統(tǒng)中,或進行其他處理。
六、解析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 說明時嵌入式的布局 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); } } } }
五、項目下載
word文擋解析檢查項目下載地址
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合并兩個word文檔
- java實現(xiàn)在線預覽--poi實現(xiàn)word、excel、ppt轉(zhuǎn)html的方法
- java poi設(shè)置生成的word的圖片為上下型環(huán)繞以及其位置的實現(xiàn)
- 利用Java Apache POI 生成Word文檔示例代碼
- java Apache poi 對word doc文件進行讀寫操作
- Java使用poi將word轉(zhuǎn)換為html
- Java中使用Apache POI讀取word文件簡單示例
- java使用poi讀取ppt文件和poi讀取excel、word示例
相關(guān)文章
Java Web學習之Cookie和Session的深入理解
這篇文章主要給大家介紹了關(guān)于Java Web學習之Cookie和Session的相關(guān)資料,需要的朋友可以參考下2018-04-04詳解Java8與Runtime.getRuntime().availableProcessors()
這篇文章主要介紹了詳解Java8與Runtime.getRuntime().availableProcessors(),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹(最新推薦)
RequestMappingHandlerMapping接口是Spring MVC中的一個核心組件,負責處理請求映射和處理器的匹配這篇文章主要介紹了Spring接口版本控制方案及RequestMappingHandlerMapping接口介紹,需要的朋友可以參考下2024-07-07大廠禁止SpringBoot在項目使用Tomcat容器原理解析
這篇文章主要為大家介紹了大廠禁止SpringBoot在項目使用Tomcat原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07Java?中?Class?Path?和?Package的使用詳解
這篇文章主要介紹了Java?中?Class?Path和Package的使用詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下2022-08-08