2017-06-08 2 views
0

angezeigt werden. Die PDF-Datei, die ich mit Dev Express erstellt habe, und mit Antwortobjekt an den Browser zurücksendet. Ich muss die Datei im neuen Browserfenster öffnen.Die PDF-Datei im Browser kann nicht mit dem Antwortobjekt

Für die Skript Client-Seite des Code-Methode von Web-Service zu nennen:

window.open(dashboardService + "PrintableJobOrderDocument?JobOrderNo=" + jobOrderNo, "Job Order Documnet", "scrollbars=0,fullscreen=1", false); 

Für den WCF-Dienst ist die Methode:

[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); 
     } 
    } 
} 

Das Antwortobjekt zeigt eine anderes Verhalten an verschiedenem Browser. Für:
Chrome: Datei einige Zeit geöffnet und einige Zeit nicht in der Lage, die Datei zu öffnen.
Mozilla: Datei nie geöffnet und geben Sie mir Fehler:

C:\Users\tach\AppData\Local\Temp\nJ0oODH4.pdf.part could not be saved, because the source file could not be read.

Try again later, or contact the server administrator.


Response-Header in Mozilla:

Cache-Control: private
Transfer-Encoding: chunked Content-Type:
application/pdf Server: Microsoft-IIS/10.0
Content-Disposition: Job Order No. ad_0003.pdf
X-AspNet-Version: 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 GMT


Microsoft Edge: Datei nie geöffnet.


Ich habe alle Browser überprüft Netzwerk Registerkarte und in der Kopfzeile Antwortdatei, Dateityp, Dateiname verfügbar, aber nicht in der Lage, die Datei zu öffnen.

Update:

unten AppHeader Werke für Chrome aber nicht für Firefox oder Edge.

response.AppendHeader("content-disposition", "inline; \"Job Order No " + JobOrderNo + ".pdf\""); 

und

response.AppendHeader("content-disposition", "Job Order No. " + JobOrderNo + ".pdf"); 

Antwort

0

Um in allen Browsern zu unterstützen, habe ich gerade meinen Code von der Anzeige der Datei zum Herunterladen der Datei geändert und anstelle von AppendHeader verwende ich AddHeader, um die Antwortkopfeigenschaften festzulegen. Wie nach MSDN:

HttpResponse.AddHeader Method (String, String) - Adds an HTTP header to the output stream. AddHeader is provided for compatibility with earlier versions of ASP.

HttpResponse response = HttpContext.Current.Response; 
response.Clear(); 
response.ClearHeaders(); 
response.AddHeader("Content-Disposition", "attachment;filename=" + "Job Order No " + JobOrderNo + ".pdf"); 
response.AddHeader("Content-Length", PDFStream.Length.ToString()); 
response.ContentType = "application/pdf"; 
response.Flush(); 
response.BinaryWrite(PDFStream.ToArray()); 
response.End(); 

denke ich, das ist mein Problem gelöst, weil es die Kompatibilität mit früheren Versionen von ASP zur Verfügung stellen.

1

Wechsel:

response.AppendHeader("content-disposition", "Job Order No. " + JobOrderNo + ".pdf"); 

zu:

response.AppendHeader("Content-Disposition", "inline; \"Job Order No " + JobOrderNo + ".pdf\""); 

Does diese Hilfe?

+0

gerade in Chrom gearbeitet, aber Firefox haben jetzt ein anderes Problem. –

+0

siehe dieses Bild http: //i.stack.imgur.com/9asCl.png –

+0

Ich verstehe nicht, was dieses Bild ist - Sie müssen es ein bisschen mehr erklären. – mjwills

Verwandte Themen