最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java讀取Word圖片坐標的常用方法總結

 更新時間:2026年05月27日 08:55:48   作者:hef288  
本文介紹了使用Java處理Word文檔中圖片坐標的方法,主要講解了兩種圖片類型(內嵌式圖片和浮動定位圖片),文中的示例代碼講解詳細,感興趣的小伙伴可以了解下

在平常辦公自動化開展過程里, 常常得從Wor‌d文檔當?中提取圖片, 還?要清晰知曉其確切位置?。好多開發(fā)者覺得圖片不‍過是單純鑲嵌于段落之中, 實際上Wo‌rd文檔里頭的圖片常常被安?放在一個叫做“‍錨點”的架構之內, 關鍵參數(shù)便?是圖片相對于頁面或者段‍落的坐標。‍接下來我‍就從編?程實戰(zhàn)的層面, 說一?說怎樣用Java獲‍取‍這些坐標信息。

這里整理了三種主流的實現(xiàn)方案,并會先介紹坐標計算的一個關鍵核心概念 EMU,幫助你更好地理解和運用這些方法。

核心概念:EMU (English Metric Unit)

在使用任何庫處理 Word 圖片坐標時,你幾乎都會遇到 EMU 這個單位。它是 Office 內部用于精確布局的度量標準。

定義:EMU 是一種整數(shù)運算單位,用于確保在不同分辨率和設備上都能保持精確的布局。

換算關系:掌握 EMU 與常見單位的換算至關重要:

  • 1 inch (英寸) = 914,400 EMUs
  • 1 cm (厘米) ≈ 360,000 EMUs

三種主流實現(xiàn)方案解析

方案一:Apache POI (開源免費)

適用場景:主要處理 .docx 文件,內嵌式圖片通??芍苯油ㄟ^ XWPFRun.getEmbeddedPictures() 獲取。但官方 API 并不直接提供圖片位置,不過可以通過解析 XML 來實現(xiàn)。

核心思路:通過解析 word/document.xml 文件中的 <wp:anchor>(定位型圖片)或 <wp:inline>(內嵌型圖片)標簽來提取位置信息。

示例代碼

// ... 加載 XWPFDocument 對象 doc
try (FileInputStream fis = new FileInputStream("your_document.docx")) {
    XWPFDocument doc = new XWPFDocument(fis);
    
    // 獲取文檔的底層XML對象
    CTDocument1 ctDoc = doc.getDocument();
    
    // 通過解析ctDoc對象,遍歷所有段落,深度搜索其中的&lt;wp:anchor&gt;和&lt;wp:inline&gt;節(jié)點
    // 從這些節(jié)點中可以解析出距離信息,如distT, distB, distL, distR
    // 或水平位置positionH,垂直位置positionV等[reference:3][reference:4]
    
    // 注意:此方法代碼量較多,需要結合XPath解析XML結構,并處理EMU單位轉換
}

這種方式的優(yōu)點是免費且靈活,能夠深入到文檔的 XML 結構中進行精確控制;但缺點也相對明顯:實現(xiàn)復雜度高,需要自己編寫大量 XML 解析和數(shù)據(jù)處理邏輯。

方案二:Aspose.Words for Java (商業(yè)庫,但功能最強大)

適用場景:需要處理各種復雜文檔,且對提取的準確性和易用性有較高要求。

核心思路:Aspose.Words 提供了非常直觀的 API。圖片在文檔中作為 Shape 節(jié)點存在,其位置和尺寸可以直接通過 Shape 對象的方法獲取。

示例代碼

import com.aspose.words.*;

public class ExtractImagePositions {
    public static void main(String[] args) throws Exception {
        // 加載文檔
        Document doc = new Document("your_document.docx");
        
        // 遍歷文檔中的所有Shape節(jié)點(圖片就是Shape的一種)
        NodeCollection shapes = doc.getChildNodes(NodeType.SHAPE, true);
        for (Shape shape : (Iterable&lt;Shape&gt;) shapes) {
            // 判斷是否為圖片
            if (shape.getShapeType() == ShapeType.IMAGE) {
                // 獲取絕對水平和垂直位置(單位:磅)
                double x = shape.getAbsoluteHorizontalPosition();
                double y = shape.getAbsoluteVerticalPosition();
                double width = shape.getWidth();
                double height = shape.getHeight();
                
                System.out.println("Image Position: (" + x + ", " + y + ")");
                System.out.println("Image Size: (" + width + ", " + height + ")");
            }
        }
    }
}

