Существует известная проблема с открытием PDF-файла в Internet Explorer (v 6, 7, 8, 9) с помощью Adobe Reader X (версия 10.0. *). Окно браузера загружается с пустым серым экраном (и даже не имеет панели инструментов Reader). Он отлично работает с Firefox, Chrome или Adobe Reader 10.1. *.
Я обнаружил несколько обходных путей. Например, нажатие «Обновить» загрузит документ правильно. Обновление до Adobe Reader 10.1. * Или понижение до 9. * также решает проблему.
Однако для всех этих решений требуется, чтобы пользователь разобрался в этом. Большинство моих пользователей очень смущаются, видя этот серый экран, и в конечном итоге обвиняют файл PDF и обвиняют веб-сайт в том, что он сломан. Честно говоря, пока я не исследовал проблему, я тоже обвинял PDF-файл!
Итак, я пытаюсь найти способ решить эту проблему для своих пользователей.
Я подумал о том, чтобы предоставить ссылку «Загрузить PDF» (которая устанавливает для заголовка Content-Disposition
значение attachment
вместо inline
), но моя компания этого не делает. это решение вообще не нравится, потому что мы действительно хотим, чтобы эти PDF-файлы отображались в браузере.
Кто-нибудь еще сталкивался с этой проблемой?
Какие есть возможные решения или обходные пути?
Я действительно надеюсь на решение, которое будет безупречным для конечного пользователя, потому что я не могу полагаться на них, чтобы знать, как изменить свои настройки Adobe Reader или автоматически установить обновления.
Вот ужасный серый экран:
Изменить: снимок экрана был удален с файлового сервера! Извините!
Изображение представляло собой окно браузера с обычной панелью инструментов, но сплошным серым фоном, без какого-либо пользовательского интерфейса.
Справочная информация:
Хотя я не думаю, что следующая информация связана с моей проблемой, я включу ее для справки:
Это приложение ASP.NET MVC, и в нем Доступен jQuery.
Ссылка на файл PDF имеет target=_blank
, поэтому он открывается в новом окне.
Файл PDF создается на лету, и все заголовки содержимого устанавливаются надлежащим образом. URL-адрес НЕ включает расширение .pdf
, но мы устанавливаем заголовок content-disposition
с допустимым .pdf
именем файла и настройкой inline
.
Изменить: вот исходный код, который я использую для обслуживания файлов PDF.
Во-первых, действие контроллера:
public ActionResult ComplianceCertificate(int id){
byte[] pdfBytes = ComplianceBusiness.GetCertificate(id);
return new PdfResult(pdfBytes, false, "Compliance Certificate {0}.pdf", id);
}
А вот ActionResult (PdfResult
, наследует System.Web.Mvc.FileContentResult
):
using System.Net.Mime;
using System.Web.Mvc;
/// <summary>
/// Returns the proper Response Headers and "Content-Disposition" for a PDF file,
/// and allows you to specify the filename and whether it will be downloaded by the browser.
/// </summary>
public class PdfResult : FileContentResult
{
public ContentDisposition ContentDisposition { get; private set; }
/// <summary>
/// Returns a PDF FileResult.
/// </summary>
/// <param name="pdfFileContents">The data for the PDF file</param>
/// <param name="download">Determines if the file should be shown in the browser or downloaded as a file</param>
/// <param name="filename">The filename that will be shown if the file is downloaded or saved.</param>
/// <param name="filenameArgs">A list of arguments to be formatted into the filename.</param>
/// <returns></returns>
[JetBrains.Annotations.StringFormatMethod("filename")]
public PdfResult(byte[] pdfFileContents, bool download, string filename, params object[] filenameArgs)
: base(pdfFileContents, "application/pdf")
{
// Format the filename:
if (filenameArgs != null && filenameArgs.Length > 0)
{
filename = string.Format(filename, filenameArgs);
}
// Add the filename to the Content-Disposition
ContentDisposition = new ContentDisposition
{
Inline = !download,
FileName = filename,
Size = pdfFileContents.Length,
};
}
protected override void WriteFile(System.Web.HttpResponseBase response)
{
// Add the filename to the Content-Disposition
response.AddHeader("Content-Disposition", ContentDisposition.ToString());
base.WriteFile(response);
}
}
Content-Type
,Content-Disposition
и т. д.). Полный файл тоже транслировался. Поскольку проблема устраняется обновлением или обновлением Reader, само собой разумеется, что файл PDF и транспорт работают нормально. - person Scott Rippey   schedule 29.09.2011PdfResult
, ответственный за возврат результата. - person Scott Rippey   schedule 29.09.2011%PDF
и заканчивается%%EOF
, а длина содержимого также соответствует длине ответа. - person Scott Rippey   schedule 29.09.2011.pdf
, которое создало URL-адрес типаComplianceCertificate.pdf?id=1
. Однако я удалил это и не помню почему. Я подумываю о повторном тестировании этого сценария, потому что, возможно, это может иметь эффект. - person Scott Rippey   schedule 29.09.2011.pdf
, но это не повлияло на эту проблему. - person Scott Rippey   schedule 01.10.2011