【问题标题】:How to create a email link in POI Word Format如何以 POI Word 格式创建电子邮件链接
【发布时间】:2017-03-03 00:45:56
【问题描述】:

如何在XWPFDocument 中创建外部链接或电子邮件链接?有Excel (HSSF XSSF) 的描述,但我没有找到与 Word (HWPF XWPF) 类似的内容。

【问题讨论】:

    标签: java apache-poi


    【解决方案1】:
    public void example() throws Exception{
    
            XWPFDocument document = new XWPFDocument(); 
            //Append a link to 
            appendExternalHyperlink("https://poi.apache.org", " Link to POI", document.createParagraph());
    
            document.write(new FileOutputStream("resultat.docx"));
        }
    
        /**
         * Appends an external hyperlink to the paragraph.
         * 
         * @param url The URL to the external target
         * @param text The linked text
         * @param paragraph the paragraph the link will be appended to.
         */
        public static void appendExternalHyperlink(String url, String text, XWPFParagraph paragraph){
    
            //Add the link as External relationship
            String id=paragraph.getDocument().getPackagePart().addExternalRelationship(url, XWPFRelation.HYPERLINK.getRelation()).getId();
    
            //Append the link and bind it to the relationship
            CTHyperlink cLink=paragraph.getCTP().addNewHyperlink();
            cLink.setId(id);
    
            //Create the linked text
            CTText ctText=CTText.Factory.newInstance();
            ctText.setStringValue(text);
            CTR ctr=CTR.Factory.newInstance();
            ctr.setTArray(new CTText[]{ctText});
    
            //Insert the linked text into the link
            cLink.setRArray(new CTR[]{ctr});
        }
    

    【讨论】:

    • 这真的很有帮助!所以现在出现超链接,但锚文本没有以蓝色文本或下划线出现。你能告诉我应该使用哪种方法在 CTR 类中创建样式吗?没有文档,因此很难弄清楚哪种方法能做什么。
    • 经过一番强大的谷歌搜索,这就是我发现的。抱歉格式化。 CTRPr rpr = ctr.addNewRPr(); CTColor 颜色 = CTColor.Factory.newInstance(); colour.setVal("0000FF"); rpr.setColor(颜色); CTRPr rpr1 = ctr.addNewRPr(); rpr1.addNewU().setVal(STUnderline.SINGLE);
    【解决方案2】:

    目前,XWPF 支持读取和操作超链接,详情请参阅XWPFHyperLinkRunXWPFHyperlink

    目前没有任何面向用户的代码来处理在 XWPF 中创建超链接,但所有组件都在那里(处理低级超链接对象、将超链接添加到关系中的能力等)。所有人都非常感谢将其捆绑在一起以提供缺少的功能的补丁!

    【讨论】:

    【解决方案3】:

    全部,

    上面的例子展示了如何创建一个外部超链接。对于那些需要创建内部超链接的人,请参见下面的代码:

    XWPFParagraph hyperPara = document.createParagraph();
    hyperPara.setAlignment(ParagraphAlignment.CENTER);
    addHyperlink(hyperPara, "Hyperlink Text", "Heading Text");
    
    
    
    private static void addHyperlink(XWPFParagraph para, String text, String bookmark) {
         //Create hyperlink in paragraph
         CTHyperlink cLink=para.getCTP().addNewHyperlink();
         cLink.setAnchor(bookmark);
         //Create the linked text
         CTText ctText=CTText.Factory.newInstance();
         ctText.setStringValue(text);
         CTR ctr=CTR.Factory.newInstance();
         ctr.setTArray(new CTText[]{ctText});
    
         //Create the formatting
         CTFonts fonts = CTFonts.Factory.newInstance();
         fonts.setAscii("Calibri Light" );
         CTRPr rpr = ctr.addNewRPr();
         CTColor colour = CTColor.Factory.newInstance();
         colour.setVal("0000FF");
         rpr.setColor(colour);
         CTRPr rpr1 = ctr.addNewRPr();
         rpr1.addNewU().setVal(STUnderline.SINGLE);
    
         //Insert the linked text into the link
         cLink.setRArray(new CTR[]{ctr});
    }
    

    【讨论】:

    • 是否可以将此内部超链接添加到 XWPFTableCell?
    【解决方案4】:

    恐怕 Apache POI 在处理 Word 文件方面远不如在处理 Excel 文档方面。如果您处于开发的早期阶段,也许您可​​以考虑转移到Docx4j

    干杯, 维姆

    【讨论】:

      猜你喜欢
      • 2014-06-15
      • 2015-11-12
      • 1970-01-01
      • 2013-06-17
      • 2011-07-15
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多