Как создать ссылку на электронную почту в формате POI Word - PullRequest
3 голосов
/ 10 августа 2011

Как создать внешнюю ссылку или ссылку электронной почты в XWPFDocument ? Есть описание для Excel (HSSF XSSF) , но я не нашел ничего похожего для Word (HWPF XWPF).

Ответы [ 4 ]

9 голосов
/ 17 марта 2014
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});
    }
4 голосов
/ 02 марта 2017

Все,

В приведенном выше примере показано, как создать внешнюю гиперссылку.Для тех, кому необходимо создать внутреннюю гиперссылку, см. Код ниже:

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});
}
4 голосов
/ 10 августа 2011

В настоящее время XWPF поддерживает чтение и манипулирование гиперссылками, подробности см. В XWPFHyperLinkRun и XWPFHyperlink .

В настоящее время нет кода для обработки пользователемсоздание гиперссылок в XWPF, но все компоненты есть (обработка низкоуровневых объектов гиперссылок, возможность добавления гиперссылок в отношения и т. д.).Патч, чтобы связать это вместе, чтобы обеспечить недостающую функциональность, будет очень ценен всеми!

2 голосов
/ 10 августа 2011

Боюсь, что Apache POI не так далеко в обработке файлов Word, как в обработке документов Excel.Если вы находитесь на ранней стадии разработки, возможно, вы могли бы подумать о переходе на Docx4j .

Cheers, Wim

...