该文件没有页面

时间:2011-03-14 11:22:19

标签: asp.net gridview itextsharp

我使用以下代码将gridview导出为PDF

form1.Controls.Clear();
form1.Controls.Add(GridView1);
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.RenderControl(htw);
string html = "&lt;html><body>" + sw.ToString() + "&lt;/body></html>";
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=Export.pdf");
Document document = new Document(PageSize.A4, 80, 50, 30, 65);
PdfWriter writer = PdfWriter.GetInstance(document, Response.OutputStream);
document.AddAuthor("Ram");
document.AddSubject("Export To pdf");
document.Open();
string tempFile = Path.GetTempFileName();
using (StreamWriter tempwriter = new StreamWriter(tempFile, false))
{
    tempwriter.Write(html);
}
HtmlParser.Parse(document, tempFile);
document.Close();
writer.Close();
File.Delete(tempFile);
writer = null;
document = null;
Response.End();

我通过放置断点检查了grridview有10行。但我在

收到错误
document.Close();

  

该文件没有页面。

有任何建议如何修复它?

2 个答案:

答案 0 :(得分:0)

1)设置断点以查看网格视图有10行有帮助,但只检查部分问题。您还需要检查tempFile的内容。这就是iText实际使用的内容。如果它是空的,你将获得“doc has no pages”例外。

2.1)iText中不再存在HtmlParser。话虽如此,我只是通过谷歌挖出了这个代码示例:

public static void main(String[] args) throws Exception {
  Document document = new Document();
  PdfWriter.getInstance(document, new FileOutputStream("html1.pdf"));
  HtmlParser.parse(document, "example.html");
}

没有打开或关闭,只是打电话给HtmlParser。 HtmlParser很可能会检查文档是否已经打开,如果是......那就不会继续...这可以解释你所看到的行为。

2.2)这些天来转换HTML的“正确”方法是这样的:

String html = readHtml();
List<Element> objects = HTMLWorker.parseToList(new StringReader(html), null);

for (Element element : objects)
  document.add(element);

答案 1 :(得分:0)

我遇到了同样的问题,以下建议可以帮助我解决问题

文档没有页面,意味着导出时GridView数据丢失。 因此,在“导出”按钮事件中,将GridView与数据库中的数据重新绑定

https://www.aspforums.net/Threads/264988/Export-GridView-to-PDF-Error-Document-has-no-pages/