這個方案的優(yōu)點是代碼簡潔,能夠輕松獲取位置、尺寸等信息;且功能強大,能處理浮動和內嵌等各種復雜場景。

方案三:Spire.Doc for Java (商業(yè)庫)

適用場景:對中文支持較好,提供了清晰的 API。

核心思路:通過遍歷文檔的 Section、Paragraph 對象,判斷其下的 DocumentObject 是否為 DocPicture,并直接獲取其 HorizontalPositionVerticalPosition 等坐標屬性。

示例代碼

import com.spire.doc.*;
import com.spire.doc.documents.DocumentObjectType;
import com.spire.doc.fields.DocPicture;
public class GetPictureDetails {
    public static void main(String[] args) {
        Document doc = new Document();
        doc.loadFromFile("your_document.docx");
        for (Section section : doc.getSections()) {
            for (Paragraph paragraph : section.getParagraphs()) {
                for (DocumentObject docObj : paragraph.getChildObjects()) {
                    if (docObj.getDocumentObjectType() == DocumentObjectType.Picture) {
                        DocPicture picture = (DocPicture) docObj;
                        // 獲取圖片的水平和垂直位置(磅)
                        float x = picture.getHorizontalPosition();
                        float y = picture.getVerticalPosition();
                        float width = picture.getWidth();
                        float height = picture.getHeight();
                        System.out.println("圖片位置:(" + x + ", " + y + ")");
                        System.out.println("圖片尺寸:" + width + " x " + height);
                    }
                }
            }
        }
    }
}

Spire.Doc 的優(yōu)點在于接口友好,文檔完善,對中文的支持也相當出色。

總結與對比

特性Apache POIAspose.WordsSpire.Doc
許可模式開源免費商業(yè)授權商業(yè)授權
坐標提取能力需深層解析 XML,實現(xiàn)復雜簡單直接,API 強大簡單直接,API 清晰
格式支持主要支持 .docx全面支持 .doc, .docx 等全面支持 .doc, .docx 等
核心優(yōu)勢免費,是許多項目的首選庫功能最強,處理最復雜中文友好,API 清晰
缺點/挑戰(zhàn)坐標提取門檻高,官方文檔示例較少商業(yè)授權,需采購許可商業(yè)授權,需采購許可

選擇哪種方案,通常取決于項目預算和對坐標提取的需求深度。如果追求開源免費且不介意工作量,POI 是可行的;如果希望快速、穩(wěn)定地實現(xiàn)功能,Aspose.Words 或 Spire.Doc 會節(jié)省大量時間。

Java 獲取Word中指定圖片的坐標位置

import com.spire.doc.*;
import com.spire.doc.documents.DocumentObjectType;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.fields.DocPicture;
public class GetCoordinatesOfPicture {
    public static void main(String[] args) {
        //加載Word測試文檔
        Document doc = new Document();
        doc.loadFromFile("input.docx");
        //遍歷section
        for (int a = 0; a<doc.getSections().getCount();a++)
        {
            Section section = doc.getSections().get(a);
            //遍歷paragraph段落
            for (int b =0 ;b<section.getParagraphs().getCount();b++)
            {
                Paragraph paragraph = section.getParagraphs().get(b);
                //遍歷段落中的對象
                for (int i = 0; i < paragraph.getChildObjects().getCount(); i++)
                {
                    DocumentObject docobj = paragraph.getChildObjects().get(i);
                    //判斷對象是否為圖片
                    if (docobj.getDocumentObjectType()== DocumentObjectType.Picture)
                    {
                        DocPicture picture = (DocPicture) docobj ;
                        if (picture.getTitle().equals("圖片4"))//定位標題為“圖片4”的圖片
                        {
                            //獲取圖片坐標位置
                            float x = picture.getHorizontalPosition();
                            float y = picture.getVerticalPosition();
                            System.out.println("坐標位置為:\n X=" + x + " Y=" + y);
                        }
                    }
                }
            }
        }
    }
}

