Apache POI 删除 CTHyperlink [低级代码] [英] Apache POI Remove CTHyperlink [Low Level code]

查看:38
本文介绍了Apache POI 删除 CTHyperlink [低级代码]的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

继续我的实际错误:删除 XWPFHyperlinkRun Apache POI

使用此代码:

public void eliminarHyperLink(XWPFDocument doc){
    XWPFHeaderFooterPolicy policy= doc.getHeaderFooterPolicy();
    XWPFFooter footer = policy.getDefaultFooter();
    List<XWPFParagraph> paragraphs = footer.getParagraphs();
    boolean primero = false;
    for (XWPFParagraph xwpfParagraph : paragraphs) {
        List<XWPFRun> runs = xwpfParagraph.getRuns();
        if(primero == true){
            for (XWPFRun run : runs) {
                if(run instanceof XWPFHyperlinkRun) {
                    XWPFHyperlinkRun linkRun = (XWPFHyperlinkRun)run;
                    ((XWPFHyperlinkRun) run).getCTHyperlink();
                    System.out.println(((XWPFHyperlinkRun) run).getCTHyperlink()); //Here is the output xml showen below
                }
            }
        }
        primero = true;
    }
}

到达包含超链接的 xml 比我需要删除的要多,有没有办法删除它?

Reaches the xml that contains an hyperlink than I need to remove, is there a way to remove that?

<xml-fragment r:id="rId1" w:history="1" xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape">
<w:r w:rsidRPr="003A2DF6">
    <w:rPr>
        <w:rFonts w:ascii="Adobe Caslon Pro" w:hAnsi="Adobe Caslon Pro"/>
        <w:b/>
        <w:sz w:val="16"/>
        <w:szCs w:val="16"/>
    </w:rPr>
    <w:t>www.cnbv.gob.mx</w:t> //This is what I need to remove!!!!!!!!!!!
</w:r>
</xml-fragment>

如果有人有任何答案,我将非常感激!问候.

Please if someone had any answers I will be really gratefull! Regards.

推荐答案

以下代码应删除段落列表中的所有超链接.

The following code should remove all hyperlinks from a paragraphs list.

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;

...
  for (XWPFParagraph paragraph : paragraphs) {
   List<CTHyperlink> hyperlinks = paragraph.getCTP().getHyperlinkList();
   CTHyperlink[] hyperlinksarr = hyperlinks.toArray(new CTHyperlink[0]);
   for (int i = 0; i < hyperlinksarr.length; i++ ) {
    CTHyperlink hyperlink = hyperlinksarr[i];
System.out.println(hyperlink.getRArray(0).getTArray(0).getStringValue());
    paragraph.getCTP().removeHyperlink(0);
   }
  }
...

paragraph.getCTP().getHyperlinkList() 生成的 List 似乎不正确.Iteratorfor each 似乎都不能使用它.所以我从它创建了一个 Array.

The List generated by paragraph.getCTP().getHyperlinkList() seems not to be correct. Neither a Iterator nor for each seems to work with it. So I've created an Array from it.

当然 paragraph.getCTP().getHyperlinkList() 生成的 List 也适用于使用 Iteratorfor每个.但我不正确;-).如果我们在迭代这个列表时从列表中删除元素,我们应该不会对 Iterator 会被搞乱感到惊讶.

Of course the List generated by paragraph.getCTP().getHyperlinkList() is also correct for using Iterator and for each. But I am not correct ;-). If we remove elements from the list while iterating over this list, we should not be surprised if the Iterator will be messed.

这篇关于Apache POI 删除 CTHyperlink [低级代码]的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