我正在用ApachePOI生成一个xwpfdocument(在此之前从未使用过),并且我想将一个段落链接到同一个.docx文档中的另一个段落。这可能是使用poi的本机功能实现的,还是需要深入研究xmlbean Package 类(即ctp)来实现的,还是我运气不好?我看到的每个关于超链接和poi的问题示例都引用了创建外部类型超链接或excel工作簿工作表之间的链接。到目前为止,我只能生成一个“超链接”的意义上的ctrl点击段落内完成的文件,它似乎只是做一个文本搜索从文件的顶部开始。下面是我目前用来实现这一点的代码。提前谢谢!
public static void addInternalHyperlink(XWPFParagraph origin, String text, XWPFParagraph target) {
if (target != null) {
// Create the hyperlink itself
CTHyperlink link = origin.getCTP().addNewHyperlink();
link.setAnchor(target.getText());
// Create hyperlink text
CTText linkText = CTText.Factory.newInstance();
linkText.setStringValue(text);
CTR ctr = CTR.Factory.newInstance();
ctr.setTArray(new CTText[] {linkText});
// Format hyperlink text
CTFonts fonts = CTFonts.Factory.newInstance();
fonts.setAscii("Times New Roman");
CTRPr rpr = ctr.addNewRPr();
CTColor color = CTColor.Factory.newInstance();
color.setVal("0000FF");
rpr.setColor(color);
CTRPr rpr1 = ctr.addNewRPr();
rpr1.addNewU().setVal(STUnderline.SINGLE);
// Insert formatted text into link
link.setRArray(new CTR[] {ctr});
}
}
请注意,我想使用'origin'参数作为包含实际链接的段落,'text'参数作为链接文本,'target'参数作为实际链接目的地。
更新:这里有一个xml片段,其中包含一个示例段落,我已通过word gui将其链接到一个节标题。
<w:p w14:paraId="5B1C3A0C" w14:textId="659E388D" w:rsidR="00A4419C" w:rsidRDefault="00A4419C" w:rsidP="00A4419C"><w:hyperlink w:anchor="_Another_Heading" w:history="1"><w:r w:rsidRPr="00A4419C"><w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr><w:t>Here is some stuff that could b</w:t></w:r><w:r w:rsidRPr="00A4419C"><w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr><w:t>e</w:t></w:r><w:r w:rsidRPr="00A4419C"><w:rPr><w:rStyle w:val="Hyperlink"/></w:rPr><w:t xml:space="preserve"> the link</w:t></w:r></w:hyperlink></w:p><w:p w14:paraId="19996B78" w14:textId="5C39B081" w:rsidR="00A4419C" w:rsidRPr="00A4419C" w:rsidRDefault="00A4419C" w:rsidP="00A4419C"><w:pPr><w:pStyle w:val="Heading1"/></w:pPr><w:bookmarkStart w:id="0" w:name="_Another_Heading"/><w:bookmarkEnd w:id="0"/><w:r><w:t>Another Heading</w:t></w:r><w:bookmarkStart w:id="1" w:name="_GoBack"/><w:bookmarkEnd w:id="1"/></w:p>
1条答案
按热度按时间qc6wkl3g1#
解决方案分为两部分。
首先我们需要一个
XWPFHyperlinkRun
其目标是文档中的锚。其次,我们需要目标锚定,例如,它可以是文档中的书签。所以我们需要在文档中创建这样的书签。
不幸的是,这两种方法都不支持只使用高级类
apache poi
直到现在。所以我们需要低级别的课程表ooxml-schemas
我也是。下面的代码使用
apache poi 4.0.0
以及ooxml-schemas-1.4。