到此這篇關于Java讀取Word圖片坐標的常用方法總結的文章就介紹到這了,更多相關Java讀取Word圖片坐標內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中對象?和?json?互轉四種方式?json-lib、Gson、FastJson、Jackson

    Java中對象?和?json?互轉四種方式?json-lib、Gson、FastJson、Jackson

    這篇文章主要介紹了Java中對象?和?json?互轉?四種方式?json-lib、Gson、FastJson、Jackson,需要的朋友可以參考下
    2023-11-11
  • Java8中Map常用的遍歷方式

    Java8中Map常用的遍歷方式

    這篇文章主要給大家介紹了關于Java8中Map常用的遍歷方式,map屬于java中的頂級接口之一,區(qū)別于list,map是鍵值對的形式存在,需要的朋友可以參考下
    2023-07-07
  • Spring注入方式與原理分析

    Spring注入方式與原理分析

    本文介紹了Spring框架中的依賴注入(DI)機制,包括基于XML和注解的依賴注入方式,如構造器注入、setter注入和基于屬性(字段)注入,還討論了如何解決接口多實現(xiàn)類的注入問題,以及如何通過applicationContext手動獲取bean
    2026-05-05
  • Java?SpringBoot?獲取接口實現(xiàn)類匯總

    Java?SpringBoot?獲取接口實現(xiàn)類匯總

    這篇文章主要介紹了Java?SpringBoot?獲取接口實現(xiàn)類匯總,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • MyBatis查詢緩存實例詳解

    MyBatis查詢緩存實例詳解

    查詢緩存的使用,主要是為了提高查詢訪問速度。這篇文章主要介紹了MyBatis查詢緩存,需要的朋友可以參考下
    2017-06-06
  • Java雪花算法的實現(xiàn)詳解

    Java雪花算法的實現(xiàn)詳解

    雪花算法(Snowflake)是一種分布式唯一ID生成算法,用于生成全局唯一的ID,使用雪花算法生成的ID通常是一個64位的整數(shù),可以根據(jù)需要進行轉換和展示,在Java等編程語言中,可以使用相應的庫或工具來生成雪花算法的ID,本文給大家介紹了Java雪花算法的實現(xiàn)
    2023-11-11
  • Java高效實現(xiàn)電商產品排序實戰(zhàn)

    Java高效實現(xiàn)電商產品排序實戰(zhàn)

    這篇文章主要為大家介紹了Java高效實現(xiàn)電商產品排序實戰(zhàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Java 實戰(zhàn)范例之精美網上音樂平臺的實現(xiàn)

    Java 實戰(zhàn)范例之精美網上音樂平臺的實現(xiàn)

    讀萬卷書不如行萬里路,只學書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+Springboot+ssm+mysql+maven+redis實現(xiàn)一個前后端分離的精美網上音樂平臺,大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • 手把手帶你掌握SpringBoot RabbitMQ延遲隊列

    手把手帶你掌握SpringBoot RabbitMQ延遲隊列

    RabbitMQ 是一個由Erlang語言開發(fā)的AMQP的開源實現(xiàn),支持多種客戶端。用于在分布式系統(tǒng)中存儲轉發(fā)消息,在易用性、擴展性、高可用性等方面表現(xiàn)不俗,下文將帶你深入了解 RabbitMQ 延遲隊列
    2021-09-09
  • maven安裝jar包到本地的操作方法

    maven安裝jar包到本地的操作方法

    這篇文章主要介紹了maven安裝jar包到本地,執(zhí)行該命令后,Maven?會將該?JAR?文件安裝到你本地?Maven?倉庫中,需要的朋友可以參考下
    2007-01-01

最新評論

洞口县| 六安市| 清丰县| 边坝县| 罗田县| 奉新县| 新绛县| 安庆市| 沙湾县| 临安市| 满城县| 萨嘎县| 平山县| 扎囊县| 牙克石市| 咸宁市| 惠来县| 乌审旗| 江安县| 晋江市| 彰武县| 安庆市| 肇庆市| 翼城县| 通渭县| 大石桥市| 南皮县| 尚义县| 哈巴河县| 微山县| 濉溪县| 海盐县| 余姚市| 汉阴县| 建平县| 皋兰县| 龙川县| 五大连池市| 延安市| 忻州市| 称多县|