Первый ответ 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 кодирование :)
Оба кода отлично работают. большое спасибо. Я буду использовать второй, так как мне нужно много css. только из любопытства, но как используется css.LoadTagStyle? потому что я пытался часами и не мог понять. –
Вы не знаете, какие версии html и css совместимы? –
Невилл, он не поддерживает все теги и/или все селекторы. Вот список [CSS Support] (http://demo.itextsupport.com/xmlworker/itextdoc/CSS-conformance-list.htm) – Iqbal