2010-04-07 10 views
5

का उपयोग कर HTML से पीडीएफ बनाने में मदद की ज़रूरत है, मैं एक HTML पृष्ठ से पीडीएफ को क्रेट करने की कोशिश कर रहा हूं। मैं जिस सीएमएस का उपयोग कर रहा हूं वह ईपीआईसेवर है।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(); 
    } 

यह लेख नाम, परिचय-पाठ और मुख्य शरीर की सामग्री आउटपुट:

यह मेरा कोड अब तक है। लेकिन यह एचटीएमएल को पार नहीं करता है जो आलेख पाठ में है और कोई लेआउट नहीं है।

मैंने किसी भी बुद्धिमान के बिना http://itextsharp.sourceforge.net/tutorial/index.html पर एक नज़र डालने का प्रयास किया है।

सही दिशा में कोई भी संकेत दिए गए बहुत सराहना कर रहा है :)

उत्तर

5

iTextSharp के बाद के संस्करणों के लिए:

iTextSharp आप HTML से एक पीडीएफ बनाने के लिए iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList() विधि का उपयोग कर सकते हैं का उपयोग करना।

ParseToList() अपने HTML स्रोत के लिए एक TextReader (एक अमूर्त वर्ग) लेता है, जिसका अर्थ है कि आप एक StringReader या StreamReader (जो दोनों के लिए एक आधार के रूप में प्रकार TextReader का उपयोग करें) का उपयोग कर सकते हैं। मैंने StringReader का उपयोग किया और सरल मार्क अप से पीडीएफ उत्पन्न करने में सक्षम था। मैंने HTML को वेबपृष्ठ से वापस करने का प्रयास करने की कोशिश की और सरलीकृत पृष्ठों पर सभी त्रुटियों को मिला। यहां तक ​​कि सरलतम वेबपृष्ठ जिसे मैंने पुनर्प्राप्त किया है (http://black.ea.com/) पेज के 'हेड' टैग की सामग्री को पीडीएफ पर प्रस्तुत कर रहा था, इसलिए मुझे लगता है कि HTMLWorker.ParseToList() विधि HTML के स्वरूपण के बारे में पिक्य है।

वैसे भी, अगर तुम यहाँ की कोशिश करना चाहते परीक्षण कोड मैं प्रयोग किया जाता है:

// 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); 
} 

मैं किसी भी प्रलेखन जिस पर एचटीएमएल HTMLWorker.ParseToList() का समर्थन करता है का निर्माण नहीं पा सके; यदि आप करते हैं तो कृपया इसे यहां पोस्ट करें। मुझे यकीन है कि बहुत से लोग रुचि रखते हैं।

iTextSharp के पुराने संस्करणों के लिए: आप एक पीडीएफ एचटीएमएल के आधार पर बनाने के लिए iTextSharp.text.html.HtmlParser.Parse विधि का उपयोग कर सकते हैं।

यहाँ एक टुकड़ा इस प्रदर्शन है:

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

एक (मेरे लिए प्रमुख) समस्या एचटीएमएल सख्ती से XHTML संगत होना चाहिए है।

शुभकामनाएं!

+0

ग्रेट। धन्यवाद। क्या 'YourHtmlDocument.html' पृष्ठ पर यूआरएल हो सकता है? – Steven

+0

पीएस। मुझे नहीं लगता कि iTextSharp का नवीनतम संस्करण HtmlParser है। सबसे नज़दीक मुझे यह मिलता है 'iTextSharp.text.html.simpleparser.HTMLWorker' लेकिन इसका उपयोग करने के लिए, पार्सिंग के लिए टेक्स्ट रीडर की आवश्यकता है ..... – Steven

+0

@Steven - आप सही हैं! इसके बारे में खेद है, जब मैंने आपके प्रश्न का उत्तर दिया, तो मैंने पुराने परीक्षण कार्यक्रम (iTextSharp के पुराने संस्करण के साथ) को लोड किया। यद्यपि आप सही हैं, HTMLWorker वह तरीका है जिसे आप करना चाहते हैं। मैंने HTMLWorker और iTextSharp 5.0 के साथ किए गए (सीमित) परीक्षण के आधार पर अपनी प्रतिक्रिया संपादित की। –