簡體   English   中英

Apache POI:-從DOC文件獲取標題

[英]Apache POI :- Get Headings from DOC file

我搞砸了apache poi來操縱word文檔。 有什么方法可以從文檔文件中獲取標題嗎? 我可以從文檔中獲取純文本,但是我需要區分文檔中的所有標題嗎? apache poi api中是否有任何功能可用於僅從ms word文件中獲取標題?

對答案發表評論

有兩種方法可以在Word中創建“標題”。 “正確”的方式,以及大多數人似乎采用的方式...

  1. 在樣式下拉列表中,選擇適當的標題樣式,編寫文本,然后返回到下一行的普通段落樣式

  2. 突出顯示一行,並增大字體大小+使其加粗或斜體

如果您的用戶正在執行#2,則基本上沒有確定標題的真正希望。 缺少編寫一些模糊匹配邏輯來嘗試發現字體大小跳變的方法,這真是太不幸了

對於#1,在Apache POI中相當簡單。 您要做的就是獲取適用於段落的樣式的樣式描述,然后獲取樣式的名稱。 如果以“ Heading (不區分大小寫)開頭,則說明您已找到標題。 獲取該段落的文本,然后繼續瀏覽文檔。

如果您查看基於POI構建的Apache Tika MS-Word解析器 ,那么您將看到一個很好的示例,該示例遍歷段落並檢查樣式

正如Gagravarr所說:

對於#1,在Apache POI中相當簡單。 您要做的就是獲取適用於段落的樣式的樣式描述,然后獲取樣式的名稱。 如果以“標題”(不區分大小寫)開頭,則說明您已找到標題。 獲取該段落的文本,然后繼續瀏覽文檔。

使用像這樣的Apache POI代碼:

        File f=new File("test.docx");
        FileInputStream fis = new FileInputStream(f);
        XWPFDocument xdoc=new XWPFDocument(OPCPackage.open(fis));
        XWPFStyles styles=xdoc.getStyles();         
        List<XWPFParagraph> xwpfparagraphs =xdoc.getParagraphs();
        System.out.println();
        for(int i=0;i<xwpfparagraphs.size();i++)
        {
            System.out.println("paragraph style id "+(i+1)+":"+xwpfparagraphs.get(i).getStyleID());                         
            if(xwpfparagraphs.get(i).getStyleID()!=null)
            {
                String styleid=xwpfparagraphs.get(i).getStyleID();
                XWPFStyle style=styles.getStyle(styleid);
                if(style!=null)
                {
                    System.out.println("Style name:"+style.getName());
                    if(style.getName().startsWith("heading"))
                    {
                        //this is a heading
                    }
                }

            }


        }

至少對於HWPF(即舊的二進制doc格式)而言,如果文件格式正確(因此在其他答案中輸入#1),則不應僅依賴樣式名稱-實際上,這可能與語言有關值(英語中的“標題”,法語中的“滴度”等)。

Paragraph.getLvl()編碼相應段落在Word的大綱視圖中顯示級別 ,通常是很好的輔助來源。 1表示最高有效級別,所有后續數字(最多8代表標題不太重要的候選人,而9是Word默認情況下分配給普通(非標題)段落的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM