我使用iTextSharp.dll生成PDF,但问题是我无法应用该CSS。我有一个div:
<div id="personal" class="headerdiv">
Personal Data
</div>
现在我的.aspx.cs代码是这样的:
iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
styles.LoadTagStyle("#headerdiv", "height", "30px");
styles.LoadTagStyle("#headerdiv", "font-weight", "bold");
styles.LoadTagStyle("#headerdiv", "font-family", "Cambria");
styles.LoadTagStyle("#headerdiv", "font-size", "20px");
styles.LoadTagStyle("#headerdiv", "background-color", "Blue");
styles.LoadTagStyle("#headerdiv", "color", "White");
styles.LoadTagStyle("#headerdiv", "padding-left", "5px");
HTMLWorker worker = new HTMLWorker(document);
worker.SetStyleSheet(styles);
// step 4: we open document and start the worker on the document
document.Open();
worker.StartDocument();
// step 5: parse the html into the document
worker.Parse(reader);
// step 6: close the document and the worker
worker.EndDocument();
worker.Close();
document.Close();
答案 0 :(得分:12)
这里有几件事情要发生。首先,iText和iTextSharp中的HTML / CSS解析器远未完成。他们肯定非常强大,但还有很长的路要走。每个版本都会变得更好,所以请务必确保您使用的是最新版本。
其次,我在iText / iTextSharp的附加组件中看到了更多HTML / CSS活动,您可能希望查看这些活动名为XMLWorker。你不再“加载样式”了,你只需要传入原始的HTML / CSS,它就会发现很多东西。您可以看到一些examples here,查看supported CSS attributes here,download it here列表(并获取两个丢失的文件here和here)。
第三,LoadTagStyle
用于加载HTML标记的样式属性,而不是CSS ID或类。您希望使用LoadStyle
按类加载:
styles.LoadStyle("<classname>", "<attribute>", "<value>");
不幸的是,这种方法仍然无法完成您想要的任务。例如,要改变你认为你会说的字体大小:
styles.LoadStyle("headerdiv", "font-size", "60ptx);
但要使其工作,您只能使用相对HTML字体大小(1,2,-1等)或PT大小,并且必须使用size
属性:
styles.LoadStyle("headerdiv", "size", "60pt");
//or
styles.LoadStyle("headerdiv", "size", "2");
LoadStyle
诚实地感觉就像是一个只是部分完成的事后想法,我建议不要实际使用它。相反,如果可以的话,我建议直接内联编写样式属性:
string html = "<div id=\"personal\" class=\"headerdiv\" style=\"padding-left:50px;font-size:60pt;font-family:Cambria;font-weight:700;\">Personal Data</div>";
显然,这会破坏CSS的要点,再一次,这就是为什么他们正在开发上面的新XMLWorker。
最后,要按名称使用字体,你必须先用iTextSharp注册它们,它不会去寻找它们:
iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria");
答案 1 :(得分:1)
如果有人仍然遇到此问题。最新版本的itextsharp(目前为5.3.2)显着改进了HTMLWorker处理器。
答案 2 :(得分:1)
引用背景颜色的正确方法是通过Html标签类
styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");