NPOI创建docx脚注

来源:互联网 发布:js前端面试题单选题 编辑:程序博客网 时间:2024/04/27 20:02

       利用NPOI创建docx脚注或尾注分四个步骤。一是设置格式,即在styles.xml添加脚注和尾注所需的格式;二是创建脚注或尾注内容,即在footnotes.xml中添加脚注内容,在endnotes.xml中添加尾注内容;三是建立脚注或尾注关系,即在document.xml.rels中添加与脚注或尾注的关联;四是在正文中标注脚注或尾注。对于创建docx脚注,NPOI提供了较为完善的方法,在创建脚注内容时也创建了相应的关联,即对于创建docx脚注第三步不须专门操作。而对于创建docx尾注,NPOI在OpenXmlFormats提供了较为完善的有关尾注所有功能,但在XWPF中没有提供创建尾注的有关方法。下面只介绍创建docx脚注步骤。

一、设置格式

        在正文中标注脚注采用阿拉伯数字且为上标,在word中可以事先用格式存储在格式xml中,以后可以在正文引用其格式即可。

        创建格式文件(styles.xml):XWPFStyles m_styles = m_Docx.CreateStyles();

        创建格式xml:CT_Styles m_ctstyles =new CT_Styles();可以根据需要创建相应的格式。在此只列举与脚注有关的格式a6和a7。

        格式a6设置如下,其中需要格式a和Char2。

            //footnotetext

            m_ctstyle = new CT_Style();

            m_ctstyle.type = ST_StyleType.paragraph;

            m_ctstyle.customStyle = ST_OnOff.True;

            m_ctstyle.styleId = "a6";

            m_ctstyle.name = new CT_String();

            m_ctstyle.name.val = "footnote text";

            m_ctstyle.basedOn = newCT_String();

            m_ctstyle.basedOn.val = "a";

            m_ctstyle.link = new CT_String();

            m_ctstyle.link.val = "Char2";

            m_ctstyle.uiPriority = newCT_DecimalNumber();

            m_ctstyle.uiPriority.val = "99";

            m_ctstyle.semiHidden = newCT_OnOff();

            m_ctstyle.semiHidden.val = true;

            m_ctstyle.unhideWhenUsed = newCT_OnOff();

            m_ctstyle.unhideWhenUsed.val = true;

            m_ctstyle.rsid = new CT_LongHexNumber();

            byte[]m_bytefootnoteText = { 0x00, 0xF0, 0x43, 0x96 };

            m_ctstyle.rsid.val =m_bytefootnoteText;

            m_ctstyle.pPr = new CT_PPr();

            m_ctstyle.pPr.snapToGrid = newCT_OnOff();

            m_ctstyle.pPr.snapToGrid.val = false;

            m_ctstyle.pPr.jc = newCT_Jc();

            m_ctstyle.pPr.jc.val = ST_Jc.left;

            m_ctstyle.rPr = new CT_RPr();

            m_ctstyle.rPr.sz = newCT_HpsMeasure();

            m_ctstyle.rPr.sz.val = 18;

            m_ctstyle.rPr.szCs = newCT_HpsMeasure();

            m_ctstyle.rPr.szCs.val = 18;

            m_ctstyles.style.Add(m_ctstyle);

 

       格式a7设置如下,其中需要格式a0。

            //footnotereference

            m_ctstyle = new CT_Style();

            m_ctstyle.type = ST_StyleType.character;

            m_ctstyle.styleId = "a7";

            m_ctstyle.name = new CT_String();

            m_ctstyle.name.val = "footnote reference";

            m_ctstyle.basedOn = newCT_String();

            m_ctstyle.basedOn.val = "a0";

            m_ctstyle.uiPriority = newCT_DecimalNumber();

            m_ctstyle.uiPriority.val = "99";

            m_ctstyle.semiHidden = newCT_OnOff();

            m_ctstyle.semiHidden.val = true;

            m_ctstyle.unhideWhenUsed = newCT_OnOff();

            m_ctstyle.unhideWhenUsed.val = true;

            m_ctstyle.rsid = new CT_LongHexNumber();

            m_ctstyle.rsid.val =m_bytefootnoteText;

            m_ctstyle.rPr = new CT_RPr();

            m_ctstyle.rPr.vertAlign = newCT_VerticalAlignRun();

            m_ctstyle.rPr.vertAlign.val = ST_VerticalAlignRun.superscript;

            m_ctstyles.style.Add(m_ctstyle);

   

        把格式添加到格式文件中:m_styles.SetStyles(m_ctstyles);

 二、创建脚注内容

        所有的脚注内容都存储在footnotes.xml中,实际上脚注内容的格式就是引用前面所述的格式文件styles.xml中的定义,即格式a6和a7。

创建脚注内容文件:XWPFFootnotesm_ftns = m_Docx.CreateFootnotes()。

           

                //创建脚注内容

                int Id = m_ftns.GetFootnotesList().Count;

                CT_FtnEdnm_ftnedn =new CT_FtnEdn();

                m_ftnedn.id = Id.ToString();

                CT_Pm_FtnEdnxmlP = m_ftnedn.AddNewP();

                CT_PPrm_FtnEdnxmlPPr = m_FtnEdnxmlP.AddNewPPr();

               m_FtnEdnxmlPPr.AddNewPStyle().val = "a6";

               m_FtnEdnxmlPPr.AddNewRPr().rFonts = new CT_Fonts();

               m_FtnEdnxmlPPr.AddNewRPr().rFonts.hint = ST_Hint.eastAsia;

                CT_Rm_FtnEdnxmlR = m_FtnEdnxmlP.AddNewR();

                m_FtnEdnxmlR.AddNewRPr().rStyle= new CT_String();

               m_FtnEdnxmlR.AddNewRPr().rStyle.val = "a7";

                m_FtnEdnxmlR.Items = new System.Collections.ArrayList();

                m_FtnEdnxmlR.Items.Add(newCT_Empty());

                m_FtnEdnxmlR.ItemsElementName =newList<RunItemsChoiceType>();

               m_FtnEdnxmlR.ItemsElementName.Add(RunItemsChoiceType.footnoteRef);

                m_FtnEdnxmlR =m_FtnEdnxmlP.AddNewR();

                m_FtnEdnxmlR.AddNewT().Value = " ";

                m_FtnEdnxmlR =m_FtnEdnxmlP.AddNewR();

                m_FtnEdnxmlR.AddNewT().Value =strFtnEdn; //"脚注test内容

                XWPFFootnotem_fn = m_ftns.AddFootnote(m_ftnedn);

 

四、在正文中标注脚注

        最好用CT_P m_p =m_Docx.Document.body.AddNewP();方式创建段,在m_p中可以不断创建CT_R。

         CT_R m_r = m_p.AddNewR(); 

         m_r.AddNewT().Value = "NPOI";

          //标注脚注

         CT_Rm_FtnEdnR = m_p.AddNewR();

         m_FtnEdnR.AddNewRPr().rStyle = new CT_String();

         m_FtnEdnR.AddNewRPr().rStyle.val = "a7";

         m_FtnEdnR.Items = new System.Collections.ArrayList();

         CT_FtnEdnRefm_ftnref =new CT_FtnEdnRef();

         m_ftnref.id = m_FtnId;//创建脚注内容得到的Id

         m_FtnEdnR.Items.Add(m_ftnref);

         m_FtnEdnR.ItemsElementName = newList<RunItemsChoiceType>();

         m_FtnEdnR.ItemsElementName.Add(RunItemsChoiceType.footnoteReference);

 

        m_r = m_p.AddNewR();

        m_r.AddNewT().Value = "……";


       经过调试的例子下载:http://download.csdn.net/detail/gltide/7993809。NPOI是tonyqus提供的2.1.1.0源码经过修改编译,创建的docx在word2007可以打开,例子创建效果图如下。


0 0
原创粉丝点击