Openxml的使用配合mupdf的识别生成word(三)

Openxml的使用配合mupdf的识别生成word(三)

图文框

一种框架,可调整其大小并置于页面任意位置的容器,可以放置包含批注、脚注、尾注或特定域的文字或图形,一定要注意设定图文框的环绕形式。不然会因为插入图文框的问题,导致已经写入的图片信息位置发生变化。
废话少说,作为一个开发,最喜华的是看代码,那就直接上代码:

        /// <summary>
        /// 以图文框的形式加入文字信息
        /// </summary>
        /// <param name="text">写入的文字信息</param>
        /// <param name="textFonts">字体</param>
        /// <param name="textSize">字大小(磅)</param>
        /// <param name="textColor">字颜色</param>
        /// <param name="leftTopX">左上方的X坐标</param>
        /// <param name="Y">Y坐标</param>
        public int AddGraphicTextBox(string text, string textFonts, float textSize, string textColor, float leftTopX, float Y)
        {
            try
            {
                var paragraphText = new Paragraph();
                leftTopX *= 20; Y *= 20;
                LogInfo.WriteLogFile("写入文字信息:text = " + text + "X" + leftTopX.ToString() + "Y" + Y.ToString());
                ParagraphProperties ParaProperties = new ParagraphProperties();// { ParagraphStyleId = new ParagraphStyleId() { Val = "Normal" } };
                var framProper = new FrameProperties() { Width = "0", Wrap = TextWrappingValues.NotBeside, X = leftTopX.ToString(), Y = Y.ToString() };                                               //图文框宽度,及坐标
                var winContro = new WidowControl() { Val = OnOffValue.FromBoolean(false) };
                var autoSpaceEe = new AutoSpaceDE() { Val = OnOffValue.FromBoolean(false) };
                var autoSpaceDn = new AutoSpaceDN() { Val = OnOffValue.FromBoolean(false) };
                var spacingBetween = new SpacingBetweenLines() { Before = "0", After = "0", Line = "0", LineRule = LineSpacingRuleValues.Exact }; //段落的间距设置
                var indentation = new Indentation() { Left = "0", Right = "0", FirstLine = "0" };
                var justification = new Justification() { Val = JustificationValues.Left };
                textSize *= 2;                 // openxml写入的字体是实际字体大小的一半,故乘2
                RunFonts fonts = new RunFonts() { EastAsia = textFonts };//设置字体
                FontSize size = new FontSize() { Val = textSize.ToString() };//设置字体大小
                Color color = new Color() { Val = textColor };//
                LogInfo.WriteLogFile("textSize = " + textSize.ToString() + "TextFonts" + textFonts.ToString());
                runProperties.Append(color);
                runProperties.Append(size);
                runProperties.Append(fonts);
                ParaProperties.Append(framProper);
                ParaProperties.Append(winContro);
                ParaProperties.Append(autoSpaceEe);
                ParaProperties.Append(autoSpaceDn);
                ParaProperties.Append(spacingBetween);
                ParaProperties.Append(indentation);
                ParaProperties.Append(justification);
                paragraphText.Append(ParaProperties);
                var runend = new Run();

                BookmarkEnd bookend = new BookmarkEnd() { Id = "Hb1" };
                runend.Append(bookend);
                paragraphText.Append(runend);

                var run = new Run();
                run.Append(runProperties);                              //字体格式设置
                runProperties = new RunProperties();                    //重新创建新的实例
                run.Append(new Text(text));
                paragraphText.Append(run);
                objWordDocument.MainDocumentPart.Document.Body.Append(paragraphText);
                return 0;
            }
            catch (Exception ex)
            {
                LogInfo.WriteLogFile("函数AddGraphicTextBox出现异常:" + ex.Message);
                objWordDocument.Save();
                objWordDocument.Close();
                objWordDocument.Dispose();
                return -1;
            }
        }

为了方便我可以循环的调用此接口,我将此功能封装成一个单独的接口。
*=20;为磅值转为缇的转换。我所有接口传入的值单位皆为 (磅),在应用中,不是所有的单位都统一的,后续看代码一定要看好我其中的单位的换算和注释。。
写日志文件的实现没有说明,此处做一下说明。上代码:

namespace 命名空间
{
    class LogInfo
    {
        public static string LOG_PATH = Directory.GetCurrentDirectory();

        public static void WriteLogFile(string p_strLogMsg)
        {

            StackTrace stackTrace = new StackTrace();

            StackFrame stackFrame = stackTrace.GetFrame(1);

            MethodBase methodBase = stackFrame.GetMethod();
            if (Directory.Exists(LOG_PATH) == false)
                Directory.CreateDirectory(LOG_PATH);
            int iThreadHashCode = Thread.CurrentThread.GetHashCode();
            string strPoolThread = Thread.CurrentThread.IsThreadPoolThread ? "poolthread" : "";
            string strLogFilename = LOG_PATH + "\\LogFile-" + DateTime.Now.ToString("yyyy-MM-dd") + "-" + iThreadHashCode + strPoolThread + ".txt";
            string strMsg = "[" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:fff") + "][" + methodBase.Name + "] " + p_strLogMsg + Environment.NewLine;
            System.IO.File.AppendAllText(strLogFilename, strMsg);
        }
    }
}

会提示出功能的接口调用的时间和接口名称。
总结不易,点个赞啊

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值