【发布时间】:2017-06-08 09:55:20
【问题描述】:
我使用 Dev Express 生成的 pdf 文件并使用响应对象将其返回给浏览器。我需要在浏览器新窗口中打开文件。
客户端脚本调用web服务方法的代码:
window.open(dashboardService + "PrintableJobOrderDocument?JobOrderNo=" + jobOrderNo, "Job Order Documnet", "scrollbars=0,fullscreen=1", false);
对于 WCF 服务,方法是:
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json)]
public void PrintableJobOrderDocument(string JobOrderNo)
{
if (!string.IsNullOrEmpty(JobOrderNo))
{
CommonServiceClient commonService = null;
try
{
commonService = new CommonServiceClient();
var data = commonService.JobOrderPDFDoc(JobOrderNo);
if (data.Count() != 0)
{
//Excel file as a memory stream
var excel = JobOrderTemplate(data);//this method will return the workbook object.
MemoryStream ExcelStream = new MemoryStream();
excel.SaveDocument(ExcelStream, DocumentFormat.Xlsx);
ExcelStream.Position = 0;
//Excel file to a pdf memory stream
Workbook workbook = new Workbook();
workbook.LoadDocument(ExcelStream, DocumentFormat.Xlsx);
MemoryStream PDFStream = new MemoryStream();
workbook.ExportToPdf(PDFStream);
PDFStream.Seek(0, SeekOrigin.Begin);
HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.BufferOutput = true;
response.ContentType = "application/pdf";
response.AppendHeader("content-disposition", "Job Order No. " + JobOrderNo + ".pdf");
byte[] fileToDownload = PDFStream.ToArray();
response.BinaryWrite(fileToDownload);
response.Flush();
response.End();
}
}
catch (Exception ex)
{
GeneralTask.AddMessageLog(MessageLogApplication.Portal, MessageLogModules.Common, MessageLogType.Error, MethodBase.GetCurrentMethod().Name, ex);
}
finally
{
ServiceHelper.CloseService(commonService);
}
}
}
响应对象对不同的浏览器显示不同的行为。
像:
Chrome:文件有时打开,有时无法打开文件。
Mozilla:文件从未打开并给我错误:
C:\Users\tach\AppData\Local\Temp\nJ0oODH4.pdf.part 无法保存, 因为无法读取源文件。
稍后再试,或联系服务器管理员。
Mozilla 中的响应标头:
缓存控制:私有
传输编码:分块内容类型:
应用程序/pdf 服务器:Microsoft-IIS/10.0
内容处置:工作 订单号 ad_0003.pdf
X-AspNet 版本:4.0.30319 X-SourceFiles: =?UTF-8?B?RzpcRm1zMlRmc1xGTVNPZmZpY2UtVjEwNi1UcnVua1xGTVNQb3J0YWxcRGFzaGJvYXJkU2VydmljZS5zdmNcUHJpbnRhYmxlSm9iT3JkZXJEb2N1bWVudA==?= X-Powered-By: ASP.NET Access-Control-Allow-Origin: * Date: Thu, 08 Jun 格林威治标准时间 2017 年 09:48:00
Microsoft Edge:文件永远不会打开。
我检查了所有浏览器的网络选项卡和头响应文件,文件类型,文件名可用但无法打开文件。
更新:
下面给出的 AppHeader 适用于 Chrome 但不适用于 Firefox 或 Edge。
response.AppendHeader("content-disposition", "inline; \"Job Order No " + JobOrderNo + ".pdf\"");
和
response.AppendHeader("content-disposition", "Job Order No. " + JobOrderNo + ".pdf");
【问题讨论】:
标签: c# asp.net wcf devexpress httpresponse