【发布时间】:2017-03-03 00:45:56
【问题描述】:
如何在XWPFDocument 中创建外部链接或电子邮件链接?有Excel (HSSF XSSF) 的描述,但我没有找到与 Word (HWPF XWPF) 类似的内容。
【问题讨论】:
标签: java apache-poi
如何在XWPFDocument 中创建外部链接或电子邮件链接?有Excel (HSSF XSSF) 的描述,但我没有找到与 Word (HWPF XWPF) 类似的内容。
【问题讨论】:
标签: java apache-poi
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});
}
【讨论】:
目前,XWPF 支持读取和操作超链接,详情请参阅XWPFHyperLinkRun 和XWPFHyperlink。
目前没有任何面向用户的代码来处理在 XWPF 中创建超链接,但所有组件都在那里(处理低级超链接对象、将超链接添加到关系中的能力等)。所有人都非常感谢将其捆绑在一起以提供缺少的功能的补丁!
【讨论】:
全部,
上面的例子展示了如何创建一个外部超链接。对于那些需要创建内部超链接的人,请参见下面的代码:
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});
}
【讨论】:
恐怕 Apache POI 在处理 Word 文件方面远不如在处理 Excel 文档方面。如果您处于开发的早期阶段,也许您可以考虑转移到Docx4j。
干杯, 维姆
【讨论】: