Как создать ссылку на электронную почту в формате POI Word
Как я могу создать внешнюю ссылку или ссылку электронной почты в XWPFDocument? Есть описание для Excel (HSSF XSSF), но я не нашел ничего похожего для Word (HWPF XWPF).
4 ответа
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.
Ура, Вим