将数据表导出为pdf,其中dt中的列数超过100列

时间:2013-11-18 14:25:12

标签: c# itextsharp

将135列的数据表导出为pdf时,它显示方框而不是数据

以下方法用于导出为pdf,但如果列数超过100而生成的pdf未显示数据,则显示方框。

public void ExportToPdf(string ReportName)
{
    DataTable dt;
    if (tabmain.ActiveTabIndex == 0)
    {
        dt = GetQueryData(IsSessionSource, 0, 0).DataSet.Tables[0];
    }
    else
    {
        dt = GetQueryData(IsSessionSource, 0, 0).DataSet.Tables[1];
    }
    Document document = new Document();
    //PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(filePath, FileMode.Create));
    PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream);
    document.Open();
    iTextSharp.text.Font font5 = iTextSharp.text.FontFactory.GetFont(FontFactory.HELVETICA, 5);
    iTextSharp.text.Font myFont = iTextSharp.text.FontFactory.GetFont(FontFactory.TIMES_BOLD, 8, BaseColor.BLUE);
    PdfPTable table = new PdfPTable(dt.Columns.Count);
    PdfPRow row = null;

    table.WidthPercentage = 100;
    int iCol = 0;
    string colname = "";
    PdfPCell cell = new PdfPCell(new Phrase("Products"));

    cell.Colspan = dt.Columns.Count;

    foreach (DataColumn c in dt.Columns)
    {
        table.AddCell(new Phrase(c.ColumnName, myFont));
    }
    int i = dt.Columns.Count;
    foreach (DataRow r in dt.Rows)
    {
        if (dt.Rows.Count > 0)
        {
            for (int j = 0; j < i; j++)
            {
                table.AddCell(new Phrase(r[j].ToString(), font5));
            }
        }
    } 
    document.Add(table);
    document.Close();
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment; filename= " + ReportName + ".pdf");
    Response.End();
}

1 个答案:

答案 0 :(得分:1)

我怀疑你只是使用的字体太小而无法放在页面上。单页上的东西太多了。 我能想到做你想做的最简单的方法:将数据表发送到excel文件,然后手动保存为pdf。

如果这不是一个选项,您可以尝试更改pdf的页面大小。这里有一篇不错的文章:

http://www.dotnetfox.com/articles/how-to-change-pdf-document-page-size-in-Asp-Net-with-C-Sharp-usng-itextsharp-1024.aspx

在上面的文章中,它引用了以下内容:

Rectangle method:

      Document document = new Document(new Rectangle(200f, 300f)); 
PageSize method: 
      Document document = new Document(PageSize.A4, 20f, 20f, 20f, 20f);

PdfWriter.GetInstance(document, new FileStream(filename, FileMode.Create));

    document.Open();
    document.Add(new Paragraph("Welcome to dotnetfox"));
    document.Close();

希望有所帮助。欢呼声。