![](/img/trans.png)
[英]how to know whether a file is .docx or .doc format from Apache POI
[英]Apache POI :- Get Headings from DOC file
我搞砸了apache poi來操縱word文檔。 有什么方法可以從文檔文件中獲取標題嗎? 我可以從文檔中獲取純文本,但是我需要區分文檔中的所有標題嗎? apache poi api中是否有任何功能可用於僅從ms word文件中獲取標題?
對答案發表評論
有兩種方法可以在Word中創建“標題”。 “正確”的方式,以及大多數人似乎采用的方式...
在樣式下拉列表中,選擇適當的標題樣式,編寫文本,然后返回到下一行的普通段落樣式
突出顯示一行,並增大字體大小+使其加粗或斜體
如果您的用戶正在執行#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.