word中项目符号的样式控制

本文章只做思路参考,请根据实际情况进行调试

情况:
java端传递解析的json数据到c#,c#处理解析的json数据(text和paragraph

由于存在特殊样式或者表格数据,有些解析成OOXML格式,但是OOXML数据量大于Text的纯文本。所以要求使用标签{{XXXX}}的格式在java端插入到Text纯文本本的最前面,存到json中,传递到c#客户端识别并设置样式

以下思路:
constant常量的class :NumberStyleBullet(项目符号的样式)、MarupIdentify(其它的也有这种样式)

1、传递paragraph和其段落文本(已经经java识别样式处理过的:插入{{XXXX}})
2、使用正则表达式判断是否存在特殊样式的markup
3、循环截取存在的特殊样式,判断存在几种特殊样式。(默认只存在一种,针对现有场景只处理了一个样式):方法名:ealWithParagraphMarkup(Paragraph paragraph,string pText)
4、判断这种样式所需要设置成什么样子的:方法名SetNumberStyleBullet(Paragraph paragraph, string pText)
5、进行设置:
SetNumberStyleBullet( Paragraph paragraph,string numberStyleBulletText,string fontTypeName)

其它:处理unicode样式字符 UnicodeToString(string unicode)

/// <summary>
        /// 标签的统一格式
        /// </summary>
        public class MarupIdentify {
            /// <summary>
            /// 用于匹配段落样式的
            /// </summary>
            public const string paragraphMarkup_All = @"[^\w+$//]*{{[a-zA-Z0-9_]*}}[^\w+$//]*";//^\w+$/

            public const string paragraphMarkup_Parantheses = @"{{[a-zA-Z0-9_]*}}";

            /// <summary>
            /// 用于匹配文本内容的
            /// </summary>
            public const string textMarkup_Sharp = @"[a-zA-Z0-9_]*#[a-zA-Z0-9_]*#[a-zA-Z0-9_]*";


        }

        /// <summary>
        /// 项目符号样式
        /// </summary>
        public class NumberStyleBullet {
            public const string styleBullet_FilledBlackCircle_uF06C = "{{(F|f)(I|i)(L|l)(L|l)(E|e)(D|d)(B|b)(L|l)(A|a)(C|c)(K|k)(C|c)(I|i)(R|r)(C|c)(L|l)(E|e)_(U|u)(F|f)06(C|c)}}";//"#FilledBlackCircle_uF06C#";//"";//代表:(大黑)
            public const string styleBullet_FilledBlackCircle_uF097 = "{{(F|f)(I|i)(L|l)(L|l)(E|e)(D|d)(B|b)(L|l)(A|a)(C|c)(K|k)(C|c)(I|i)(R|r)(C|c)(L|l)(E|e)_(U|u)(F|f)097}}";//"#FilledBlackCircle_uF0B7#";//"";代表:(小黑)
            public const string styleBullet_FilledBlackCircle_uF0B7 = "{{(F|f)(I|i)(L|l)(L|l)(E|e)(D|d)(B|b)(L|l)(A|a)(C|c)(K|k)(C|c)(I|i)(R|r)(C|c)(L|l)(E|e)_(U|u)(F|f)0(B|b)7}}";//"#FilledBlackCircle_uF0B7#";//"";代表:(小黑)
            public const string styleBullet_FilledBlackSquare = "{{(F|f)(I|i)(L|l)(L|l)(E|e)(D|d)(B|b)(L|l)(A|a)(C|c)(K|k)(S|s)(Q|q)(U|u)(A|a)(R|r)(E|e)}}";//#FilledBlackSquare#";//"";//代表:实心方形
            public const string styleBullet_FilledBlackDiamond = "{{(F|f)(I|i)(L|l)(L|l)(E|e)(D|d)(B|b)(L|l)(A|a)(C|c)(K|k)(D|d)(I|i)(A|a)(M|m)(O|o)(N|n)(D|d)}}";//#FilledBlackDiamond#";//"";//代表:菱形
            public const string styleBullet_FilledBlackTick = "{{(F|f)(I|i)(L|l)(L|l)(E|e)(D|d)(B|b)(L|l)(A|a)(C|c)(K|k)(T|t)(I|i)(C|c)(K|k)}}";// "#FilledBlackTick#";//"";//代表:勾号
            public const string styleBullet_HollowFourPointedStar = "{{(H|h)(O|o)(L|l)(L|l)(O|o)(W|w)(F|f)(O|o)(U|u)(R|r)(P|p)(O|o)(I|i)(N|n)(T|t)(E|e)(D|d)(S|s)(T|t)(A|a)(R|r)}}";// "#HollowFourPointedStar#";//"";//代表:四角星
            public const string styleBullet_BlackAndWhileArrow = "{{(B|b)(L|l)(A|a)(C|c)(K|k)(A|a)(N|n)(D|d)(W|w)(H|h)(I|i)(T|t)(E|e)(A|a)(R|r)(R|r)(O|o)(W|w)}}";//"#BlackAndWhiteArrow#";//"";//代表:黑白箭头
            public const string styleBullet_NotRecognized = "{{(N|n)(O|o)(T|t)(R|r)(E|e)(C|c)(O|o)(G|g)(N|n)(I|i)(Z|z)(E|e)(D|d)}}";// "#NotRecognized#";//"";//未进行处理的特殊符号


            public const string getStyleBullet_DefaultRecognizedPicBulletId = "{{(D|d)(E|e)(F|f)(A|a)(U|u)(L|l)(T|t)(R|r)(E|e)(C|c)(O|o)(G|g)(N|n)(I|i)(Z|z)(E|e)(D|d)(P|p)(I|i)(C|c)(B|b)(U|u)(L|l)(L|l)(E|e)(T|t)(I|i)(D|d)}}";// "#DefaultRecognizedPicBulletId#";//"";//
            public const string getStyleBullet_NotRecognizedPicBulletId = "{{(N|n)(O|o)(T|t)(R|r)(E|e)(C|c)(O|o)(G|g)(N|n)(I|i)(Z|z)(E|e)(D|d)(P|p)(I|i)(C|c)(B|b)(U|u)(L|l)(L|l)(E|e)(T|t)(I|i)(D|d)}}";// "#NotRecognizedPicBulletId#";//"";//

        }
