1 回答

TA贡献1793条经验 获得超6个赞
如果XWPfDocument是从模板创建的,则该模板必须已经包含命名样式“超链接”。这意味着,它必须包含/word/styles.xml在潜在样式的条目中
...
<w:latentStyles...
...
<w:lsdException w:name="Hyperlink" w:qFormat="1"/>
...
以及样式定义
...
<w:style w:type="character" w:styleId="Hyperlink">
<w:name w:val="Hyperlink"/>
<w:basedOn w:val="..."/>
<w:uiPriority w:val="99"/>
<w:unhideWhenUsed/>
<w:qFormat/>
<w:rsid w:val="00072FE4"/>
<w:rPr>
<w:color w:val="0000FF" w:themeColor="hyperlink"/>
<w:u w:val="single"/>
</w:rPr>
</w:style>
...
如果这是真的,那么以下代码适用于我使用apache poi 4.0.0:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
public class CreateWordStyledHyperlinkRunFromTemplate {
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(new FileInputStream("Template.docx"));
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");
XWPFStyles styles = document.getStyles();
if (styles.styleExist("Hyperlink")) {
System.out.println("Style Hyperlink exists."); //Template must contain named style "Hyperlink" already
hyperlinkrun.setStyle("Hyperlink");
} else {
hyperlinkrun.setColor("0000FF");
hyperlinkrun.setUnderline(UnderlinePatterns.SINGLE);
}
run = paragraph.createRun();
run.setText(" in it.");
FileOutputStream out = new FileOutputStream("CreateWordStyledHyperlinkRunFromTemplate.docx");
document.write(out);
out.close();
document.close();
}
}
请注意,除了使用低级类之外,不可能创建XWPFHyperlinkRunorg.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink。
它产生:
添加回答
举报