2010-04-07 22 views
5

Bir HTML sayfasından PDF'leri kopyalamaya çalışıyorum. Kullanmakta olduğum CMS EPiServer'tır.HTML'den PDF oluştururken yardıma ihtiyacınız var itextsharp

protected void Button1_Click(object sender, EventArgs e) 
    { 
     naaflib.pdfDocument(CurrentPage); 
    } 


    public static void pdfDocument(PageData pd) 
    { 
     //Extract data from Page (pd). 
     string intro = pd["MainIntro"].ToString(); // Attribute 
     string mainBody = pd["MainBody"].ToString(); // Attribute 

     // makae ready HttpContext 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.ContentType = "application/pdf"; 

     // Create PDF document 
     Document pdfDocument = new Document(PageSize.A4, 80, 50, 30, 65); 
     //PdfWriter pw = PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream); 
     PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream); 

     pdfDocument.Open(); 
     pdfDocument.Add(new Paragraph(pd.PageName)); 
     pdfDocument.Add(new Paragraph(intro)); 
     pdfDocument.Add(new Paragraph(mainBody)); 
     pdfDocument.Close(); 
     HttpContext.Current.Response.End(); 
    } 

Bu makale adı, intro-metin ve ana gövdenin içeriği çıkarır:

Bu benim defa kodudur. Ancak, makale metninde bulunan HTML yoktur ve düzen yoktur.

Herhangi bir bilge olmadan http://itextsharp.sourceforge.net/tutorial/index.html'a bakmayı denedim. Doğru yöne

Herhangi işaretçiler büyük takdir :) iTextSharp sonraki sürümlerinde için

cevap

5

:

HTML bir PDF oluşturmak için iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList() yöntemi kullanabilirsiniz İTextSharp kullanma.

ParseToList() bir (bir baz türü olarak TextReader kullanımı her ikisi de) StringReader veya StreamReader kullanılabileceği anlamına gelir, çok HTML kaynağı için bir TextReader (soyut bir sınıf) alır. StringReader kullandım ve basit işaretlemeden PDF'ler oluşturabiliyordum. Bir web sayfasından döndürülen HTML'yi kullanmayı denedim ve hepsinden de hata listesi sayfalarını aldım. Aldığım simplist web sayfası (http://black.ea.com/) bile sayfanın 'head' etiketinin içeriğini PDF'ye aktarıyordu, bu yüzden HTMLWorker.ParseToList() yönteminin, ayrıştırdığı HTML'nin formatı hakkında seçici olduğunu düşünüyorum. Burada denemek isterseniz

Neyse, kullanılan test kod: HTML HTMLWorker.ParseToList() destekler inşa ediş herhangi bir belge bulamadı

// Download content from a very, very simple "Hello World" web page. 
string download = new WebClient().DownloadString("http://black.ea.com/"); 

Document document = new Document(PageSize.A4, 80, 50, 30, 65); 
try { 
    using (FileStream fs = new FileStream("TestOutput.pdf", FileMode.Create)) { 
     PdfWriter.GetInstance(document, fs); 
     using (StringReader stringReader = new StringReader(download)) { 
      ArrayList parsedList = HTMLWorker.ParseToList(stringReader, null); 
      document.Open(); 
      foreach (object item in parsedList) { 
       document.Add((IElement)item); 
      } 
      document.Close(); 
     } 
    } 

} catch (Exception exc) { 
    Console.Error.WriteLine(exc.Message); 
} 

; eğer yaparsanız lütfen buraya gönderin. Eminim pek çok insan ilgilenirdi. iTextSharp eski sürümleri için

: Sen html dayalı bir PDF oluşturmak için iTextSharp.text.html.HtmlParser.Parse yöntemi kullanabilirsiniz. Sorun HTML kesinlikle XHTML uyumlu olmalıdır (benim için önemli)

Document document = new Document(PageSize.A4, 80, 50, 30, 65); 
try { 
    using (FileStream fs = new FileStream("TestOutput.pdf", FileMode.Create)) { 
     PdfWriter.GetInstance(document, fs); 
     HtmlParser.Parse(document, "YourHtmlDocument.html"); 
    } 
} catch(Exception exc) { 
    Console.Error.WriteLine(exc.Message); 
} 

biri:

İşte bu gösteren bir pasajı bu.

İyi şanslar!

+0

Harika. Teşekkürler. YourHtmlDocument.html, sayfanın URL'si olabilir mi? – Steven

+0

PS. ITextSharp'ın en yeni sürümünün HtmlParser olduğunu düşünmüyorum. En yakın ben 'iTextSharp.text.html.simpleparser.HTMLWorker' Ama bunu kullanarak, ayrıştırma için bir TextReader gerektirir ..... – Steven

+0

@Steven - Haklısınız! Maalesef, sorunuzu yanıtladığımda eski bir test programını (eski bir iTextSharp sürümü ile) yükledim. Yine de haklısınız, HTMLWorker yapmak istediğiniz yoldur. Yanıtımı HTMLWorker ve iTextSharp 5.0 ile yaptığım (sınırlı) testlere dayanarak düzenledim. –

İlgili konular