2011-11-18 61 views
7

我正在使用iTextSharp.dll生成PDF,但问题是我无法应用该CSS。我有一个DIV:使用iTextsharp.dll生成PDF时不应用CSS

<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(); 

回答

12

有几件事情会在这里的。首先,iText和iTextSharp中的HTML/CSS解析器还远远没有完成。他们肯定非常强大,但仍有一段路要走。每个版本都会变得更好,因此请始终确保您使用的是最新版本。

其次,我已经在iText/iTextSharp的一个附件中看到了更多的HTML/CSS活动,这个附加组件叫做XMLWorker,你可能想看看。你不再“加载样式”,你只需传入原始的HTML/CSS,它就会计算出很多东西。您可以看到一些examples here,请参阅supported CSS attributes here,download it here(并获取两个缺失文件herehere)的列表。

第三,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"); 
+0

你好,这是好的...但我不能使用应用背景颜色效果你上面的东西... PLZ给我的解决方案........... – Kartik

+1

不幸的是,获得背景颜色支持的唯一方法是使用表格或自己绘制形状 –

+0

Thnxs克里斯哈斯先生....我正在尝试,因为最近两天..... thnxs为你的有用信息..... – Kartik

1

引用的研究背景颜色的正确方式是通过HTML标签类

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