EDIT 2PDF в модальном IFRAME делает заготовки в IE
Оказывается, что перемещение объекта тег в Dom является причиной проблемы. Я добавил iframe прямо на страницу, и он отлично работает без каких-либо проблем.
Однако, когда я перемещаю этот iFrame в модальное диалоговое окно (http://www.ericmmartin.com/projects/simplemodal/), PDF исчезает (тег объекта больше не отображается правильно).
Таким образом, похоже, что это уже не вопрос о моем обработчике, а вопрос о том, почему перемещение тега «объект» (или вставки) в DOM (который живет внутри iFrame) приводит к тому, что он «пуст» «.
Кроме того, когда pdf перемещается из модального диалога обратно в исходное положение, он отображается правильно. Поэтому, возможно, я должен больше сосредоточиться на самом модальном диалоге.
Мысли? Спасибо за ваши предложения.
EDIT 1
Так что я сделал некоторые изменения для тестирования.
У меня есть iframe для вывода тега объекта для запросов PDF вместе с временем сервера.
Response.AddHeader("content-type", "text/html");
WebClient client = new WebClient();
Response.Write("<html><head></head><body><h1>"+ DateTime.Now.ToString() + "</h1><object height='100%' width='100%' name='plugin' data='" + Request.Url.ToString() + "&embed=true' type='application/pdf' /></body></html>");
Response.Flush();
Response.Close();
Response.End();
Теперь я получаю страницу с текущим временем правильно, но объект отображается только PDF в первый раз после того, как я публикую страницу ASPX. Так что, похоже, это какая-то проблема кеширования? За исключением того, что объект ничего не загружает (даже не загруженный ранее PDF-файл).
Если щелкнуть правой кнопкой мыши по iframe и обновить страницу, объект загрузится нормально. (То же самое верно, если я использую тег embed).
Оригинал Вопрос
Я знаю, что есть много вопросов по этому ...
- streaming PDF data through an ASPX page
- Server generated PDF not displaying in IFrame on aspx page on some (but not all)PCs
- Displaying a PDF Document in ASP.net page
Но они либо не получили ответа, либо ответ не сработал.
Environment
- .Net 4
- Adobe 9.3.4
- IIS 5.1
- XP sp3
- VS 2010
- IE 8.0.6001.18702
фон
В PDF-я потоковый прихожу из хранилища для хранения, где файлы не имеют какие-либо расширений (это делается для безопасности). Я смотрю на файл в базе данных и поток обратно клиенту через следующий код:
Response.Clear();
WebClient client = new WebClient();
Byte[] buffer = client.DownloadData(sPath);
Response.AddHeader("content-length", buffer.Length.ToString());
Response.AddHeader("content-disposition", "inline;filename=" + fileName);
Response.AddHeader("expires", "0");
Response.AddHeader("Content-Type", "application/pdf"); //this is usually dynamic to support other types (doc, xls, txt, etc.)
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.Flush();
Response.Close();
Response.End();
Это работает для всех типов файлов (DOC, TXT, XLS, HTML), когда используется непосредственно в браузере или в iframe (отображается как модальное всплывающее окно) с исключением из pdf. Они не работают надежно при доступе через iframe, но работают нормально при обращении непосредственно в браузере.
Единственный раз, когда он работает, это первый раз, когда я запрашиваю документ после публикации страницы aspx, обслуживающей эти файлы. Все последующие удары возвращают пустую страницу (даже с новых вкладок или окон браузера). Firefox надежно отображает PDF каждый раз независимо.
Покушение Solutions
Я пробовал различные способы ввода потокового файла:
Response.TransmitFile(sPath);
Response.WriteFile(sPath);
//As well as some others
Я пытался добавить .pdf параметру в конце запроса
http://www.myurl.aspx?File=test.pdf
Я попытался сделать уникальный URL, добавив отметку времени
http://www.myurl.aspx?File=test.pdf&Unique=Friday__September_17__2010_12_02_16_PM
Un-Покушение
Я читал о сжатия IIS, вызывающих проблемы, но это было для новой версии IIS.
Не пытайтесь использовать встроенный тег, поскольку я хотел бы придерживаться iFrame, если это возможно (существующая инфраструктура использует его).
Любая помощь была бы принята с благодарностью!
Спасибо.
Спасибо, но теперь я получаю то же поведение, за исключением того, что файл загружается и открывается в собственном приложении. Это работает только в первый раз после публикации моего сайта. –