预报导出--添加超链接

This commit is contained in:
zhn
2022-09-27 19:49:14 +08:00
parent 93762a553b
commit 552c3f222f
@@ -21,20 +21,26 @@ import org.apache.poi.xwpf.usermodel.XWPFHeader;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFPicture;
import org.apache.poi.xwpf.usermodel.XWPFPictureData;
import org.apache.poi.xwpf.usermodel.XWPFRelation;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFStyle;
import org.apache.poi.xwpf.usermodel.XWPFStyles;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.xmlbeans.impl.xb.xmlschema.SpaceAttribute;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTColor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFldChar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTHyperlink;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTOnOff;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageSz;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTString;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTStyle;
@@ -935,7 +941,6 @@ public class WordUtil {
}
private static void setCell(XWPFTable table, int number, String fieldName,String technologyTerritory) {
table.getRow(number).setHeight(500);
CTTblWidth ctTblWidth0 = table.getRow(number).getCell(0).getCTTc().addNewTcPr().addNewTcW();
ctTblWidth0.setType(STTblWidth.DXA);
@@ -948,7 +953,14 @@ public class WordUtil {
ctTblWidth1.setW(BigInteger.valueOf(6015));
//设置单元格边距
XWPFTableCell cell1 = table.getRow(number).getCell(1);
cellPadding(cell1,technologyTerritory);
if("链接".equals(fieldName) || "Link".equals(fieldName)){
//设置超链接
if(StringUtils.isNotEmpty(technologyTerritory)){
cellLink(cell1,technologyTerritory);
}
}else{
cellPadding(cell1,technologyTerritory);
}
// XWPFParagraph para = table.getRow(number).getCell(1).getParagraphs().get(0);
// XWPFRun run = para.createRun();//对某个段落设置格式
@@ -1004,5 +1016,63 @@ public class WordUtil {
run.setFontFamily("Blue Sky Noto Regular");
}
/**
* 设置页边距,字体样式,超链接
* @param cell
* @param text
*/
public static void cellLink(XWPFTableCell cell,String text){
//1. 单元格页边距
CTTc ctTc = cell.getCTTc();
CTTcPr cttcpr =ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();
CTTcMar ctTcMar = cttcpr.isSetTcMar() ? cttcpr.getTcMar() : cttcpr.addNewTcMar();
(ctTcMar.isSetLeft() ? ctTcMar.getLeft() : ctTcMar.addNewLeft()).setW(BigInteger.valueOf(119));//左边距
(ctTcMar.isSetTop() ? ctTcMar.getTop() : ctTcMar.addNewTop()).setW(BigInteger.valueOf(63));//上边距
// (ctTcMar.isSetRight() ? ctTcMar.getRight() : ctTcMar.addNewRight()).setW(BigInteger.valueOf(100));
// (ctTcMar.isSetBottom() ? ctTcMar.getBottom() : ctTcMar.addNewBottom()).setW(BigInteger.valueOf(100));
//2. 设置文本及文本的字体
CTP ctP = (ctTc.sizeOfPArray() == 0) ?
ctTc.addNewP() : ctTc.getPArray(0);
XWPFParagraph paragraph = cell.getParagraph(ctP);
//3. 单元格内容超链接(只有带http的链接才能跳转,纯文本无法跳转)
String id = paragraph
.getDocument()
.getPackagePart()
.addExternalRelationship(text,
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);
// ctText.setStringValue(text);
CTR ctr = CTR.Factory.newInstance();
CTRPr rpr = ctr.addNewRPr();
//设置超链接样式
CTColor color = CTColor.Factory.newInstance();
color.setVal("0000FF");
rpr.setColor(color);
//下划线
// rpr.addNewU().setVal(STUnderline.SINGLE);
//设置字体
CTFonts fonts = rpr.isSetRFonts() ? rpr.getRFonts() : rpr.addNewRFonts();
fonts.setAscii("Blue Sky Noto Regular");
fonts.setEastAsia("Blue Sky Noto Regular");
fonts.setHAnsi("Blue Sky Noto Regular");
ctr.setTArray(new CTText[] { ctText });
// Insert the linked text into the link
cLink.setRArray(new CTR[] { ctr });
}
}