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

Java讀取Word圖片坐標(biāo)的常用方法總結(jié)

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

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

這里整理了三種主流的實(shí)現(xiàn)方案,并會(huì)先介紹坐標(biāo)計(jì)算的一個(gè)關(guān)鍵核心概念 EMU,幫助你更好地理解和運(yùn)用這些方法。

核心概念:EMU (English Metric Unit)

在使用任何庫處理 Word 圖片坐標(biāo)時(shí),你幾乎都會(huì)遇到 EMU 這個(gè)單位。它是 Office 內(nèi)部用于精確布局的度量標(biāo)準(zhǔn)。

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

換算關(guān)系:掌握 EMU 與常見單位的換算至關(guān)重要:

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

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

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

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

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

示例代碼

// ... 加載 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é)點(diǎn)
    // 從這些節(jié)點(diǎn)中可以解析出距離信息,如distT, distB, distL, distR
    // 或水平位置positionH,垂直位置positionV等[reference:3][reference:4]
    
    // 注意:此方法代碼量較多,需要結(jié)合XPath解析XML結(jié)構(gòu),并處理EMU單位轉(zhuǎn)換
}

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

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

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

核心思路:Aspose.Words 提供了非常直觀的 API。圖片在文檔中作為 Shape 節(jié)點(diǎn)存在,其位置和尺寸可以直接通過 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é)點(diǎn)(圖片就是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 + ")");
            }
        }
    }
}

這個(gè)方案的優(yōu)點(diǎn)是代碼簡潔,能夠輕松獲取位置、尺寸等信息;且功能強(qiáng)大,能處理浮動(dòng)和內(nèi)嵌等各種復(fù)雜場景。

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

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

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

示例代碼

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)點(diǎn)在于接口友好,文檔完善,對中文的支持也相當(dāng)出色。

總結(jié)與對比

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

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

Java 獲取Word中指定圖片的坐標(biāo)位置

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"))//定位標(biāo)題為“圖片4”的圖片
                        {
                            //獲取圖片坐標(biāo)位置
                            float x = picture.getHorizontalPosition();
                            float y = picture.getVerticalPosition();
                            System.out.println("坐標(biāo)位置為:\n X=" + x + " Y=" + y);
                        }
                    }
                }
            }
        }
    }
}

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

相關(guān)文章

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

    Java中對象?和?json?互轉(zhuǎn)四種方式?json-lib、Gson、FastJson、Jackson

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

    Java8中Map常用的遍歷方式

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

    Spring注入方式與原理分析

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

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

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

    MyBatis查詢緩存實(shí)例詳解

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

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

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

    Java高效實(shí)現(xiàn)電商產(chǎn)品排序?qū)崙?zhàn)

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

    Java 實(shí)戰(zhàn)范例之精美網(wǎng)上音樂平臺(tái)的實(shí)現(xiàn)

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

    手把手帶你掌握SpringBoot RabbitMQ延遲隊(duì)列

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

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

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

最新評論

金阳县| 胶州市| 浦城县| 嘉荫县| 会泽县| 广德县| 丹巴县| 安新县| 奉化市| 沙洋县| 中山市| 罗平县| 监利县| 凤凰县| 临泉县| 县级市| 乌兰浩特市| 黄浦区| 枝江市| 佳木斯市| 翼城县| 都江堰市| 息烽县| 泰兴市| 新津县| 中阳县| 元阳县| 铜山县| 梓潼县| 泽库县| 临泉县| 宁德市| 凤庆县| 神木县| 鄯善县| 台安县| 恩平市| 都匀市| 东阿县| 当涂县| 阿城市|