Как сделать гиперссылки внутри документа с помощью apache poi 5?
Использую apache poi 5 для формирования docx. Мне надо сделать оглавление с гиперссылками. Но для начала не могу понять как в принципе сделать гиперссылку на какую-то часть документа в apache poi. Вот к чем я пришел:
// Заголовок 1
XWPFParagraph heading1 = document.createParagraph();
XWPFRun runHeading1 = heading1.createRun();
runHeading1.setText("Заголовок 1");
String heading1Bookmark = "heading1";
heading1.getCTP().addNewBookmarkStart().setName(heading1Bookmark);
heading1.getCTP().addNewBookmarkEnd();
// Заголовок 2
XWPFParagraph heading2 = document.createParagraph();
XWPFRun runHeading2 = heading2.createRun();
runHeading2.setText("Заголовок 2");
String heading2Bookmark = "heading2";
heading2.getCTP().addNewBookmarkStart().setName(heading2Bookmark);
heading2.getCTP().addNewBookmarkEnd();
// Оглавление
XWPFParagraph tocTitle = document.createParagraph();
XWPFRun runTocTitle = tocTitle.createRun();
runTocTitle.setText("Оглавление");
// Гиперссылки на закладки
XWPFParagraph tocEntry1 = document.createParagraph();
XWPFRun runTocEntry1 = tocEntry1.createRun();
runTocEntry1.setText("1. ");
runTocEntry1.getCTR().addNewTab();
tocEntry1.createHyperlinkRun("#" + heading1Bookmark).setText("Заголовок 1");
XWPFParagraph tocEntry2 = document.createParagraph();
XWPFRun runTocEntry2 = tocEntry2.createRun();
runTocEntry2.setText("2. ");
runTocEntry2.getCTR().addNewTab();
tocEntry2.createHyperlinkRun("#" + heading2Bookmark).setText("Заголовок 2");
// Сохранение документа
FileOutputStream out = new FileOutputStream("table_of_contents.docx");
document.write(out);
out.close();
System.out.println("Документ успешно создан.");
} catch (IOException e) {
e.printStackTrace();
}
К сожалению, гиперссылку в доке я так не получил.
Источник: Stack Overflow на русском