/// <summary>
        /// 识别文本中的markup进行样式的处理
        /// </summary>
        /// <param name="paragraph"></param>
        /// <param name="pText"></param>
        /// <returns>识别样式并设置后再去掉样式markup的剩余文本</returns>
        public string  SetNumberStyleBullet(Paragraph paragraph, string pText) 
        {

            if (Regex.IsMatch(pText, NumberStyleBullet.styleBullet_FilledBlackCircle_uF06C))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_FilledBlackCircle_uF06C, "");
                SetNumberStyleBullet(paragraph, "uF06C", "Wingdings");
            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_FilledBlackCircle_uF097))
            {

                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_FilledBlackCircle_uF097, "");
                SetNumberStyleBullet(paragraph, "uF097", "Wingdings 2");
            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_FilledBlackCircle_uF0B7))
            {

                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_FilledBlackCircle_uF0B7, "");
                SetNumberStyleBullet(paragraph, "uF0B7", "Symbol");
            }
            else

            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_FilledBlackSquare))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_FilledBlackSquare, "");
                SetNumberStyleBullet(paragraph, "uF06E", "Wingdings");
            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_FilledBlackDiamond))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_FilledBlackDiamond, "");
                SetNumberStyleBullet(paragraph, "uF075", "Wingdings");
            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_FilledBlackTick))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_FilledBlackTick, "");
                SetNumberStyleBullet(paragraph, "uF0FC", "Wingdings");
            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_HollowFourPointedStar))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_HollowFourPointedStar, "");
                SetNumberStyleBullet(paragraph, "uF0B2", "Wingdings");
            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_BlackAndWhileArrow))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_BlackAndWhileArrow, "");
                SetNumberStyleBullet(paragraph, "uF0D8", "Wingdings");
            }
            else
            //属于不能支持识别的标题
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.styleBullet_NotRecognized))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.styleBullet_NotRecognized, "{{此项目符号暂未支持识别}}");

            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.getStyleBullet_DefaultRecognizedPicBulletId))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.getStyleBullet_DefaultRecognizedPicBulletId, "{{暂未支持默认图片符号}}");

            }
            else
            if (Regex.IsMatch(pText, Constant.NumberStyleBullet.getStyleBullet_NotRecognizedPicBulletId))
            {
                pText = Regex.Replace(pText, NumberStyleBullet.getStyleBullet_NotRecognizedPicBulletId, "{{暂未支持自定义图片符号}}");

            }
            return pText;
        }
