2017-04-19 72 views
3

我正在考慮以模態打開pdf文件。目前正在使用在modal中打開pdf文件可能嗎?

@Html.ActionLink("open file", "Download") 

打開另一個窗口。我想它填充到一個div,以便我可以在模態或覆蓋查看。

我確定jquery解決方案以及目前我的jQuery返回一些字節字符。

function openfile() { 
    $.ajax({ 
     url: '@Url.Action("Download", "mycontroller")', 
     type: "POST", 
     dataType: "application/pdf", 
     success: function (data) { 
      $('#showpdf').html(data); 
     }, 
     error: function (err) { 
      alert(err) 
     } 
    }); 
} 

動作控制器:

public ActionResult Download() 
{ 
    string path = HttpContext.Server.MapPath("/pdf/service_reports/SR26175.pdf"); 
    return File(path, "application/pdf"); 
} 
+0

這是不可能成格,只有另一個窗口或圖像 – 2017-04-19 06:30:52

+0

所以我把'',把PDF中的圖像中,放置在該圖像中DIV? –

+0

哈哈 - 不要。您可以將'PDF'轉換爲'IMG',並將IMG轉換爲'base64'數據格式,然後顯示在''內。 – 2017-04-19 06:36:30

回答

4

另一種方式來做到這一點是從JSON請求通過PDF路徑,然後使用對象的模態DIV中:

<object id="myPdf" type="application/pdf" data="path/file.pdf"></object> 

function openfile() { 
    $.ajax({ 
     url: '@Url.Action("Download", "mycontroller")', 
     type: "POST", 
     dataType: "application/json", 
     success: function (data) { 
      $('#showpdf').html('<object id="myPdf" type="application/pdf" data="' + data.path +'"></object>'); 
     }, 
     error: function (err) { 
      alert(err) 
     } 
    }); 
} 

public ActionResult Download() 
{ 
    string path = HttpContext.Server.MapPath("/pdf/service_reports/SR26175.pdf"); 
    return Json(new {path = path}); 
} 

編輯: 爲了更好的用戶在不同的瀏覽器體驗,也許不支持object標籤,我們可以使用objectembed標籤作爲後備:

<object data="/path/file.pdf" type="application/pdf" width="700px" height="700px"> 
    <embed src="/path/file.pdf"> 
     This browser does not support PDFs. Please download the PDF to view it: <a href="/path/file.pdf">Download PDF</a>.</p> 
    </embed> 
</object> 
+0

無法正常工作。 ajax錯誤返回對象對象。我改變'dataType:「application/pdf」,'dataType:「application/json」,''和public JsonResult Download()'也是一樣的錯誤 –

+0

hardcoding works。但結果與iframe相同。迷你尺寸。 '' –

+0

您的意思是「迷你尺寸」 ? –

1

假設你有一個名爲home控制器。您可以使用這樣的iframe

<div id='yourModel'> 
    <iframe src="/Home/Download"></iframe> 
</div> 

並使用jQuery來顯示/隱藏div。

+0

簡單而有效。但結果不是很好。 pdf太小,無法查看。如果沒有選擇,那麼我會採用新的window.thanks –

+1

你總是可以使用寬度和高度來調整你的iframe的寬度和高度,以滿足您的需求 –

+0

yea.adjust如圖所示。 pdf在中間也很小。 –

0

我想這一點,但在最後我做了這個becacuse我需要證明不同的PDF文件,這些文件存儲在數據庫和共享文件夾中(只是完整的路徑),那麼我必須逐個向用戶展示它,希望它對你有用!

在視圖內部模態的身體。

<div class="row" style="text-align: center;"> 
       <object id="pdfViewer" data="~/Evidence/PdfFile.pdf" type="application/pdf" width="790" height="500"></object> 
       <div style="text-align: center;"> 
        <label id="errorTxt"></label> 
       </div> 
      </div> 

在控制器上的一個jsonresult。

  //HERE I GET THE REAL PATH OF THE FILE 
      string evidence = _manager.GetEvidence(id); 

      //CREATING THE NEW PATH FOR THE FILE 
      var path = Path.Combine(Server.MapPath("~/Evidence/"), "PdfFile.pdf"); 

      //SAVE TEMPORARILY ON EVIDENCE FOLDER INNER THE PROYECT 
      //WITH THE NEW NAME 
      System.IO.File.Copy(evidence, path, true); 

      //AND JUST RETURN A JSON WITH A MESSAGE TO OPEN MODAL 
      return Json("OK",JsonRequestBehavior.AllowGet); 

,並與jQuery的js函數

function ShowExistEvidence(id) { 
    $.ajax({ 
     url: "@Url.Action("GetEvidence","ControllerName")", 
     type: "POST", 
     data: { 
      id: id 
     }, 
     success: function (data) { 
      if (data === 'OK') {      
       $("#modViewEvidencia").modal("show"); 
      } else { 
       $("#errorTxt").text('File not found'); 
       $("#modViewEvidencia").modal("show"); 
      } 

     } 
    }); 
}