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); }
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; } } }
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 }