为有中文需求的客户提供多渠道中文技术支持.

Wed Nov 30, 2022 8:10 am

如何创建 多级列表 每一个章节都是一个 Section sec
样式 例如
1
1.1
1.1.1
2
2.1
2.1.1

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Wed Nov 30, 2022 8:53 am

按照之前的写法
Code: Select all
for(int i = 0;i<10;i++){
            Section sec = doc.addSection();
            addHeadingTitle("第"+i+""+"章",4,doc,sec);
        }

public static ListStyle numberStyle(Document doc) {
        //创建编号列表样式
        ListStyle numberList = new ListStyle(doc, ListType.Numbered);//编号列表
        numberList.setName("numberList");
        numberList.getLevels().get(1).setNumberPrefix("\u0000.");
        numberList.getLevels().get(1).setPatternType(ListPatternType.Arabic);
        numberList.getLevels().get(2).setNumberPrefix("\u0000.\u0001.");
        numberList.getLevels().get(2).setPatternType(ListPatternType.Arabic);
        doc.getListStyles().add(numberList);
        return numberList;
    }

case 4://四级标题
                Paragraph para4 = sec.addParagraph();
                ListFormat listFormat = para4.getListFormat();

                //应用编号列表样式
                listFormat.applyNumberedStyle();
                TextRange tr4 = para4.appendText(title1);
                tr4.getCharacterFormat().setFontSize(16);
                tr4.getCharacterFormat().setBold(true);
                tr4.getCharacterFormat().setItalic(false);
                tr4.getCharacterFormat().setFontName("黑体");
                para4.applyStyle(BuiltinStyle.Heading_4);
                para4.getListFormat().applyStyle(numberList.getName());
                para4.getListFormat().setListLevelNumber(1);
                //悬挂缩进 1.25cm
                PdfUnitConvertor convertor4 = new PdfUnitConvertor();
                float distance4 = convertor4.convertUnits(1.25f, PdfGraphicsUnit.Centimeter, PdfGraphicsUnit.Centimeter);
                para4.getFormat().setFirstLineIndent(-distance4);
                para4.getFormat().setLeftIndent(distance4);
                //间距 段前 段后
                para4.getFormat().setBeforeAutoSpacing(false);
                para4.getFormat().setBeforeSpacing(10);
                para4.getFormat().setAfterAutoSpacing(false);
                para4.getFormat().setAfterSpacing(8);
                //行距 单倍行距 1倍
                para4.getFormat().setLineSpacing(12f);
                //对齐方式 两端对齐
                para4.getFormat().setHorizontalAlignment(HorizontalAlignment.Justify);
                break;


这种 导出的结果 就都是 :
1.1第0章
1.1第1章
1.1第2章
1.1第3章
我想要的结果是:
1.1第0章
1.2第1章
1.3第2章
1.4第3章

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Wed Nov 30, 2022 9:42 am

您好,

感谢您的留言。
对于的您的需求,请直接参考附件中的demo。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Wed Nov 30, 2022 9:48 am

好的 谢谢

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Wed Nov 30, 2022 9:51 am

不客气
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Wed Nov 30, 2022 10:05 am

多级列表 这个编号的样式想要改成
第一部分 xxx
第一章 xxx
一级标题 :第x部分
二级标题:第x章
三级之后的标题是:
1;
1.1 ;
1.1.1 ;
1.1.1.1;
1.1.1.1.1
一共7级 标题
请问应该怎么修改 编号样式?
Code: Select all
ListStyle numberList = new ListStyle(doc, ListType.Numbered);//编号列表
        numberList.setName("numberList");
        numberList.getLevels().get(1).setNumberPrefix("\u0000.");
        numberList.getLevels().get(1).setPatternType(ListPatternType.Arabic);
        numberList.getLevels().get(2).setNumberPrefix("\u0000.\u0001.");
        numberList.getLevels().get(2).setPatternType(ListPatternType.Arabic);
        doc.getListStyles().add(numberList);

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Thu Dec 01, 2022 9:55 am

您好,

感谢您的留言。
对于您的需求,请直接参考附件中的demo和其结果文档。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Wed Dec 14, 2022 9:33 am

您好,

请问我提供的代码解决了您的需求吗?期待在您有空的时候能给出反馈。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Wed Dec 28, 2022 2:40 am

您好,请问一下如何设置,编号的字体样式跟章节名的字体样式一致?
Code: Select all
Paragraph para4 = sec.addParagraph();
//编号
                para4.getListFormat().applyStyle(numberList.getName());
                para4.getListFormat().setListLevelNumber(1);
                para4.applyStyle(BuiltinStyle.Heading_4);
//设置标题的字体样式
                TextRange tr4 = para4.appendText(title1);
                tr4.getCharacterFormat().setFontSize(16);
                tr4.getCharacterFormat().setBold(true);
                tr4.getCharacterFormat().setItalic(false);
                tr4.getCharacterFormat().setFontName("黑体");

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Wed Dec 28, 2022 3:22 am

您好,

感谢您的留言。
对于多级列表编号的字体样式的设置,可以在创建多级列表时实现。我将满足您需求的代码放在下面:
Code: Select all
Document doc = new Document();

//create list style
ListStyle numberList = new ListStyle(doc, ListType.Numbered);
numberList.setName("numberList");

