2013-11-25 232 views
2

我正在使用第三方軟件從html文檔呈現PDF。我創建了一個小測試項目,並使用的OnClick事件,我能夠從目錄中讀取html文檔並將其呈現爲PDF格式,沒有任何問題。HttpContext.Current.Response.AddHeader()未設置內容類型標題

的響應創建如下:

HttpContext.Current.Response.Clear(); 
HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf"); 
HttpContext.Current.Response.AddHeader("Content-Disposition", 
    String.Format("{0}; filename=Test.pdf;", "inline")); 
HttpContext.Current.Response.BinaryWrite(pdfBuffer); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 

當我看到Chrome的響應,我可以看到,內容類型被設置正確:

內容處置:內聯;文件名= HtmlToPdf.pdf;

的Content-Length:101482

內容類型:應用程序/ PDF

我已經試過以上轉移到我的當前項目。唯一的區別是,而不是一個我在DevExpress網格視圖內使用自定義按鈕。我最初處理回調面板中的自定義按鈕點擊,但未設置Content-Type。在Chrome中查看響應證明了這一點:

Content-Disposition:inline;文件名= 5.pdf;

內容編碼:gzip

的Content-Length:149015

內容類型:文本/無格式; charset = utf-8

我也試過使用gvDocuments.CustomButtonCallback += new ASPxGridViewCustomButtonCallbackEventHandler(gvDocuments_CustomButtonCallback);事件,但Content-Type仍未設置。

任何人有任何想法,爲什麼我不能在上面的場景中設置Content-Type?

+0

PDF看起來還好嗎?看起來,IIS管道中的某些內容正在應用壓縮,您是否嘗試禁用該功能? –

+0

它甚至不呈現。響應是200 OK,但Content-Type是文本/純文本。我正在本地進行調試,因此使用VS Development Server。是否有任何理由不應該在回調/網格視圖自定義按鈕點擊事件中設置? – MattSull

回答

6

您可以嘗試

HttpResponse response = HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 

response.ContentType = 「應用程序/ PDF格式」;

response.AddHeader("Content-Disposition", "attachment; filename=" + yourFileName + ".pdf"); 
stream.WriteTo(response.OutputStream); 
response.Flush(); 
response.End(); 

希望工程:)

+1

工程就像一個魅力。謝謝! – MattParra

+0

@MattParra歡迎<3 – BMaximus

0
Dim Resp As HttpResponse = HttpContext.Current.Response 
Resp.Headers.Remove("X-Frame-Options") 
Resp.AppendHeader("X-Frame-Options", "SAMEORIGIN") 

通過在頁面加載/ init方法將添加HTTP響應報頭添加上面的行。