gpt4 book ai didi

java - 如何在apache poi中将某种字体设置为fontFamily样式?

转载 作者:行者123 更新时间:2023-12-02 12:13:57 26 4
gpt4 key购买 nike

我想通过 Apache-poi 为我的 docx 文件创建一个新样式,并且我想将“IRnazanin”设置为该样式的 fontFamily(IRnazanin 是一种波斯字体)。我从这个 link 写了这段代码和 this one ,但是每次我运行它时,Arial都会设置为具有这种样式的段落(当我打开由apache-poi创建的docx文件时,具有这种样式的段落具有主题字体中的“Arial(Body CS)”字体而不是IRNazanin) 。我应该做什么来修复它?并且字体大小也未设置。

XWPFDocument docx = new XWPFDocument(OPCPackage.open("8.docx"));
XWPFStyles styles = docx.getStyles();
String heading1 = "My Heading 1";
String heading4 = "My Heading 4";
addCustomHeadingStyle(docx, styles, heading1, 1, 36, "4288BC");
addCustomHeadingStyle(docx, styles, heading4, 4, 20, "000000");
XWPFParagraph paragraph = docx.createParagraph();
paragraph.setStyle(heading4);
XWPFRun run = paragraph.createRun();
run.setText("سلااااام!");

List<XWPFParagraph> xwpfparagraphs = docx.getParagraphs();
System.out.println();
for (int i = 0; i < xwpfparagraphs.size(); i++) {
if (xwpfparagraphs.get(i).getText().equals("اول")) {
xwpfparagraphs.get(i).setStyle(heading1);
System.out.println("!@#$%^&*()(*&^%$#@!");
}
System.out.println("paragraph style id " + (i + 1) + ":" + xwpfparagraphs.get(i).getStyleID());
if (xwpfparagraphs.get(i).getStyleID() != null) {
String styleid = xwpfparagraphs.get(i).getStyleID();
XWPFStyle style = styles.getStyle(styleid);
if (style != null) {
System.out.println(xwpfparagraphs.get(i).getText());
System.out.println("Style name:" + style.getName());
if (style.getName().startsWith("heading")) {
//this is a heading
System.out.println("@@@@@@@@@@@@@@@");
}
}

}

}

docx.write(docxOut);

private static void addCustomHeadingStyle(XWPFDocument docxDocument, XWPFStyles styles, String strStyleId, int headingLevel, int pointSize, String hexColor) {

CTStyle ctStyle = CTStyle.Factory.newInstance();
ctStyle.setStyleId(strStyleId);

CTString styleName = CTString.Factory.newInstance();
styleName.setVal(strStyleId);
ctStyle.setName(styleName);

CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();
indentNumber.setVal(BigInteger.valueOf(headingLevel));

// lower number > style is more prominent in the formats bar
ctStyle.setUiPriority(indentNumber);

CTOnOff onoffnull = CTOnOff.Factory.newInstance();
ctStyle.setUnhideWhenUsed(onoffnull);

// style shows up in the formats bar
ctStyle.setQFormat(onoffnull);

// style defines a heading of the given level
CTPPr ppr = CTPPr.Factory.newInstance();
ppr.setOutlineLvl(indentNumber);
ctStyle.setPPr(ppr);

XWPFStyle style = new XWPFStyle(ctStyle);

CTHpsMeasure size = CTHpsMeasure.Factory.newInstance();
size.setVal(new BigInteger(String.valueOf(pointSize)));
CTHpsMeasure size2 = CTHpsMeasure.Factory.newInstance();
size2.setVal(new BigInteger("24"));


CTFonts fonts = CTFonts.Factory.newInstance();

fonts.setAscii("IRnazanin");
fonts.setHAnsi("IRnazanin");

CTRPr rpr = CTRPr.Factory.newInstance();
rpr.setRFonts(fonts);
rpr.setSz(size);
rpr.setSzCs(size2);

CTColor color = CTColor.Factory.newInstance();
color.setVal(hexToBytes(hexColor));
rpr.setColor(color);
style.getCTStyle().setRPr(rpr);
// is a null op if already defined

style.setType(STStyleType.PARAGRAPH);
styles.addStyle(style);

}

public static byte[] hexToBytes(String hexString) {
HexBinaryAdapter adapter = new HexBinaryAdapter();
byte[] bytes = adapter.unmarshal(hexString);
return bytes;
}

我从这个link得到这个代码和 this one.

最佳答案

我找到了答案:

我替换了这段代码并且它有效:

CTFonts fonts = CTFonts.Factory.newInstance();
fonts.setAscii("IRnazanin");
fonts.setHAnsi("IRnazanin");
fonts.setCs("IRnazanin");
rpr.setRFonts(fonts);

关于java - 如何在apache poi中将某种字体设置为fontFamily样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46328603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com