如何在POI Word格式中创建电子邮件链接

3
我该如何在XWPFDocument中创建外部链接或电子邮件链接?有一个关于Excel(HSSF XSSF)的描述,但我没有找到类似于Word(HWPF XWPF)的东西。
4个回答

9
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类中的样式吗?由于没有文档,因此很难弄清楚哪种方法做什么。 - Artin
1
经过一番努力的搜索,我找到了以下内容。对于格式方面的问题,我表示抱歉。CTRPr rpr = ctr.addNewRPr(); CTColor colour = CTColor.Factory.newInstance(); colour.setVal("0000FF"); rpr.setColor(colour); CTRPr rpr1 = ctr.addNewRPr(); rpr1.addNewU().setVal(STUnderline.SINGLE); - Artin

4
目前,XWPF已支持阅读和操作超链接,请参见XWPFHyperLinkRunXWPFHyperlink以获取详细信息。
目前没有用户界面代码来处理在XWPF中创建超链接,但所有组件都在那里(处理低级别超链接对象,能力添加超链接到关系等)。为提供缺失功能而编写的补丁将受到所有人的欢迎!

@Gagravarr,你能帮我解决一下这个类似的问题吗? - JavaResp

4

大家好,

上面的示例展示了如何创建一个外部超链接。如果需要创建内部超链接,请参考以下代码:

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中? - schmimona

2
恐怕Apache POI在处理Word文件方面的能力远远不及处理Excel文档。如果您处于开发的早期阶段,也许可以考虑转向Docx4j
祝好, Wim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接