• itext添加标题(heading)


    标题即是在文档在大纲里的目录分级。

    itext 2.7之后才有了该功能。

    具体实现方式如下:

                FONT_PROJECT = RtfParagraphStyle.STYLE_HEADING_1;

    FONT_APPLICATION = RtfParagraphStyle.STYLE_HEADING_2;

    FONT_TYPE = RtfParagraphStyle.STYLE_HEADING_3;
    com.lowagie.text.rtf.style.RtfParagraphStyle类继承自RtfFont,RtfFont又继承自Font。
    它为Paragraph提供Style,使用方式和Font一致。
    RtfParagraphStyle.STYLE_HEADING_1

    该常量为RtfParagraphStyle的一个默认实现,表示第一级标题。

    我们来看看它的实现:

        /**
    * The style for level 1 headings.
    */
    public static final RtfParagraphStyle STYLE_HEADING_1 = new RtfParagraphStyle("heading 1", "Normal");
    /**
    * The style for level 2 headings.
    */
    public static final RtfParagraphStyle STYLE_HEADING_2 = new RtfParagraphStyle("heading 2", "Normal");
    /**
    * The style for level 3 headings.
    */
    public static final RtfParagraphStyle STYLE_HEADING_3 = new RtfParagraphStyle("heading 3", "Normal");

    注意第一个参数"heading 1",这是rtf的json属性值之一,它生产的json文件会包括如下部分:

    {
    {\style\s3 \ql\fi0\li0\ri0\f2\fs32\b\i\cf0 heading 3;}
    {\style\s2 \ql\fi0\li0\ri0\f2\fs32\b\cf0 heading 2;}
    {\style\s1 \ql\fi0\li0\ri0\f2\fs40\b\cf0 heading 1;}
    }

    这就是rtf本身的标题定义,了解了这些,我们就能用

    STYLE_HEADING_1
    STYLE_HEADING_2
    STYLE_HEADING_3 

    来定制三级菜单了。

    示例:

    public class HeadingTest {
    public static void main(String[] args) throws FileNotFoundException,
    DocumentException {
    String file = "C:\\Users\\my\\Desktop\\dome2.doc";
    Document document = new Document(PageSize.A4);
         RtfWriter2.getInstance(document,new FileOutputStream(file));
    document.open();

    document.add(new Paragraph("1", RtfParagraphStyle.STYLE_HEADING_1));
    document.add(new Paragraph("2", RtfParagraphStyle.STYLE_HEADING_2));
    document.add(new Paragraph("3", RtfParagraphStyle.STYLE_HEADING_3));
    document.close();
    System.out.println("DONE!");
    }
    }


    如果要生成多级标题呢?要稍微复杂点,假如我们参照 STYLE_HEADING_1 的写法来自定义一段:

    RtfParagraphStyle heading_4 = new RtfParagraphStyle("heading 4",
    "Normal");

    很快我们就会发现,会跑出一个NullPointException
    原因在于,所有的RtfParagraphStyle都是被RtfDocumentHeader的RtfStylesheetList里所维护的

    我们需要在RtfStylesheetList里注册我们自定义的这个heading_4。

    实现方式如下:

    RtfWriter2 writer = RtfWriter2.getInstance(document,
    new FileOutputStream(file));
    document.open();
    RtfDocumentSettings settings = writer.getDocumentSettings();
    RtfParagraphStyle heading_4 = new RtfParagraphStyle("heading 4",
    "Normal");
    settings.registerParagraphStyle(heading_4);

    完成注册后,该RtfParagraphStyle就可以正常使用了

    对之前的示例代码进行一点修改:

    public class HeadingTest {
    public static void main(String[] args) throws FileNotFoundException,
    DocumentException {
    String file = "C:\\Users\\gateway\\Desktop\\dome2.doc";
    Document document = new Document(PageSize.A4);
    RtfWriter2 writer = RtfWriter2.getInstance(document,
    new FileOutputStream(file));
    document.open();
    RtfDocumentSettings settings = writer.getDocumentSettings();
    RtfParagraphStyle heading_4 = new RtfParagraphStyle("heading 4",
    "Normal");
    RtfParagraphStyle heading_5 = new RtfParagraphStyle("heading 5",
    "Normal");
    settings.registerParagraphStyle(heading_4);
    settings.registerParagraphStyle(heading_5);

    document.add(new Paragraph("1", RtfParagraphStyle.STYLE_HEADING_1));
    document.add(new Paragraph("2", RtfParagraphStyle.STYLE_HEADING_2));
    document.add(new Paragraph("3", RtfParagraphStyle.STYLE_HEADING_3));
    document.add(new Paragraph("4", heading_4));
    document.add(new Paragraph("5", heading_5));
    document.close();
    System.out.println("DONE!");
    }
    }

    实现效果如图所示:




  • 相关阅读:
    springboot2 pagehelper 使用笔记
    springboot2 config_toolkit 并且设置全局获取数据GlobalUtil
    springboot2 redis
    Python问题汇总
    MAC安装Win10系统安装相关问题
    DEDE开发网站总部
    DEDE 调用文章中略缩图的原图
    塑形动作
    dede初学
    打印机维护经验
  • 原文地址:https://www.cnblogs.com/anrainie/p/2410013.html
Copyright © 2020-2023  润新知