2015-09-09 2 views
0

Я создаю динамический .pdf-файл, используя asp.net, в некоторых браузерах, например, firefox отображает PDF как ожидалось, но в IE & Safari, дающий «Сохранить как», скорее чем отображать его в браузере. Я использовал iFrame для того же самого. Также, чтобы отобразить pdf-файл, он должен указать, что клиент должен иметь Adobe Reader или какой-либо плагин для отображения pdf?PDF не отображается во всех браузерах с использованием Asp.net

protected void bttnpdf_Click(object sender, EventArgs e) 
    { 
     string FilePath = Server.MapPath("sample.pdf"); 
     WebClient User = new WebClient(); 
     Byte[] FileBuffer = User.DownloadData(FilePath); 
     if (FileBuffer != null) 
     { 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-length", FileBuffer.Length.ToString()); 
     Response.BinaryWrite(FileBuffer); 
    } 
} 

Любая помощь будет оценена по достоинству.

Заранее спасибо

+1

Это зависит от плагина adobe, если вы не установили этот плагин для I.E. или Safari, тогда он попросит сохранить файл, а затем открыть файл pdf –

+0

Спасибо за быстрый ответ. Также вы можете порекомендовать стандартный способ рендеринга pdf во всех браузерах, учитывая как сценарии, то есть клиент, у которого установлен/не установлен плагин adobe. – Dev

+0

Как вы упомянули, что вы используете iframe, поэтому, если iframe сможет найти плагин, он отобразит pdf и покажет, что файл PDF еще не будет отображать и передать весь файл pdf в браузер, поэтому браузер не сможет понять, что делать с этим PDF-файлом и по его действию по умолчанию он попросит сохранить файл –

ответ

0

в ASPX файле:

<div> 
    <iframe id="myFrame" runat="server" style="width:600px; height:500px;" frameborder="0"></iframe> 
</div> 

в CS файле:

myFrame.src="yourPDFPath" 

, например

myFrame.Src = "http://docs.google.com/gview?url=http://path.com/to/your/pdf.pdf&embedded=true"; 
+0

Pranav все мои pdf-файлы динамически генерируются и хранятся на нашем сервере. Так что мне нужно загрузить мой pdf-документ на сервер google и затем сопоставить URL-адрес iFrame? Thanx заранее – Dev

+0

нет, вам нужно пройти только путь, где вы сохранили свой файл PDF. например, , если вы сохранили в моей папке/mypdf.pdf, затем myFrame.Src = Server.MapPath ("myfolder/mypdf.pdf"); –

0

Когда я сделал это, я также добавлен диспетчер контента sition. В коде (не может делиться всем, как с производственным кодом) есть функция, которая находит запись в базе данных и возвращает FileHandle.

Функция возвращает дескриптор файла:

FileStream stream = new FileStream(filePath, FileMode.Open); 

var fileHandle = new FileHandle 
{ 
    FileStream = stream, 
    ContentType = "application/pdf", 
    Filename = fileDownloadName 
}; 

, где Filepath путь к файлу (например, Server.MapPath ("sample.pdf")). В действии контроллера у меня есть:

var cd = new System.Net.Mime.ContentDisposition 
{ 
    // for example foo.bak 
    FileName = fileHandle.Filename, 

    // always prompt the user for downloading, set to true if you want 
    // the browser to try to show the file inline 
    Inline = true, 
}; 
Response.AppendHeader("Content-Disposition", cd.ToString()); 
return File(fileHandle.FileStream, fileHandle.ContentType); 
+0

Спасибо, Найджел. Не могли бы вы обновить приведенный выше код с помощью файла pdf? например, http: //mydomain/pdf/sample.pdf? Также будет ли отображаемый выше код отображаться во всех браузерах независимо от клиента, у которого есть Adobe Reader/какой-либо PDF-ридер? – Dev

+0

Я немного уточнил ответ. Это было протестировано в IE, Chrome и Fox. Файлы PDF, которые мы имеем, затем визуализируются встроенными в браузере - либо напрямую идут по ссылке, либо через iframe. (Примечание: fileDownloadName - это имя файла (без пути)) –

0

Добавить ниже линии до линии Response.BinaryWrite(FileBuffer);.

Response.AddHeader("Content-Disposition", "inline");

добавить заголовок réponse, так что PDF-файлы будут открыты в самом браузере.

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