Пример #1
0
        /// <summary>
        /// 将对象内容添加到文档内容中
        /// </summary>
        /// <param name="content">文档内容对象</param>
        /// <returns>添加的文档元素个数</returns>
        public virtual int AppendContent(DomElementList content, bool privateMode)
        {
            int result = 0;

            foreach (DomElement element in this.Elements)
            {
                element.Parent = this;
                if (element.Visible)
                {
                    if (element is DomContainerElement)
                    {
                        DomContainerElement c = (DomContainerElement)element;
                        result = result + c.AppendContent(content, privateMode);
                    }
                    else
                    {
                        content.Add(element);
                        result++;
                    }
                }//if
            }            //foreach
            return(result);
        }
Пример #2
0
        private int CloneElements(
            DomContainerElement sourceContainer,
            ref DomContainerElement descContainer)
        {
            int result = 0;

            foreach (DomElement element in sourceContainer.Elements)
            {
                if (element.Style.DeleterIndex >= 0)
                {
                    // 元素被逻辑删除了,无法复制
                    continue;
                }

                else if (element is DomContainerElement)
                {
                    DomContainerElement c    = ( DomContainerElement )element;
                    DomContainerElement newC = null;
                    int result2 = CloneElements(c, ref newC);
                    if (result2 == 0)
                    {
                        if (element is DomContainerElement)
                        {
                            DomContainerElement container = ( DomContainerElement )element;
                            if (c.Elements.Count == 0)
                            {
                                // 有些特殊的容器元素没有标准意义上的子元素,例如设置了背景文本的没有实际
                                // 内容的输入域等,此时需要判断文档内容元素
                                DomElementList ces = new DomElementList();
                                container.AppendContent(ces, true);
                                foreach (DomElement ce in ces)
                                {
                                    if (this.ContentElements.Contains(ce))
                                    {
                                        if (newC == null)
                                        {
                                            // 发现有内容在包含区域中,则创建新的容器元素对象
                                            newC           = ( DomContainerElement )c.Clone(false);
                                            newC.OwnerLine = null;
                                            break;
                                        }
                                    }
                                } //foreach
                            }     //if
                        }         //if
                    }             //if
                    if (newC != null)
                    {
                        if (descContainer == null)
                        {
                            result++;
                            descContainer           = (DomContainerElement)sourceContainer.Clone(false);
                            descContainer.OwnerLine = null;
                        }
                        descContainer.AppendChildElement(newC);
                    }
                }
            }//foreach

            return(result);
        }