2013-08-08 24 views
7

Web sayfamın bir bölümünü iTextSharp kullanarak pdf'ye dönüştürmeye çalışıyorum ve pdf nesli doğru şekilde çalışıyorken, css stillerinin hiçbiri uygulanmıyor. Stilleri tek tek uygulamayı denedim, ancak bu işe yaramıyor. Şimdiye kadar geldiğim şey:CSS stilleri PDF'ye iTextSharp ile uygulanmıyor

//Get the portion of the page to convert. 
StringBuilder sb = new StringBuilder(); 
print_div.RenderControl(new HtmlTextWriter(new StringWriter(sb))); 
string html = sb.ToString(); 

//Generate a random filename to use for the pdf 
Guid random_guid; 
random_guid = Guid.NewGuid(); 
string fileName = random_guid.ToString() + ".pdf"; 
string filename_with_folder = @"pdf\sl_" + fileName; 
string fullFilePath = System.IO.Path.Combine(Request.PhysicalApplicationPath, filename_with_folder); 

using (Document doc = new Document()) 
{ 
    // Create the pdf 
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create)); 
    doc.Open(); 
    try 
    { 
     //Set the font size for all elements 
     StyleSheet styles = new StyleSheet(); 
     styles.LoadStyle("body", "fontsize", "8px"); 

     //Write the content to the pdf document 
     StringReader sr = new StringReader(html); 
     XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, sr); 
    } 
    catch (Exception ex) 
    { 
    } 
    doc.Close(); 
} 

Bir şey mi eksik? HTMLWorker'ı kullanmaya başladım ve XMLWorker'a geçtim, ama sanırım şimdi kendimi karıştırıyorum. Yardım takdir edilecektir. cevap için

Denemesi ve # 2

teşekkürler! Buraya geldim, ama işe yaramıyor. İçeriğim şu anda pdf'de görünmüyor ve neden emin değilim. Düşüncesi olan var mı?

using (Document doc = new Document()) 
{ 
    PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(fullFilePath, FileMode.Create)); 
    doc.Open(); 

    // CSS 
    var cssResolver = new StyleAttrCSSResolver(); 
    var cssFile = XMLWorkerHelper.GetCSS(new FileStream(HttpContext.Current.Server.MapPath("~/css/print.css"), FileMode.Open)); 
    cssResolver.AddCss(cssFile); 

    // HTML 
    CssAppliers ca = new CssAppliersImpl(); 
    HtmlPipelineContext hpc = new HtmlPipelineContext(ca); 
    hpc.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 

    // PIPELINES 
    PdfWriterPipeline pdf = new PdfWriterPipeline(doc, writer); 
    HtmlPipeline htmlPipe = new HtmlPipeline(hpc, pdf); 
    CssResolverPipeline css = new CssResolverPipeline(cssResolver, htmlPipe); 

    XMLWorker worker = new XMLWorker(css, true); 
    XMLParser p = new XMLParser(worker); 
    StringReader sr = new StringReader(html); 
    p.Parse(sr); 
    doc.Close(); 
} 

Kapat mıyım yoksa noktayı tamamen mi özlüyorum?

+6

İlk soru, doğru biçimlendirilmiş kodu, ne denediğinizi göstererek, kısa bir doğru tanımlama. Bu kesinlikle nadirdir. – gunr2171

+0

Bunu mu çözdünüz? Lütfen cevabınızı gönderin veya ne yapacağınız konusunda yönlendirin? Senin gibi aynı durumdayım .... – micronyks

cevap

0

Bir CSSResolver

var cssResolver = new StyleAttrCSSResolver(); 
//Change the path to your CSS file 
var cssFile = XMLWorkerHelper.GetCSS(new FileStream(HttpContext.Current.Server.MapPath("~/pdf.css"), FileMode.Open)); 
cssResolver.AddCss(cssFile); 

Ve sonra HtmlPipeline oluşturmak ve CssResolverPipeline yapıcısına geçmek kullanarak XmlWorker oluşturabilir: Bu soruna geçici bir çözüm başardı eğer

CssResolverPipeline css = new CssResolverPipeline(cssResolver, html); 
XMLWorker worker = new XMLWorker(css, true); 
XMLParser p = new XMLParser(worker); 
using (TextReader sr = new StringReader(html)) 
     { 
      p.Parse(sr); 
      document.Close(); 
     } 
     //close your writer 
     pdfwriter.Close(); 
2

(font rengi, şey büyüklükleri PX olmama) değil ediliyordu bulundu XmlWorker ile bir PDF dosyası oluşturmak için bir bayt dizisi döndüren bu örnek kodu deneyebilirsiniz.



     byte[] bytesArray = null; 
     using (var ms = new MemoryStream()) 
     { 
      using (var document = new Document()) 
      { 
       using (PdfWriter writer = PdfWriter.GetInstance(document, ms)) 
       { 
        document.Open(); 
        using (var strReader = new StringReader(html)) 
        { 
         //Set factories 
         HtmlPipelineContext htmlContext = new HtmlPipelineContext(null); 
         htmlContext.SetTagFactory(Tags.GetHtmlTagProcessorFactory()); 
         //Set css 
         ICSSResolver cssResolver = XMLWorkerHelper.GetInstance().GetDefaultCssResolver(false); 
         cssResolver.AddCssFile(System.Web.HttpContext.Current.Server.MapPath("~/Content/bootstrap.min.css"), true); 
         //Export 
         IPipeline pipeline = new CssResolverPipeline(cssResolver, new HtmlPipeline(htmlContext, new PdfWriterPipeline(document, writer))); 
         var worker = new XMLWorker(pipeline, true); 
         var xmlParse = new XMLParser(true, worker); 
         xmlParse.Parse(strReader); 
         xmlParse.Flush(); 
        } 
        document.Close(); 
       } 
      } 
      bytesArray = ms.ToArray(); 
     } 
     return bytesArray; 
İlgili konular