【发布时间】:2016-07-05 19:21:21
【问题描述】:
我正在开发一个 SharePoint 2013 网站,并且添加了以 PDF 格式保存页面的功能。 PDF 转换由第三方库 SelectPdf 处理。 我设法让一切正常工作(渲染和文件下载),除了我页面上的“PDF 下载”按钮只工作 1 次。意思是,后面代码上的点击事件只会触发一次,无论我点击按钮多少次(请注意,我以 10+ 秒的间隔点击它)。如果我想再次下载 PDF 文件,我必须刷新页面。 为了查明问题,我整理了一个“hello world”示例(见下文):
protected void lnkPdfDownload_Click(object sender, EventArgs e)
{
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=test.pdf");
/************************************ Create PDF File ************************************/
string html = @"<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"">
<html dir=""ltr"" lang=""en-US"">
<body><h1>Hello World</h1></body>
</html>";
HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertHtmlString(html);
byte[] bytes = doc.Save();
Response.OutputStream.Write(bytes, 0, bytes.Length); // ALTERNATIVE: doc.Save(Response.OutputStream);
/************************************ Create PDF File ************************************/
//Response.End(); // This throw a ThreadAbortException, therefore I'm using the alternative code below
Response.Flush();
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
一开始我以为是Response.End()引起了这个问题(通过抛出ThreadAbortException),但我用其他代码替换了它,我仍然遇到同样的问题(现在没有抛出异常)。
我不认为问题出在 SelectPdf 库中:我可以注释掉整个块(在“创建 PDF 文件”cmets 之间),我仍然得到同样的东西(显然没有生成 PDF)。
我注意到,我最多可以成功单击“下载”按钮最多 2 次(这种情况很少见,而且不一致):第三次没有任何反应。
虽然这不是什么大不了的事,但我认为发生了一些我没有看到的问题。原因如下:单击“下载”按钮(并获取我的 PDF 文件)后,我无法在我的 SharePoint 页面中进入编辑模式。 “正在加载”消息一直在旋转,但没有任何反应(同样,除非我刷新页面)。
有人遇到过这个问题吗?我在网上看了,但我找不到任何关于它的东西。 我使用的是 Internet Explorer 11 和 Chrome 51。如果您需要更多信息,请告诉我。谢谢。
【问题讨论】:
标签: asp.net pdf-generation sharepoint-2013