使用Apache POI从.doc提取超链接

时间:2019-12-17 08:25:08

标签: java ms-word apache-poi

遇到此问题时,我正在使用Apache POI从Word文档中提取内容。

我正在使用以下代码提取超链接。

 XWPFDocument document = ...
    var it = this.document.getBodyElementsIterator();
    XWPFParagraph para;
    IBodyElement be;
    while(it.hasNext()){
        be=it.next();
        String et = be.getElementType().name();

        System.out.println("element type>>"+et);
        switch (et) {
        case "PARAGRAPH":
            para = (XWPFParagraph) be;
            result.addContent(this.parseParagraph(para));
            break;
        case "TABLE":
......
......

    var runsIt = para.getIRuns().iterator();
    while(runsIt.hasNext()) {

        var irun = runsIt.next();   
        if (irun instanceof XWPFSDT) {
            var fsdt = (XWPFSDT) irun;
            System.out.println("FSDT"+fsdt.toString());
        } else {
            // it is xwpfrun
            var run = (XWPFRun) irun;

            if (irun instanceof XWPFHyperlinkRun) {
                sb.append(extractHyperLink(run));
            }else if(irun instanceof XWPFFieldRun) {
                var fieldRun= (XWPFFieldRun)irun;

                System.out.println("FieldRun:  Instruction>"+fieldRun.getFieldInstruction()+"Text>"+fieldRun.getText(0));
            }
            else {
                sb.append(run);
            } 

这很好,但是后来我遇到了一个文档,在该文档中未提取超链接。相关部分的XML摘录如下:

<w:p w:rsidP="005F1646" w:rsidRDefault="00A20D69" w:rsidR="005F1646">
    <w:pPr>
    <w:r>
        <w:fldChar w:fldCharType="begin"/>
    </w:r>
    <w:r>
        <w:instrText xml:space="preserve"> HYPERLINK "https://stackoverflow.com" </w:instrText>
    </w:r>
    <w:r>
      <w:fldChar w:fldCharType="separate"/>
    </w:r>
    <w:r w:rsidR="005F1646" w:rsidRPr="00D4262C">
       <w:rPr>
          <w:rStyle w:val="Hyperlink"/>
        </w:rPr>
        <w:t>Ask on StackOverFlow</w:t>
    </w:r>
    <w:r>
       <w:rPr>
         <w:rStyle w:val="Hyperlink"/>
       </w:rPr>
       <w:fldChar w:fldCharType="end"/>
     </w:r>
</w:p>

Apache POI不会将本段中的运行提取为XWPFHyperlinkRun,并且我的代码无法提取超链接。 在这种情况下,如何使用Apache POI提取超链接信息?

0 个答案:

没有答案