使用iTextsharp.dll生成PDF时不应用CSS

我使用iTextSharp.dll生成PDF,但问题是我无法应用该CSS。 我有一个div:

Personal Data

现在我的.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(); 

这里有几件事情要发生。 首先,iText和iTextSharp中的HTML / CSS解析器远未完成。 他们肯定非常强大,但还有很长的路要走。 每个版本都会变得更好,所以请务必确保您使用的是最新版本。

其次,我在iText / iTextSharp的附加组件中看到了更多HTML / CSS活动,这些活动可能需要您查看。 你不再“加载样式”了,你只需要传入原始的HTML / CSS,它就会发现很多东西。 你可以在这里看到一些例子,在这里查看支持的CSS属性列表, 在这里 下载 (并在这里和这里获取两个丢失的文件)。

第三, LoadTagStyle用于加载HTML标记的样式属性,而不是CSS ID或类。 您希望使用LoadStyle按类加载:

 styles.LoadStyle("", "", ""); 

不幸的是,这种方法仍然无法完成您想要的任务。 例如,要改变你认为你会说的字体大小:

 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 = "
Personal Data
";

显然,这会破坏CSS的要点,再一次,这就是为什么他们正在开发上面的新XMLWorker。

最后,要按名称使用字体,您必须首先使用iTextSharp注册它们,它不会去寻找它们:

 iTextSharp.text.FontFactory.Register(@"c:\windows\fonts\cambria.ttc", "Cambria"); 

万一有人仍然有这个问题。 最新版本的itextsharp(目前为5.​​3.2)显着改进了HTMLWorker处理器。

你可以在这里得到它: http : //sourceforge.net/projects/itextsharp/

引用背景颜色的正确方法是通过HtmlTags类

 styles.LoadTagStyle(HtmlTags.HEADERCELL, HtmlTags.BACKGROUNDCOLOR, "Blue");