numberList.getLevels().get(1).setNumberPrefix("\u0000.");
numberList.getLevels().get(1).setPatternType(ListPatternType.Arabic);
//设置1级标题的字体为黑体
numberList.getLevels().get(1).getCharacterFormat().setFontName("黑体");
  //add the list style into document
        doc.getListStyles().add(numberList);

        Section sec = doc.addSection();
        Paragraph para4 = sec.addParagraph();
//编号
        para4.getListFormat().applyStyle(numberList.getName());
        para4.getListFormat().setListLevelNumber(1);

        para4.applyStyle(BuiltinStyle.Heading_4);
//设置标题的字体样式
        TextRange tr4 = para4.appendText("title1");
        tr4.getCharacterFormat().setFontSize(16);
        tr4.getCharacterFormat().setBold(true);
        tr4.getCharacterFormat().setItalic(false);
        tr4.getCharacterFormat().setFontName("黑体");

如果您还有其他任何问题,欢迎随时留言。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Wed Dec 28, 2022 9:31 am

您好 有getleve()的是可以设置字体了,请问一下 最上级没有level的 这一级应该如何设置?
Code: Select all
Paragraph para3 = sec.addParagraph();
               
                para3.getListFormat().applyStyle(numberList.getName());
                para3.applyStyle(BuiltinStyle.Heading_3);
               
                TextRange tr3 = para3.appendText(title1);
                tr3.getCharacterFormat().setFontSize(18);
                tr3.getCharacterFormat().setBold(true);
                tr3.getCharacterFormat().setItalic(false);
                tr3.getCharacterFormat().setFontName("黑体");

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Thu Dec 29, 2022 1:46 am

您好,

请问您想要设置“第x部分”的字体样式吗(如下截图)?如果是的话,请参考下面的代码。
Code: Select all
Document doc = new Document();
Section sec = doc.addSection();

Paragraph para = sec.addParagraph();

para.applyStyle(BuiltinStyle.Heading_1);
//设置标题的字体样式
TextRange textRange = para.appendText("第X部分");
textRange.getCharacterFormat().setFontSize(16);
textRange.getCharacterFormat().setBold(true);
textRange.getCharacterFormat().setItalic(false);
textRange.getCharacterFormat().setFontName("黑体");


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Thu Dec 29, 2022 6:36 am

不是
1.1 这个级别的设置方法是
Code: Select all
numberList.getLevels().get(1).setNumberPrefix("\u0000.");
        numberList.getLevels().get(1).setPatternType(ListPatternType.Arabic);
        numberList.getLevels().get(1).getCharacterFormat().setFontName("黑体");
        numberList.getLevels().get(1).getCharacterFormat().setBold(true);
        numberList.getLevels().get(1).getCharacterFormat().setItalic(false);
        numberList.getLevels().get(1).getCharacterFormat().setFontSize(16);

       para4.getListFormat().applyStyle(numberList.getName());
                para4.getListFormat().setListLevelNumber(1);
                para4.applyStyle(BuiltinStyle.Heading_4);

但是 1. 这个级别的序号样式
Code: Select all
para3.getListFormat().applyStyle(numberList.getName());
                para3.applyStyle(BuiltinStyle.Heading_3);

应该如何设置

hannibal22
 
Posts: 52
Joined: Wed Aug 17, 2022 7:01 am

Thu Dec 29, 2022 7:19 am

您好,

感谢您的反馈。
对于1.的字体样式设置,请参考下面代码:

Code: Select all
//设置多级列表最上级编号(1.)的字体为宋体
 numberList.getLevels().get(0).getCharacterFormat().setFontName("宋体");


我把完整的代码放在下面供您参考:
Code: Select all
 Document doc = new Document();
        Section sec = doc.addSection();


        //create list style
        ListStyle numberList = new ListStyle(doc, ListType.Numbered);
        numberList.setName("numberList");

        //设置多级列表最上级编号(1.)的字体为宋体
        numberList.getLevels().get(0).getCharacterFormat().setFontName("宋体");
       
        numberList.getLevels().get(1).setNumberPrefix("\u0000.");
        numberList.getLevels().get(1).setPatternType(ListPatternType.Arabic);
        //设置多级列表编号(1.1)的字体为宋体
        numberList.getLevels().get(1).getCharacterFormat().setFontName("宋体");



        //add the list style into document
        doc.getListStyles().add(numberList);

        Paragraph paragraph = sec.addParagraph();
        paragraph.appendText("List Item 1");
        paragraph.getListFormat().applyStyle(numberList.getName());
        paragraph.applyStyle(BuiltinStyle.Heading_3);

        paragraph = sec.addParagraph();
        paragraph.appendText("List Item 1.1");
        paragraph.getListFormat().applyStyle(numberList.getName());
        paragraph.getListFormat().setListLevelNumber(1);
        paragraph.applyStyle(BuiltinStyle.Heading_4);

        doc.saveToFile("output/result_test.docx", FileFormat.Docx);


Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Thu Jan 12, 2023 9:52 am

您好,

请问我提供的代码解决您的问题了吗?期待在您有时间的时候能给出反馈。提前感谢。

Sincerely
Abel
E-iceblue support team
User avatar

Abel.He
 
Posts: 948
Joined: Tue Mar 08, 2022 2:02 am

Return to 中文技术支持