/// <summary>
        /// 处理Paragraph样式中的
        /// </summary>
        /// <param name="paragraph"></param>
        public void SetNumberStyleBullet( Paragraph paragraph,string numberStyleBulletText,string fontTypeName) {

            object missing = System.Reflection.Missing.Value;
            var app = paragraph.Application;
            object n = 1;
            ListTemplate template = app.ListGalleries[WdListGalleryType.wdBulletGallery].ListTemplates.get_Item(ref n);
            //templates[1].Name = fontTypeName;
            
            ListLevel level = template.ListLevels[1];
            level.NumberFormat = UnicodeToString(numberStyleBulletText);
            level.TrailingCharacter = WdTrailingCharacter.wdTrailingTab;
            level.NumberStyle = WdListNumberStyle.wdListNumberStyleBullet;
            level.Alignment = WdListLevelAlignment.wdListLevelAlignLeft;
            level.TextPosition = app.InchesToPoints(0.5f);
            level.TabPosition = app.InchesToPoints(0.5f);
            // (float)WdConstants.wdUndefined;
            level.ResetOnHigher = 0;
            level.StartAt = 1;

            //level.Font.Bold = (int)WdConstants.wdUndefined;
            //level.Font.Italic = (int)WdConstants.wdUndefined;
            //level.Font.StrikeThrough = (int)WdConstants.wdUndefined;
            //level.Font.Subscript = (int)WdConstants.wdUndefined;
            //level.Font.Superscript = (int)WdConstants.wdUndefined;
            //level.Font.Shadow = (int)WdConstants.wdUndefined;
            //level.Font.Outline = (int)WdConstants.wdUndefined;
            //level.Font.Emboss = (int)WdConstants.wdUndefined;
            //level.Font.Engrave = (int)WdConstants.wdUndefined;
            //level.Font.AllCaps = (int)WdConstants.wdUndefined;
            //level.Font.Hidden = (int)WdConstants.wdUndefined;
            //level.Font.Underline = WdUnderline.wdUnderlineNone;
            //level.Font.Color = WdColor.wdColorAutomatic;
            //level.Font.Size = (int)WdConstants.wdUndefined;
            //level.Font.Animation = WdAnimation.wdAnimationNone;
            //level.Font.DoubleStrikeThrough = (int)WdConstants.wdUndefined;
            //level.LinkedStyle = "";
            level.Font.Name = fontTypeName;
            //template.Name = fontTypeName;
            object bContinuePrevList = false;
            object applyTo = WdListApplyTo.wdListApplyToWholeList;
            object defBehavior = WdDefaultListBehavior.wdWord10ListBehavior;
            //app.Selection.Range.ListFormat.ApplyListTemplateWithLevel
            //(
            //template, ref bContinuePrevList, ref applyTo, ref defBehavior, ref missing);



            paragraph.Range.ListFormat.ApplyListTemplateWithLevel(template, ref bContinuePrevList, ref applyTo, ref defBehavior, ref missing);
            
        }
        /// <summary>
        /// Unicode转字符串
        /// </summary>
        /// <returns>The to string.</returns>
        /// <param name="unicode">Unicode.</param>
        public string UnicodeToString(string unicode)
        {
            string resultStr = "";
            string[] strList = unicode.Split('u');
            for (int i = 1; i < strList.Length; i++)
            {
                resultStr += (char)int.Parse(strList[i], System.Globalization.NumberStyles.HexNumber);
            }
            return resultStr;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值