2014-02-04 4 views
1

Я пробуя следующий код на C# с использованием itextsharpстиль настройки листы HTML-теги

Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35); 
    PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/Test.pdf"), FileMode.Create)); 

    doc.Open(); 

    HTMLWorker html = new HTMLWorker(doc); 
    StyleSheet css = new StyleSheet(); 

    css.LoadTagStyle("div", "color", "red"); 
    html.Parse(new StringReader("<div>Sample text</div>")); 
    css.LoadTagStyle("div", "color", "red"); 
    html.SetStyleSheet(css); 
    doc.Close(); 

Испытание, однако, отображается в простом простом черном.

ответ

1

Первый ответ String должен быть в формате HTML. И второй ответ HTMLWorker не поддерживает CSS таким образом.

Вы можете использовать XMLWorker для достижения своей цели.

public static void pdfWithCSS() 
    { 
     Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35); 
     PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/TestWithCSS.pdf"), FileMode.Create)); 
     HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); 

     htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 

     //create a cssresolver to apply css 
     ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); 

     cssResolver.AddCss("div{color: red;}", true); 
     cssResolver.AddCss("h1{color: green;}", true); 

     //Create and attach pipline, without pipline parser will not work on css 
     IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(doc, writer))); 

     //Create XMLWorker and attach a parser to it 
     XMLWorker worker = new XMLWorker(pipeline, true); 
     XMLParser xmlParser = new XMLParser(worker); 

     //All is well open documnet and start writing. 
     doc.Open(); 
     string htmltext = "<html><body><h1>Heading in Green</h1><div>This is a div content. It should look red.</div></body></html>"; 
     xmlParser.Parse(new StringReader(htmltext)); 

     //Done! close the documnet 
     doc.Close(); 
    } 

Но даже если вы хотите использовать HTMLWorker, то вы должны указать свой атрибут CSS в самом элементе с style.

Смотрите пример ниже:

public static void pdfInLineCSS() 
    { 
     Document doc = new Document(iTextSharp.text.PageSize.LETTER, 10, 10, 42, 35); 
     PdfWriter.GetInstance(doc, new FileStream(Server.MapPath("~/Test.pdf"), FileMode.Create)); 

     doc.Open(); 

     HTMLWorker html = new HTMLWorker(doc); 
     /*StyleSheet css = new StyleSheet();*/ //Not supported 
     /*css.LoadTagStyle("div", "color", "red");*/ 
     //css.LoadStyle("div", "color", "green"); 
     string simple = "<html><body><h1 style='color: green;'>Heading in Green</h1><div style='color: red;'>Sample text in red color.</div></body></html>"; 
     html.Parse(new StringReader(simple)); 
     //css.LoadTagStyle("DIV", "color", "red"); 
     /*html.SetStyleSheet(css);*/ 
     doc.Close(); 

    } 

ресы:

    И еще много не могу перечислить все, но большая благодарность всем

Happy кодирование :)

+0

Оба кода отлично работают. большое спасибо. Я буду использовать второй, так как мне нужно много css. только из любопытства, но как используется css.LoadTagStyle? потому что я пытался часами и не мог понять. –

+0

Вы не знаете, какие версии html и css совместимы? –

+1

Невилл, он не поддерживает все теги и/или все селекторы. Вот список [CSS Support] (http://demo.itextsupport.com/xmlworker/itextdoc/CSS-conformance-list.htm) – Iqbal

Смежные вопросы