2011-11-18 63 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");