Beispiel #1
0
        public void Add(IWritable htmlElement)
        {
            WritableElement writableElement = htmlElement as WritableElement;

            if (writableElement == null)
            {
                return;
            }

            foreach (IElement element in writableElement.Elements())
            {
                if (element is PdfDiv)
                {
                    PdfDiv div = element as PdfDiv;
                    foreach (IElement divChildElement in div.Content)
                    {
                        _paragraph.Add(divChildElement);
                    }
                }
                else
                {
                    _paragraph.Add(element);
                }
            }
        }
        /*
         * (non-Javadoc)
         *
         * @see
         * com.itextpdf.tool.xml.pipeline.IPipeline#close(com.itextpdf.tool
         * .xml.Tag, com.itextpdf.tool.xml.pipeline.ProcessObject)
         */
        public override IPipeline Close(IWorkerContext context, Tag t, ProcessObject po)
        {
            HtmlPipelineContext hcc = (HtmlPipelineContext)GetLocalContext(context);
            ITagProcessor       tp;

            try {
                if (t.LastMarginBottom != null)
                {
                    hcc.GetMemory()[HtmlPipelineContext.LAST_MARGIN_BOTTOM] = t.LastMarginBottom;
                }
                else
                {
                    hcc.GetMemory().Remove(HtmlPipelineContext.LAST_MARGIN_BOTTOM);
                }
                tp = hcc.ResolveProcessor(t.Name, t.NameSpace);
                IList <IElement> elems = null;
                if (tp.IsStackOwner())
                {
                    // remove the element from the StackKeeper Queue if end tag is
                    // found
                    StackKeeper tagStack;
                    try {
                        tagStack = hcc.Poll();
                    } catch (NoStackException e) {
                        throw new PipelineException(String.Format(LocaleMessages.GetInstance().GetMessage(LocaleMessages.STACK_404), t.ToString()), e);
                    }
                    elems = tp.EndElement(context, t, tagStack.GetElements());
                }
                else
                {
                    elems = tp.EndElement(context, t, hcc.CurrentContent());
                    hcc.CurrentContent().Clear();
                }
                if (elems.Count > 0)
                {
                    StackKeeper stack = hcc.Peek();

                    if (stack != null)
                    {
                        foreach (IElement elem in elems)
                        {
                            stack.Add(elem);
                        }
                    }
                    else
                    {
                        WritableElement writableElement = new WritableElement();
                        po.Add(writableElement);
                        writableElement.AddAll(elems);
                    }
                }
            } catch (NoTagProcessorException e) {
                if (!hcc.AcceptUnknown())
                {
                    throw e;
                }
            }
            return(GetNext());
        }
Beispiel #3
0
        /*
         * (non-Javadoc)
         *
         * @see
         * com.itextpdf.tool.xml.pipeline.IPipeline#open(com.itextpdf.tool.
         * xml.Tag, com.itextpdf.tool.xml.pipeline.ProcessObject)
         */
        public override IPipeline Open(IWorkerContext context, Tag t, ProcessObject po)
        {
            HtmlPipelineContext hcc = (HtmlPipelineContext)GetLocalContext(context);

            try {
                Object lastMarginBottom = null;
                if (hcc.GetMemory().TryGetValue(HtmlPipelineContext.LAST_MARGIN_BOTTOM, out lastMarginBottom))
                {
                    t.LastMarginBottom = lastMarginBottom;
                    hcc.GetMemory().Remove(HtmlPipelineContext.LAST_MARGIN_BOTTOM);
                }
                ITagProcessor tp = hcc.ResolveProcessor(t.Name, t.NameSpace);
                if (tp.IsStackOwner())
                {
                    hcc.AddFirst(new StackKeeper(t));
                }
                IList <IElement> content = tp.StartElement(context, t);
                if (content.Count > 0)
                {
                    if (tp.IsStackOwner())
                    {
                        StackKeeper peek;
                        try {
                            peek = hcc.Peek();
                            foreach (IElement elem in content)
                            {
                                peek.Add(elem);
                            }
                        } catch (NoStackException e) {
                            throw new PipelineException(String.Format(LocaleMessages.STACK_404, t.ToString()), e);
                        }
                    }
                    else
                    {
                        foreach (IElement elem in content)
                        {
                            hcc.CurrentContent().Add(elem);
                            if (elem.Type == Element.BODY)
                            {
                                WritableElement writableElement = new WritableElement();
                                writableElement.Add(elem);
                                po.Add(writableElement);
                                hcc.CurrentContent().Remove(elem);
                            }
                        }
                    }
                }
            } catch (NoTagProcessorException e) {
                if (!hcc.AcceptUnknown())
                {
                    throw e;
                }
            }
            return(GetNext());
        }
Beispiel #4
0
        public void SetUp()
        {
            lst = new List <IWritable>();
            IElementHandler elemH = new CustomElementHandler();

            p        = new ElementHandlerPipeline(elemH, null);
            po       = new ProcessObject();
            writable = new WritableElement(new Chunk("aaaaa"));
            po.Add(writable);
            context = new WorkerContextImpl();
            p.Init(context);
        }
        /*
         * (non-Javadoc)
         *
         * @see com.itextpdf.tool.xml.pipeline.IPipeline#content(com.itextpdf.tool
         * .xml.Tag, java.lang.String, com.itextpdf.tool.xml.pipeline.ProcessObject)
         */
        public override IPipeline Content(IWorkerContext context, Tag t, string text, ProcessObject po)
        {
            HtmlPipelineContext hcc = (HtmlPipelineContext)GetLocalContext(context);
            ITagProcessor       tp;

            try {
                tp = hcc.ResolveProcessor(t.Name, t.NameSpace);
                //String ctn = null;
                //if (null != hcc.CharSet()) {
                //    ctn = hcc.CharSet().GetString(b);
                //} else {
                //    ctn = Encoding.Default.GetString(b);
                //}
                IList <IElement> elems = tp.Content(context, t, text);
                if (elems.Count > 0)
                {
                    StackKeeper peek = hcc.Peek();
                    if (peek != null)
                    {
                        foreach (IElement e in elems)
                        {
                            peek.Add(e);
                        }
                    }
                    else
                    {
                        WritableElement writableElement = new WritableElement();
                        foreach (IElement elem in elems)
                        {
                            writableElement.Add(elem);
                        }
                        po.Add(writableElement);
                    }
                }
            } catch (NoTagProcessorException e) {
                if (!hcc.AcceptUnknown())
                {
                    throw e;
                }
            }
            return(GetNext());
        }