예제 #1
0
        /* (non-Javadoc)
         * @see com.itextpdf.html2pdf.css.apply.ICssApplier#apply(com.itextpdf.html2pdf.attach.ProcessorContext, com.itextpdf.html2pdf.html.node.IStylesContainer, com.itextpdf.html2pdf.attach.ITagWorker)
         */
        public virtual void Apply(ProcessorContext context, IStylesContainer stylesContainer, ITagWorker tagWorker
                                  )
        {
            IDictionary <String, String> cssProps  = stylesContainer.GetStyles();
            IPropertyContainer           container = tagWorker.GetElementResult();

            if (container != null)
            {
                WidthHeightApplierUtil.ApplyWidthHeight(cssProps, context, container);
                BackgroundApplierUtil.ApplyBackground(cssProps, context, container);
                MarginApplierUtil.ApplyMargins(cssProps, context, container);
                PaddingApplierUtil.ApplyPaddings(cssProps, context, container);
                FontStyleApplierUtil.ApplyFontStyles(cssProps, context, stylesContainer, container);
                BorderStyleApplierUtil.ApplyBorders(cssProps, context, container);
                HyphenationApplierUtil.ApplyHyphenation(cssProps, context, stylesContainer, container);
                FloatApplierUtil.ApplyFloating(cssProps, context, container);
                PositionApplierUtil.ApplyPosition(cssProps, context, container);
                OpacityApplierUtil.ApplyOpacity(cssProps, context, container);
                PageBreakApplierUtil.ApplyPageBreakProperties(cssProps, context, container);
                OverflowApplierUtil.ApplyOverflow(cssProps, container);
                TransformationApplierUtil.ApplyTransformation(cssProps, context, container);
                OutlineApplierUtil.ApplyOutlines(cssProps, context, container);
                OrphansWidowsApplierUtil.ApplyOrphansAndWidows(cssProps, container);
            }
        }
예제 #2
0
 /// <summary>Recursively processes a node converting HTML into PDF using tag workers.</summary>
 /// <param name="node">the node</param>
 private void Visit(INode node)
 {
     if (node is IElementNode)
     {
         IElementNode element = (IElementNode)node;
         element.SetStyles(cssResolver.ResolveStyles(element, context.GetCssContext()));
         if (!IsDisplayable(element))
         {
             return;
         }
         ITagWorker tagWorker = context.GetTagWorkerFactory().GetTagWorker(element, context);
         if (tagWorker == null)
         {
             if (!ignoredTags.Contains(element.Name()))
             {
                 logger.Error(MessageFormatUtil.Format(iText.Html2pdf.LogMessageConstant.NO_WORKER_FOUND_FOR_TAG, (element)
                                                       .Name()));
             }
         }
         else
         {
             context.GetState().Push(tagWorker);
         }
         if (tagWorker is HtmlTagWorker)
         {
             ((HtmlTagWorker)tagWorker).ProcessPageRules(node, cssResolver, context);
         }
         if (TagConstants.BODY.Equals(element.Name()) || TagConstants.HTML.Equals(element.Name()))
         {
             RunApplier(element, tagWorker);
         }
         context.GetOutlineHandler().AddOutlineAndDestToDocument(tagWorker, element, context);
         VisitPseudoElement(element, tagWorker, CssConstants.BEFORE);
         VisitPseudoElement(element, tagWorker, CssConstants.PLACEHOLDER);
         foreach (INode childNode in element.ChildNodes())
         {
             if (!context.IsProcessingInlineSvg())
             {
                 Visit(childNode);
             }
         }
         VisitPseudoElement(element, tagWorker, CssConstants.AFTER);
         if (tagWorker != null)
         {
             tagWorker.ProcessEnd(element, context);
             LinkHelper.CreateDestination(tagWorker, element, context);
             context.GetOutlineHandler().SetDestinationToElement(tagWorker, element);
             context.GetState().Pop();
             if (!TagConstants.BODY.Equals(element.Name()) && !TagConstants.HTML.Equals(element.Name()))
             {
                 RunApplier(element, tagWorker);
             }
             if (!context.GetState().Empty())
             {
                 PageBreakApplierUtil.AddPageBreakElementBefore(context, context.GetState().Top(), element, tagWorker);
                 tagWorker = ProcessRunningElement(tagWorker, element, context);
                 bool childProcessed = context.GetState().Top().ProcessTagChild(tagWorker, context);
                 PageBreakApplierUtil.AddPageBreakElementAfter(context, context.GetState().Top(), element, tagWorker);
                 if (!childProcessed && !ignoredChildTags.Contains(element.Name()))
                 {
                     logger.Error(MessageFormatUtil.Format(iText.Html2pdf.LogMessageConstant.WORKER_UNABLE_TO_PROCESS_OTHER_WORKER
                                                           , context.GetState().Top().GetType().FullName, tagWorker.GetType().FullName));
                 }
             }
             else
             {
                 if (tagWorker.GetElementResult() != null)
                 {
                     roots.Add(tagWorker.GetElementResult());
                 }
             }
         }
         element.SetStyles(null);
     }
     else
     {
         if (node is ITextNode)
         {
             String content = ((ITextNode)node).WholeText();
             if (content != null)
             {
                 if (!context.GetState().Empty())
                 {
                     bool contentProcessed = context.GetState().Top().ProcessContent(content, context);
                     if (!contentProcessed)
                     {
                         logger.Error(MessageFormatUtil.Format(iText.Html2pdf.LogMessageConstant.WORKER_UNABLE_TO_PROCESS_IT_S_TEXT_CONTENT
                                                               , context.GetState().Top().GetType().FullName));
                     }
                 }
                 else
                 {
                     logger.Error(iText.Html2pdf.LogMessageConstant.NO_CONSUMER_FOUND_FOR_CONTENT);
                 }
             }
         }
     }
 }