2015-08-27 3 views
-4

Прежде чем публиковать это сообщение, я просмотрел много сообщений в SO, но мало кто закрыл прямое сообщение о необходимости просмотра часто задаваемых вопросов, немногие дали решения, которые используют iTextSharp или что-то еще. Но никто не решает мою проблему. Моя проблема заключается в том, что у меня есть байт [], и мне нужно создать PDF-файл в новом дочернем окне. Мы просто используем ASP.NET MVC 4 и iTextSharp или аналогичные. Пожалуйста, дайте мне знать, если есть сообщение, которое точно соответствует этому. Я в порядке, чтобы создавать новые частичные видыASP.NET MVC Generate PDF from byte []

У меня есть одно изображение в формате PDF в моем частичном представлении. Когда пользователь щелкает его, мне нужно отобразить PDF в новом окне браузера. Я могу успешно вызвать функцию JavaScript, которая вызывает контроллер, который получает файл с другого сервера. Я даже могу преобразовать файл в массив байтов. Я хочу показать этот массив байтов в формате PDF в новом окне браузера.

В View У меня есть PDF Icon, как показано ниже

<img onclick="ShowCDinPDF('@Url.Action("ShowPDF", "MyController", new {personid= personid})','', '920','500')" /> 

ShowCDinPDF в моей JavaScript, как показано ниже

function ShowCDinPDF(popUpURL, windowProperties, w, h) {  
var childWindow = window.showModelessDialog(popUpURL, "", ""); 
} 

В моем контроллере, я ниже метод ShowPDF

public ActionResult ShowPDF(string personid) 
{ 
    //call service and get data 
    string fileContent = response.FileContent; 
    byte[] data = Convert.FromBase64String(fileContent); 

    **// Here using data I need to show PDF in new window** 

} 

Пожалуйста дайте мне знать, как создать PDF.

UPDATE

Я сделал небольшой прогресс. Теперь мой код выглядит ниже. Откроется новое окно, и я получаю всплывающее окно с сообщением Файл не начинается с '% PDF-'. Я пытался найти решение для этого, но без успеха.

public ActionResult ShowPDF(string personid) 
{ 
    //call service and get data 
    string fileContent = response.FileContent; 
    byte[] data = Convert.FromBase64String(fileContent); 

    using (MemoryStream memoryStream = new MemoryStream()) 
     { 
      Response.ClearHeaders(); 
      Response.ClearContent(); 
      Response.Charset = ""; 
      Response.AddHeader("Content-Type", "application/pdf"); 
      memoryStream.Write(data, 0, data.Length); 
      memoryStream.WriteTo(Response.OutputStream); 
      Response.Flush(); 
      Response.Close(); 
      Response.End(); 
    } 
    return View(); 
} 

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

UPDATE 2

Я пытался много, но не использовать. Поскольку мы приближались к нашему сроку PROD, наша команда решила создать файл PDF на нашем сервере и запустить этот файл в браузере IE.

ПРИМЕЧАНИЕ

Я действительно понятия не имею, почему это вниз проголосовали. Кто-нибудь может отображать файл в формате PDF без сохранения/создания PDF-файла в любом физическом месте. Зачем голосовать?

+1

Does [эта работа] (http://stackoverflow.com/a/20500547/231316)? –

+0

@ Крис: Я попробовал. Это не работает. Он просто открывает пустое окно. – Ziggler

+0

Почему, черт возьми, этот вопрос опускает голос -1. Я искал много форумов и дискуссий в SO, но никто точно не сообщил, какое решение будет и все решения, которые они сказали, я пробовал всех, и ничего не работает ... – Ziggler

ответ

5

Предполагая, что массив у вас есть представляет собой действительный PDF, то в своем действии контроллера вы могли бы служить этому PDF, возвращая правильное ActionResult с правильным заголовком Content-Type ответа:

public ActionResult ShowPDF(string personid) 
{ 
    //call service and get data 
    string fileContent = response.FileContent; 
    byte[] data = Convert.FromBase64String(fileContent); 

    **// Here using data I need to show PDF in new window** 
    return File(data, "application/pdf"); 
} 
+0

Я попытался с файлом FileStreaResult. Я просто получаю пустое окно. – Ziggler