2010-04-07 6 views
5

HTML 페이지에서 PDF를 크레이트하려고합니다. 내가 사용하는 CMS는 EPiServer입니다.itextsharp를 사용하여 HTML에서 PDF를 만드는 데 도움이 필요합니다.

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

이 기사 이름, 인트로 텍스트와 본체의 내용을 출력합니다

이 지금까지 내 코드입니다. 하지만 기사 텍스트에있는 HTML을 분석하지 않으며 레이아웃이 없습니다.

더 현명하지 않고 http://itextsharp.sourceforge.net/tutorial/index.html을 보았습니다. 올바른 방향으로

모든 포인터는 크게 감사합니다 :) iTextSharp 이후 버전

답변

5

:

당신이 HTML에서 PDF를 만들 수 iTextSharp.text.html.simpleparser.HTMLWorker.ParseToList() 방법을 사용할 수 있습니다 iTextSharp 사용.

ParseToList()를 사용하면 (기본 유형으로 TextReader를를 사용 둘 다) StringReader 또는 StreamReader을 사용할 수 있습니다 즉, 자사의 HTML 소스에 대한 TextReader (추상 클래스)를합니다. StringReader을 사용하여 간단한 마크 업에서 PDF를 생성 할 수있었습니다. 웹 페이지에서 반환 된 HTML을 사용하려고 시도했지만 단순한 페이지를 제외하고 모두에 오류가 발생했습니다. 심지어 내가 찾은 단순한 웹 페이지 (http://black.ea.com/)는 페이지의 'head'태그의 내용을 PDF로 렌더링했기 때문에 HTMLWorker.ParseToList() 메서드는 구문 분석 한 HTML의 형식에 대해 까다롭게 생각합니다. 여기에 시도 할 경우

어쨌든, 내가 사용하는 테스트 코드입니다 : 나는 HTML이 HTMLWorker.ParseToList() 지원을 구성하는 모든 문서를 찾을 수 없습니다

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

는; 만약 당신이 여기에 게시하십시오. 나는 많은 사람들이 관심을 가질 것이라고 확신한다. iTextSharp 이전 버전

는 : 당신은 HTML을 기반으로 PDF를 생성 할 iTextSharp.text.html.HtmlParser.Parse 방법을 사용할 수 있습니다. 문제는 HTML 엄격하게 XHTML을 준수해야입니다 (나를 위해 전공)

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

한 :

다음은이 보여주는 미리보기입니다.

행운을 빈다.

+0

좋아요. 감사. 'YourHtmlDocument.html'을 페이지의 URL로 사용할 수 있습니까? – Steven

+0

PS. 나는 iTextSharp의 최신 버전이 HtmlParser를 가지고 있다고 생각하지 않는다. 가장 가까운 곳은'iTextSharp.text.html.simpleparser.HTMLWorker'입니다.하지만이를 사용하려면 구문 분석을 위해 TextReader가 필요합니다 ..... – Steven

+0

@Steven - 네가 맞아! 죄송합니다. 귀하의 질문에 답변 할 때 이전 테스트 프로그램 (이전 버전의 iTextSharp 포함)을로드했습니다. 당신 말이 맞아요, HTMLWorker는 당신이하고 싶은 방식입니다. 나는 HTMLWorker와 iTextSharp 5.0으로 수행 한 (제한된) 테스트를 기반으로 내 응답을 편집했습니다. –

관련 문제