2011-02-18 7 views
3
public void pdfgenforffd(TextBox TextBox3, HiddenField HiddenField1, HiddenField HiddenField4, AjaxControlToolkit.HTMLEditor.Editor Editor1) 
{ 

    HttpContext.Current.Response.Clear(); 
    HttpContext.Current.Response.ContentType = "application/pdf"; 
    // Create PDF document 
    Document pdfDocument = new Document(PageSize.A4, 50, 25, 15, 10); 

    PdfWriter wri = PdfWriter.GetInstance(pdfDocument, new FileStream("d://" + HiddenField1.Value + "_" + HiddenField4.Value + ".pdf", FileMode.Create)); 

    PdfWriter.GetInstance(pdfDocument, HttpContext.Current.Response.OutputStream); 

    pdfDocument.Open(); 
    string htmlText = Editor1.Content; 
    //string htmlText = htmlText1.Replace(Environment.NewLine, "<br/>"); 

    HTMLWorker htmlWorker = new HTMLWorker(pdfDocument); 

    htmlWorker.Parse(new StringReader(htmlText)); 


    pdfDocument.Close(); 
    HttpContext.Current.Response.End(); 
} 

위의 코드를 HTMLEditor (ajax 컨트롤)의 html 텍스트에서 생성하는 데 사용하고 있습니다. PDF를 생성하는 동안보다 HTMLEditor 텍스트에 다른 너비의 각 열이있는 표를 하드 코딩하면 각 열에 대해 사용자 정의 너비를 지정하더라도 모든 열의 크기가 똑같이 분산됩니다.itextsharp를 사용하여 html에서 pdf 생성

나는 pdf에 html로 변환 할 수있는 pdf를 생성하고 지정된 너비로 표의 열을 나눕니다. 그것을하는 방법?

+0

iText의 HTML-> PDF는 현재 좋지 않습니다. 그러나이 특정 기능은 현재와 다음 릴리스 사이에 많은 관심을 끌 예정입니다. –

답변

8

HTMLWorker (iTextSharp)가 테이블 너비를 아직 지원하지 않는다고 생각합니다.

은 그래서 당신은 필요에 :

  1. 는 열 폭을 찾기 위해 HTML을 구문 분석 - Html Agility Pack 같은 정규 표현식 또는 무언가를 사용합니다.

  2. HTMLWorker.ParseToList()는이 iText 요소를 반복하고 PdfPTable은 검색

  3. 직접 여기

SetWidthPercentage()이 예제 호출하여 PdfPTable 폭을 설정 (제외한 단계 1)은 HTTP를 사용하여 처리기 :

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

public class tableColumnWidths : IHttpHandler { 
    public void ProcessRequest (HttpContext context) { 
    context.Response.ContentType = "application/pdf"; 
    string html = @" 
<html><head></head><body> 
<p>A paragraph</p> 
<table border='1'> 
<tr><td>row1-column1</td><td>row1-column2</td><td>row1-column3</td></tr> 
<tr><td>row2-column1</td><td>row2-column2</td><td>row2-column3</td></tr> 
</table> 
</body></html> 
    "; 
/* 
* need the Rectangle for later when we set the column widths 
*/ 
    Rectangle rect = PageSize.LETTER; 
    Document document = new Document(rect); 
    PdfWriter.GetInstance(document, context.Response.OutputStream); 
    document.Open(); 
/* 
* iterate over iText elements 
*/ 
    List<IElement> ie = HTMLWorker.ParseToList(
     new StringReader(html), null 
    ); 
/* 
* page width 
*/ 
    float pageWidth = rect.Width; 
/* 
* look for PdfPTable(s) 
*/ 
    foreach (IElement element in ie) { 
     PdfPTable table = element as PdfPTable; 
/* 
* set the column widths 
*/ 
     if (table != null) { 
     table.SetWidthPercentage(
      new float[] { 
      (float).25 * pageWidth, 
      (float).50 * pageWidth, 
      (float).25 * pageWidth 
      }, 
      rect 
     ); 
     } 
     document.Add(element); 
    } 
    document.Close(); 
    } 
    public bool IsReusable { 
    get { return false; } 
    } 
} 
+0

내 프로그램에서 step1을 사용하는 방법을 이해하지 못했습니다. – Ishan

+0

변환하려는 HTML을 표시하지 않으면 아무도 도움을 줄 수 없습니다. – kuujinbo

+0

HTML 컨텐트는 HTMLEditor (ajax 컨트롤)에서 가져온 것이므로 사용자는 HTML 컨텐트를 수정할 수 있습니다. – Ishan

관련 문제