我使用以下代码将gridview导出为PDF
form1.Controls.Clear();
form1.Controls.Add(GridView1);
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.RenderControl(htw);
string html = "<html><body>" + sw.ToString() + "</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();
这
该文件没有页面。
有任何建议如何修复它?
答案 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/