如何使用Apache POI将超链接添加到XWPFDocument的页脚?

时间:2019-03-21 07:00:07

标签: java hyperlink apache-poi footer xwpf

$array1=[1,2,3,4,5,6]; $array2=[1,2,3,5,6,7,8,9,10]; 方法(source)在XWPFDocument的页脚中不起作用。在页脚中,结果不会被识别为超链接。

我是Apache POI的新手,没有使用低级知识的经验。有人可以解释一下这里的问题吗?

appendExternalHyperlink()

1 个答案:

答案 0 :(得分:1)

footer[n].xml是其自己的程序包部分,并且需要自己的关系。但是您的代码始终会为document.xml包部分创建外部超链接关系。它始终使用paragraph.getDocument()。这是错误的。

以下代码提供了一种在给定的XWPFHyperlinkRun中创建XWPFParagraph的方法,并获取了正确的包部分以建立关系。它使用paragraph.getPart()来获取正确的部分。因此,此方法适用于文档正文以及页眉和/或页脚中的段落。

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;
import org.apache.poi.wp.usermodel.HeaderFooterType;

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;

public class CreateWordHyperlinks {

 static XWPFHyperlinkRun createHyperlinkRun(XWPFParagraph paragraph, String uri) throws Exception {
  String rId = paragraph.getPart().getPackagePart().addExternalRelationship(
    uri, 
    XWPFRelation.HYPERLINK.getRelation()
   ).getId();

  CTHyperlink cthyperLink=paragraph.getCTP().addNewHyperlink();
  cthyperLink.setId(rId);
  cthyperLink.addNewR();

  return new XWPFHyperlinkRun(
    cthyperLink,
    cthyperLink.getRArray(0),
    paragraph
   );
 }

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run = paragraph.createRun();
  run.setText("This is a text paragraph having a link to Google ");

  XWPFHyperlinkRun hyperlinkrun = createHyperlinkRun(paragraph, "https://www.google.de");
  hyperlinkrun.setText("https://www.google.de");
  hyperlinkrun.setColor("0000FF");
  hyperlinkrun.setUnderline(UnderlinePatterns.SINGLE);

  run = paragraph.createRun();
  run.setText(" in it.");

  XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT);
  paragraph = footer.createParagraph();
  run = paragraph.createRun();
  run.setText("Email: ");

  hyperlinkrun = createHyperlinkRun(paragraph, "mailto:me@example.com");
  hyperlinkrun.setText("me@example.com");
  hyperlinkrun.setColor("0000FF");
  hyperlinkrun.setUnderline(UnderlinePatterns.SINGLE);

  FileOutputStream out = new FileOutputStream("CreateWordHyperlinks.docx");
  document.write(out);
  out.close();
  document.close();

 }
}