qq_43683942 2023-10-28 11:20 采纳率: 50%
浏览 35
已结题

poi ctSimpleField.setInstr("TOC \\o \"1-4\" \\h \\z \\u");设置目录字体字号



```java
    @Test
    public void main2() throws Exception {

        XWPFDocument document = new XWPFDocument();
//        11100000055666926W
//        11210200001653732T
        // 创建段落
        XWPFParagraph firstParagraph = document.createParagraph();
        XWPFStyles newStyles = document.createStyles();
        String heading1 = "Heading1";
        createHeadingStyle(document, newStyles, heading1, 1, 45, "000000", "宋体");

        heading1 = "Heading2";
        createHeadingStyle(document, newStyles, heading1, 2, 30, "000000", "宋体");

        XWPFParagraph mulu = document.createParagraph();
        mulu.setStyle("Heading3");

        XWPFRun run0 = mulu.createRun();
        run0.setText("目   录");
        //run0.setColor("000000");
        run0.setFontSize(22);
        //run0.setBold(true);
        run0.setFontFamily("黑体");
        mulu.setAlignment(ParagraphAlignment.CENTER);
        mulu.setSpacingAfter(600);
        firstParagraph = document.createParagraph();
        firstParagraph.setStyle("Heading1");
        CTSimpleField ctSimpleField = firstParagraph.getCTP().addNewFldSimple();
        ctSimpleField.setInstr("TOC \\o \"1-4\" \\h \\z \\u");

        firstParagraph = document.createParagraph();
        firstParagraph.setStyle("Heading2");
        XWPFRun run1 = firstParagraph.createRun();
      /*  CTBookmark ctBookmarks = firstParagraph.getCTP().addNewBookmarkStart();
        ctBookmarks.setName("biaoti");// 设置书签名称
        ctBookmarks.setId(BigInteger.valueOf(0));
        firstParagraph.getCTP().addNewBookmarkEnd().setId(BigInteger.valueOf(0));
        itemMap.put("biaoti","biaoti");*/
        run1.setText("标题1");
        //run1.setColor("000000");
        run1.setFontSize(21);
        run1.setFontFamily("微软雅黑");
        //run1.setBold(true);
        firstParagraph.setAlignment(ParagraphAlignment.CENTER);

        firstParagraph = document.createParagraph();
        firstParagraph.setStyle("Heading2");
        run1 = firstParagraph.createRun();
      /*  CTBookmark ctBookmarks = firstParagraph.getCTP().addNewBookmarkStart();
        ctBookmarks.setName("biaoti");// 设置书签名称
        ctBookmarks.setId(BigInteger.valueOf(0));
        firstParagraph.getCTP().addNewBookmarkEnd().setId(BigInteger.valueOf(0));
        itemMap.put("biaoti","biaoti");*/
        run1.setText("标题2");
        //run1.setColor("000000");
        run1.setFontSize(21);
        run1.setFontFamily("微软雅黑");
        //run1.setBold(true);
        firstParagraph.setAlignment(ParagraphAlignment.CENTER);
        document.enforceUpdateFields();
        try {
            // 将文档保存到文件
            FileOutputStream out = new FileOutputStream("D:\\examplea.docx");
            document.write(out);
            out.close();
            System.out.println("文档创建成功!");
        } catch (IOException e) {
            System.out.println("创建文档时出现错误:" + e.getMessage());
        }

    }

    public void createHeadingStyle(XWPFDocument doc, XWPFStyles styles, String strStyleId, int headingLevel, int pointSize, String hexColor, String typefaceName) {
        //创建样式
        CTStyle ctStyle = CTStyle.Factory.newInstance();
        //设置id
        ctStyle.setStyleId(strStyleId);

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

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

        // 数字越低在格式栏中越突出
        ctStyle.setUiPriority(indentNumber);

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

        // 样式将显示在“格式”栏中
        ctStyle.setQFormat(onoffnull);

        // 样式定义给定级别的标题
        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(String.valueOf(pointSize)));

        CTFonts fonts = CTFonts.Factory.newInstance();
        if (typefaceName == null || typefaceName.equals("")) {
            typefaceName = "宋体";
        }
        fonts.setAscii(typefaceName);    //字体

        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;
    }


设置目录字体 和字号

img


  • 写回答

11条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-28 15:50
    关注

    【以下回答由 GPT 生成】

    问题所在: 目录的字体和字号没有正确设置。

    解决方案: 要设置目录的字体和字号,你需要创建一个新的样式,并在样式中设置字体和字号,然后将该样式应用到段落上。

    以下是修改后的代码示例:

    @Test
    public void main2() throws Exception {
        XWPFDocument document = new XWPFDocument();
    
        // 创建段落
        XWPFStyles newStyles = document.createStyles();
        String heading1 = "Heading1";
        createHeadingStyle(document, newStyles, heading1, 1, 45, "000000", "宋体");
    
        heading1 = "Heading2";
        createHeadingStyle(document, newStyles, heading1, 2, 30, "000000", "宋体");
    
        // 创建目录段落
        XWPFParagraph mulu = document.createParagraph();
        mulu.setStyle("Heading3");
    
        // 设置目录字体和字号
        XWPFRun run0 = mulu.createRun();
        run0.setText("目   录");
        run0.setFontSize(22);
        run0.setFontFamily("黑体");
        mulu.setAlignment(ParagraphAlignment.CENTER);
        mulu.setSpacingAfter(600);
    
        // 创建正文段落
        XWPFParagraph firstParagraph = document.createParagraph();
        firstParagraph.setStyle("Heading1");
        CTSimpleField ctSimpleField = firstParagraph.getCTP().addNewFldSimple();
        ctSimpleField.setInstr("TOC \\o \"1-4\" \\h \\z \\u");
    
        firstParagraph = document.createParagraph();
        firstParagraph.setStyle("Heading2");
        XWPFRun run1 = firstParagraph.createRun();
        run1.setText("标题1");
        run1.setFontSize(21);
    }
    
    private static void createHeadingStyle(XWPFDocument document, XWPFStyles styles, String headingStyleId, int headingLevel, int headingSize, String headingColor, String headingFontFamily) {
        CTStyle ctStyle = CTStyle.Factory.newInstance();
        ctStyle.setStyleId(headingStyleId);
        CTString styleName = CTString.Factory.newInstance();
        styleName.setVal(headingStyleId);
        ctStyle.setName(styleName);
        CTDecimalNumber indentNumber = CTDecimalNumber.Factory.newInstance();
        indentNumber.setVal(BigInteger.valueOf(headingLevel));
    
        // 设置字体和字号
        CTRPr ctRPr = CTRPr.Factory.newInstance();
        CTFonts ctFonts = ctRPr.isSetRFonts() ? ctRPr.getRFonts() : ctRPr.addNewRFonts();
        ctFonts.setAscii(headingFontFamily);
        ctFonts.setEastAsia(headingFontFamily);
        ctFonts.setHAnsi(headingFontFamily);
        ctRPr.setSz(BigInteger.valueOf(headingSize * 2));
        ctRPr.setSzCs(BigInteger.valueOf(headingSize * 2));
    
        // 设置字体颜色
        CTColor ctColor = CTColor.Factory.newInstance();
        ctColor.setVal(headingColor);
        ctRPr.setColor(ctColor);
    
        // 设置段落缩进
        CTPPr ctPPr = CTPPr.Factory.newInstance();
        CTInd ctInd = ctPPr.isSetInd() ? ctPPr.getInd() : ctPPr.addNewInd();
        ctInd.setLeft(BigInteger.valueOf(headingLevel * 720));
        ctStyle.setPPr(ctPPr);
    
        ctStyle.setRPr(ctRPr);
        ctStyle.setBasedOn(XWPFStyles.DEFAULT_HEADING_STYLE);
    
        // 将样式添加到文档
        XWPFStyle style = new XWPFStyle(ctStyle);
        styles.addStyle(style);
    }
    

    注意: - 通过CTRPr设置字体和字号时,要注意使用的单位是半个点,所以需要使用字号乘以2。 - 通过CTInd设置段落缩进时,单位是20分之1点,所以段落缩进的值为headingLevel * 720时,表示缩进headingLevel个字符的宽度。

    希望这可以帮助到你!如果你还有其他问题,请随时问我。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月31日
  • 赞助了问题酬金15元 10月30日
  • 修改了问题 10月28日
  • 修改了问题 10月28日
  • 展开全部

悬赏问题

  • ¥50 请教 麒麟系统挂载怎么安装
  • ¥15 如何在ns3中实现路径的自由切换
  • ¥20 SpringBoot+Vue3
  • ¥15 IT从业者的调查问卷
  • ¥65 LineageOs-21.0系统编译问题
  • ¥30 关于#c++#的问题,请各位专家解答!
  • ¥15 App的会员连续扣费
  • ¥15 不同数据类型的特征融合应该怎么做
  • ¥15 用proteus软件设计一个基于8086微处理器的简易温度计
  • ¥15 用联想小新14Pro