2012-06-11 68 views
0

使用iTextSharp将生成的html页面转换为pdf,我无法从asp:DataGrid创建的表格显示在PDF中。页面的HTML输出为DataGrid看起来是这样的:iTextSharp asp:DataGrid没有显示在PDF中

<p>Purchases:</p> 
    <table rules="all" id="dg_Purchase" style="font-size: smaller; border-collapse: collapse;" border="1" cellspacing="0"> 
    <tbody><tr> 
     <td>Lot #</td> 
     <td>&nbsp;</td> 
     <td>Title</td> 
     <td align="right">Price</td> 
     <td align="right">Buyer's Premium</td> 
     <td align="right">Tax</td> 
     <td align="right">Sub Total</td> 
    </tr><tr> 
     <td>118</td> 
     <td><input id="dg_Purchase_ctl02_CheckBox1" name="dg_Purchase$ctl02$CheckBox1" type="checkbox"></td> 
     <td>Yih-Wen Kuo (1959, Taiwan)</td> 
     <td align="right">$1,900.00</td> 
     <td align="right">$332.50</td> 
     <td align="right">$0.00</td> 
     <td align="right">$2,232.50</td> 
    </tr><tr> 
     <td>119</td> 
     <td><input id="dg_Purchase_ctl03_CheckBox1" name="dg_Purchase$ctl03$CheckBox1" type="checkbox"></td> 
     <td>Yih-Wen Kuo (1959, Taiwan)</td> 
     <td align="right">$1,800.00</td> 
     <td align="right">$315.00</td> 
     <td align="right">$0.00</td> 
     <td align="right">$2,115.00</td> 
    </tr> 
</tbody></table> 

<p>Payments:</p> 
    <table rules="all" id="dg_Payment" style="font-size: smaller; border-collapse: collapse;" border="1" cellspacing="0"> 
    <tbody><tr> 
     <td style="width: 120px;">Payment Method</td> 
     <td>Date</td> 
     <td align="right">Amount&nbsp;&nbsp;</td> 
    </tr><tr> 
     <td>Total</td> 
     <td>&nbsp;</td> 
     <td align="right">$0.00</td> 
    </tr> 
</tbody></table> 

当HTML页面中查看,该表看起来完全应该如何。但是当我生成PDF时,表格(或者说,表格中的所有内容)不会显示出来。只有边框可见,几乎每个表格只有2 px直线。

所以在我的正常的脚本,整个页面加载后,我做的最后一件事是:

StringWriter stringWriter = new StringWriter(); 
    HtmlTextWriter writer = new HtmlTextWriter(stringWriter); 
    Render(writer); 

为iTextSharp的功能如下:

protected override void Render(HtmlTextWriter writer) 
{ 
    MemoryStream mem = new MemoryStream(); 
    StreamWriter twr = new StreamWriter(mem); 
    HtmlTextWriter myWriter = new HtmlTextWriter(twr); 
    base.Render(myWriter); 
    myWriter.Flush(); 
    myWriter.Dispose(); 
    StreamReader strmRdr = new StreamReader(mem); 
    strmRdr.BaseStream.Position = 0; 
    string pageContent = strmRdr.ReadToEnd(); 
    strmRdr.Dispose(); 
    mem.Dispose(); 
    writer.Write(pageContent); 
    CreatePDFDocument(pageContent); 
} 

public void CreatePDFDocument(string strHtml) 
{ 

    string strFileName = HttpContext.Current.Server.MapPath("test.pdf"); 
    // step 1: creation of a document-object 
    Document document = new Document(); 
    // step 2: 
    // we create a writer that listens to the document 
    PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create)); 
    StringReader se = new StringReader(strHtml); 
    HTMLWorker obj = new HTMLWorker(document); 
    document.Open(); 
    obj.Parse(se); 
    document.Close(); 
    ShowPdf(strFileName); 
} 

public void ShowPdf(string strFileName) 
{ 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName); 
    Response.ContentType = "application/pdf"; 
    Response.WriteFile(strFileName); 
    Response.Flush(); 
    Response.Clear(); 
} 

再次,一切都在以编程方式设置的页面确实显示在数据网格的PDF EXCEPT中。走出边界,看起来它不是width问题。它似乎是空的,就是全部。任何帮助将不胜感激。

回答

0

那么我找不到韵或理由为什么这不起作用,所以我又走了另一条路。我决定让生成HTML代码的页面成为辅助页面,然后让生成PDF的页面引用它。我结束了:

String address = "http://address.com/admin/Invoice2.aspx?sale_id=" + sale_id + "&bidder_number=" + bidder_number; 

using (WebClient wc = new WebClient()) 
{ 
    string content = wc.DownloadString(address); 
    CreatePDFDocument(content); 
} 
在我的网页加载方法

,只是不停的其他两个功能:

public void CreatePDFDocument(string strHtml) 
{ 

    string strFileName = HttpContext.Current.Server.MapPath("invoice.pdf"); 
    // step 1: creation of a document-object 
    Document document = new Document(); 
    // step 2: 
    // we create a writer that listens to the document 
    PdfWriter.GetInstance(document, new FileStream(strFileName, FileMode.Create)); 
    StringReader se = new StringReader(strHtml); 
    HTMLWorker obj = new HTMLWorker(document); 
    document.Open(); 
    obj.Parse(se); 
    document.Close(); 
    ShowPdf(strFileName); 
} 

public void ShowPdf(string strFileName) 
{ 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.AddHeader("Content-Disposition", "inline;filename=" + strFileName); 
    Response.ContentType = "application/pdf"; 
    Response.WriteFile(strFileName); 
    Response.Flush(); 
    Response.Clear(); 
} 

现在我只需要获得表的造型转移到PDF和我会很好。但那是另一个问题。

相关问题