2013-04-19 3 views
5

OK ich analysiere HTML aus einer Zeichenfolge in eine PDFCEll.Verwenden Sie externe Css zum Analysieren von XML

Es funktioniert super, dank einiger Hilfe von hier.

Hier ist, wie ich es mache.

Wie ich eine externe CSS-Datei verwenden Sie, so kann ich die Klasse verwenden und nicht STYLE = „“

public class XhtmlToListHelper : IElementHandler 
{ 
// Generic list of elements 
public List<IElement> elements = new List<IElement>(); 
// Add the item to the list 
public void Add(IWritable w) 
{ 
    if (w is WritableElement) 
    { 
    elements.AddRange(((WritableElement)w).Elements()); 
    } 
} 

    string html = "<ul class=\"list\"><li>html 1</li><li>html 2</li><li>html 3</li></ul>"; 
    using (TextReader sr = new StringReader(html)) 
    { 
     XMLWorkerHelper.GetInstance().ParseXHtml(XhtmlHelper, sr); 
    } 
    foreach (var element in XhtmlHelper.elements) 
    { 
     if (element.IsContent()) 
     { 
      PDFCell.AddElement(element); 
     } 
    } 

Jetzt i so weit gekommen, aber wie alles in ausweicht mir tye. Jede Hilfe wäre viel vorgerückt.

HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); 
    htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory()); 
    ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); 
    cssResolver.AddCssFile(HttpContext.Current.Server.MapPath("~/Templates/css/core.css"), true); 

Antwort

7

Wenn Sie um die source here herumstochern und Sie sollten sehen, wie Sie es implementieren. Grundsätzlich Ihr drei Linie using Block vervierfacht in Größe und Komplexität:

var XhtmlHelper = new XhtmlToListHelper(); 
var htmlContext = new HtmlPipelineContext(null); 
htmlContext.SetTagFactory(iTextSharp.tool.xml.html.Tags.GetHtmlTagProcessorFactory()); 
var cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); 
cssResolver.AddCssFile(@"c:\test.css", true); 
var pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new ElementHandlerPipeline(XhtmlHelper, null)));//Here's where we add our IElementHandler 
var worker = new XMLWorker(pipeline, true); 
var parser = new XMLParser(); 
parser.AddListener(worker); 

using (TextReader sr = new StringReader(html)) { 
    parser.Parse(sr); 
} 
+0

krank geben, dass ein zu gehen, vielen Dank für Ihre Hilfe wieder. :} –

+1

Nochmals vielen Dank. arbeitete wie ein Traum ... gutes Stück. –

+0

So wiederholen Sie die Tabellenüberschrift mit diesem Code –