Пример #1
0
        public static bool SplitElements(DomElementList SourceList, bool deeply)
        {
            bool           result   = false;
            DomElementList tempList = new DomElementList();

            tempList.AddRange(SourceList);
            foreach (DomElement element in tempList)
            {
                if (element is DomStringElement)
                {
                    // 将文本元素拆分成多个字符元素
                    int            index = SourceList.IndexOf(element);
                    DomElementList cs    = ((DomStringElement)element).SplitChars();
                    SourceList.RemoveAt(index);
                    for (int iCount = 0; iCount < cs.Count; iCount++)
                    {
                        SourceList.Insert(index + iCount, cs[iCount]);
                    }
                    result = true;
                }
                else if (element is DomContainerElement)
                {
                    SplitElements(((DomContainerElement)element).Elements, deeply);
                    //SourceList.Add(element);
                }
            }
            return(result);
        }
Пример #2
0
 protected void WordCount(object sender, WriterCommandEventArgs args)
 {
     if (args.Mode == WriterCommandEventMode.QueryState)
     {
         args.Enabled = args.Document != null;
     }
     else if (args.Mode == WriterCommandEventMode.Invoke)
     {
         if (args.Document != null)
         {
             DomElementList list = new DomElementList();
             if (args.Document.Selection.Length != 0)
             {
                 // 计算被选择区域
                 list = args.Document.Selection.ContentElements.Clone();
             }
             else
             {
                 // 计算整个文档
                 foreach (DomDocumentContentElement ce in args.Document.Elements)
                 {
                     if (ce.IsEmpty == false)
                     {
                         list.AddRange(ce.Content);
                     }
                 }
             }
             WordCountResult result = new WordCountResult(args.Document, list);
             args.Result = result;
             if (args.ShowUI)
             {
                 using (dlgWordCount dlg = new dlgWordCount())
                 {
                     dlg.CountResult = result;
                     dlg.ShowDialog(args.EditorControl);
                 }
             }
             args.RefreshLevel = UIStateRefreshLevel.None;
         }
     }
 }
Пример #3
0
        private void ReadContent(
            RTFDomElement parentNode,
            DomDocument doc,
            DomElementList result,
            DocumentFormatInfo format)
        {
            if (format == null)
            {
                format = new DocumentFormatInfo();
            }
            //if ( parentNode == null || parentNode.Elements == null)
            //{
            //    System.Console.WriteLine("");
            //    return;
            //}
            foreach (RTFDomElement element in parentNode.Elements)
            {
                if (element is RTFDomHeader)
                {
                    if (((RTFDomHeader)element).HasContentElement)
                    {
                        XTextDocumentHeaderElement header = new XTextDocumentHeaderElement();
                        doc.PageSettings.HeaderDistance = (int)(GraphicsUnitConvert.FromTwips(
                                                                    (double)this._RTFDocument.HeaderDistance,
                                                                    GraphicsUnit.Inch) * 100.0);
                        result.Add(header);
                        ReadContent(element, doc, header.Elements, format);
                    }
                }
                else if (element is RTFDomFooter)
                {
                    if (((RTFDomFooter)element).HasContentElement)
                    {
                        XTextDocumentFooterElement footer = new XTextDocumentFooterElement();
                        doc.PageSettings.FooterDistance = (int)(GraphicsUnitConvert.FromTwips(
                                                                    (double)this._RTFDocument.FooterDistance,
                                                                    GraphicsUnit.Inch) * 100.0);
                        result.Add(footer);
                        ReadContent(element, doc, footer.Elements, format);
                    }
                }
                else if (element is RTFDomParagraph)
                {
                    RTFDomParagraph domP = (RTFDomParagraph)element;
                    //XTextParagraph p = new XTextParagraph();
                    //p.OwnerDocument = doc;
                    DocumentContentStyle style = ToDocumentContentStyle(
                        domP.Format,
                        doc.DocumentGraphicsUnit);
                    ReadContent(element, doc, result, domP.Format);

                    if (domP.IsTemplateGenerated == false ||
                        this.ImportTemplateGenerateParagraph)
                    {
                        DomParagraphFlagElement eof = new DomParagraphFlagElement();
                        eof.StyleIndex = doc.ContentStyles.GetStyleIndex(style);
                        result.Add(eof);
                    }
                }
                else if (element is RTFDomText)
                {
                    RTFDomText domText = (RTFDomText)element;
                    if (domText.Format.Hidden == false &&
                        domText.Text != null &&
                        domText.Text.Length > 0)
                    {
                        DocumentContentStyle style = ToDocumentContentStyle(
                            domText.Format,
                            doc.DocumentGraphicsUnit);
                        int si = doc.ContentStyles.GetStyleIndex(style);
                        result.AddRange(doc.CreateChars(domText.Text, si));
                    }
                }
                else if (element is RTFDomImage)
                {
                    // 插入图片
                    RTFDomImage     domImg = (RTFDomImage)element;
                    DomImageElement img    = new DomImageElement();
                    img.OwnerDocument = doc;
                    img.Image         = new XImageValue(domImg.Data);
                    DocumentContentStyle style = ToDocumentContentStyle(
                        domImg.Format,
                        doc.DocumentGraphicsUnit);
                    img.StyleIndex = doc.ContentStyles.GetStyleIndex(style);
                    img.Width      = GraphicsUnitConvert.FromTwips(domImg.Width, doc.DocumentGraphicsUnit);
                    img.Height     = GraphicsUnitConvert.FromTwips(domImg.Height, doc.DocumentGraphicsUnit);
                    result.Add(img);
                }


                else if (element is RTFDomShape)
                {
                }
                else if (element is RTFDomShapeGroup)
                {
                }
                else if (element is RTFDomLineBreak)
                {
                    // 软回车
                    result.Add(new DomLineBreakElement());// doc.CreateLineBreak());
                }

                else if (element.Elements != null &&
                         element.Elements.Count > 0)
                {
                    ReadContent(element, doc, result, format.Clone());
                }
            }//foreach
        }