2011-03-16 11 views
10

मैं iTextSharp का उपयोग HTML पृष्ठ को PDF में परिवर्तित करने के लिए कर रहा हूं। मैं here दिए गए सहायक वर्ग का उपयोग कर रहा हूं और मैंने सीएसएस लागू करने के लिए StyleSheet.LoadTagStyle() का उपयोग करने का भी प्रयास किया है। लेकिन कुछ भी काम नहीं करता है। कोई अंतर्दृष्टि?itextsharp - सीएसएस लागू नहीं हो रहा है - सी # .NET

संपादित

मैं इस तरह शैलियों को जोड़ने में सक्षम हूँ -

.mystyle 
{ 
    color: red; 
    width: 400px; 
} 
निम्नलिखित कोड के साथ

-

StyleSheet css = new StyleSheet(); 
css.LoadStyle("mystyle", "color", "red"); 
css.LoadStyle("mystyle", "width", "400px"); 

लेकिन क्या जब मैं की तरह जटिल शैलियों है होता है इस?

div .myclass 
{ 
    /*some styles*/ 
} 

td a.hover 
{ 
    /*some styles*/ 
} 

td .myclass2 
{ 
    /*some styles*/ 
}  
.myclass .myinnerclass 
{ 
    /*some styles*/ 
} 

iTextSharp का उपयोग करके इसे कैसे जोड़ा जाए?

+0

हाय, मैं भी उसी मुद्दे पर फंस गया हूं, जब मैं लोडटाग स्टाइल का उपयोग करता हूं, यह पूरी तरह से काम करता है, तो मैं इसे "लोडस्टाइल()" के लिए भी काम कर सकता हूं जब मैं केवल "रंग" विशेषता का उपयोग करता हूं। हालांकि यह काम नहीं करता है जब मैं "फ़ॉन्ट-रंग" या "फ़ॉन्ट-आकार" विशेषताओं का उपयोग करने की कोशिश कर रहा हूं। कोई भी उदाहरण जहां हम सीएसएस कक्षाओं –

+4

को परिवर्तित कर सकते हैं [https://github.com/webgio/Rotativa ](https://github.com/webgio/Rotativa) का उपयोग करें, आप इसे गड़बड़ कर सकते हैं। यह wkhtmltopdf के साथ काम करता है जो एचटीएमएल/सीएसएस प्रस्तुत करने के लिए वेबकिट इंजन का उपयोग करता है। यह विस्मयकारी है! ** यह एचटीएमएल/सीएसएस का समर्थन करता है। ** –

+1

धन्यवाद @Preben Huybrechts यदि आप इसे एक उत्तर में डालते हैं तो मैं इसे वोट दूंगा - यह वास्तव में ITextSharp के साथ झुकाव से बेहतर है। –

उत्तर

14

आप StyleSheet.LoadTagStyle() का उपयोग करने के साथ सही रास्ते पर हैं।

मूल रूप से यह एक चार चरणों वाली प्रक्रिया है:

  1. एक स्ट्रिंग
  2. में HTML प्राप्त एक StyleSheet वस्तु का दृष्टांत और StyleSheet.LoadTagStyle() प्रत्येक शैली आप चाहते हैं के लिए कहते हैं।
  3. कॉल HTMLWorker.ParseToList()
  4. IElement (ओं) उपरोक्त कॉल से दस्तावेज़ ऑब्जेक्ट में वापस लौटाएं।

यहाँ एक सरल HTTP handler है:

<%@ WebHandler Language='C#' Class='styles' %> 
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 
using System.Web; 
using iTextSharp.text.html; 
using iTextSharp.text.html.simpleparser; 
using iTextSharp.text; 
using iTextSharp.text.pdf; 

public class styles : IHttpHandler { 
    public void ProcessRequest (HttpContext context) { 
    HttpResponse Response = context.Response; 
    Response.ContentType = "application/pdf"; 
    string Html = @" 
<h1>h1</h1> 
<p>A paragraph</p>  
<ul> 
<li>one</li> 
<li>two</li> 
<li>three</li> 
</ul>"; 
    StyleSheet styles = new StyleSheet(); 
    styles.LoadTagStyle(HtmlTags.H1, HtmlTags.FONTSIZE, "16"); 
    styles.LoadTagStyle(HtmlTags.P, HtmlTags.FONTSIZE, "10"); 
    styles.LoadTagStyle(HtmlTags.P, HtmlTags.COLOR, "#ff0000"); 
    styles.LoadTagStyle(HtmlTags.UL, HtmlTags.INDENT, "10"); 
    styles.LoadTagStyle(HtmlTags.LI, HtmlTags.LEADING, "16"); 
    using (Document document = new Document()) { 
     PdfWriter.GetInstance(document, Response.OutputStream); 
     document.Open(); 
     List<IElement> objects = HTMLWorker.ParseToList(
     new StringReader(Html), styles 
    ); 
     foreach (IElement element in objects) { 
     document.Add(element); 
     } 
    } 
} 
    public bool IsReusable { 
     get { return false; } 
    } 
} 

आप उपरोक्त कोड को चलाने के लिए संस्करण 5.0.6 की जरूरत है। एचटीएमएल पार्सिंग के लिए समर्थन में काफी सुधार हुआ है।

यदि आप देखना चाहते हैं कि वर्तमान संस्करण द्वारा कौन से टैग समर्थित हैं, तो SVN for the HtmlTags class देखें।

+1

मैंने अपना प्रश्न संपादित कर लिया है। इसे जाँचे। – NLV

+0

मुझे लगता है कि आपने इस प्रश्न को [मेलिंग सूची] (http://www.mail-archive.com/[email protected]/msg55976.html) पर भी पूछा है? जैसा कि ध्यान दिया गया है, आपको या तो थोड़ी देर इंतजार करना होगा या उनकी परामर्श टीम से संपर्क करना होगा। – kuujinbo

3
var reader = new StringReader(text); 
var styles = new StyleSheet(); 
styles.LoadTagStyle("body", "face", "Arial"); 
styles.LoadTagStyle("body", "size", fontSize + "px"); 
styles.LoadTagStyle("body", "font-weight", "bold"); 

ArrayList list = HTMLWorker.ParseToList(reader, styles); 
for (int k = 0; k < list.Count; k++) 
{ 

    var element = (IElement)list[k]; 

    if (element is Paragraph) 
    { 
    var paragraph = (Paragraph)element; 
    paragraph.SpacingAfter = 10f; 
    cell.AddElement(paragraph); 
    } 
else 
    cell.AddElement((IElement)list[k]); 
} 
+0

मैंने अपना प्रश्न संपादित कर लिया है। इसे जाँचे। – NLV

संबंधित मुद्दे