2013-11-25 1 views
2

Я использую стороннее программное обеспечение для рендеринга PDF-документов из html-документов. Я создал небольшой тестовый проект и использовал событие OnClick . Я смог прочитать html-документ из каталога и без проблем представить его как PDF.HttpContext.Current.Response.AddHeader() не задает заголовок Content-Type

Ответ создается следующим образом:

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, я могу видеть, что Content-Type создается правильно:

Content-Disposition: встроенный ; имя файла = HtmlToPdf.pdf;

Content-Length: 101482

Content-Type: применение/PDF

Я пытался передать выше моего нынешнего проекта. Единственная разница заключается в том, что вместо одного я использую пользовательскую кнопку в виде сетки DevExpress. I Изначально обработал пользовательский щелчок на панели обратного вызова, но Content-Type не был установлен. Просмотр ответа в Chrome доказал это:

Содержание-Распорка: inline; имя файла = 5.pdf;

Content-Encoding: GZIP

Content-Length: 149015

Content-Type: Текст/равнину; charset = utf-8

Я также пробовал использовать событие gvDocuments.CustomButtonCallback += new ASPxGridViewCustomButtonCallbackEventHandler(gvDocuments_CustomButtonCallback);, но Content-Type по-прежнему не установлен.

У кого-нибудь есть идеи относительно того, почему я не могу установить Content-Type в вышеуказанном сценарии?

+0

Сохраняет ли PDF все в порядке? Похоже, что что-то в конвейере IIS применяет сжатие, вы пытались отключить это? –

+0

Он даже не выводит. Ответ - 200 OK, но Content-Type - текстовый/обычный. Я отлаживаю локально, так что это с VS Development Server. Будет ли какая-либо причина, почему она не должна устанавливаться в пользовательском событии click callback/grid view? – 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") 

Добавив эти строки в методе загрузки страницы/инициализации будет добавить заголовок ответа HTTP.

Смежные вопросы