2016-08-31 6 views
1

У меня есть элемент pdf, который я возвращаю как элемент base64, поскольку это веб-приложение MVC и файлы, находящиеся на сервере. В настоящее время я использую PDFObject и pdf.js, чтобы попытаться просмотреть этот PDF-файл в браузере. Однако я не могу отобразить PDF-файл, если только не передаю URL-адрес, который не будет работать, когда я помещу это приложение в IIS на сервере.Добавить PDFObject из уже созданного элемента pdf

Итак, есть способ иметь встроенный PDF-файл с помощью src = "{my base 64 string}, а затем обернуть вокруг него PDFObject? Если нет, есть ли способ через PDFObject использовать строку base64 вместо URL?

Кроме того, это в IE 11

UPDATE Вот мой контроллер

public ActionResult GetPDFString(string instrumentType, string booktype, string book, string startpage, string EndPage) 
    { 
     LRS_Settings settings = ctxLRS.LRS_Settings.FirstOrDefault(); 
     string root = settings.ImagePathRoot; 
     string state = settings.State; 
     string county = settings.County; 
     g_filePath = @"\\10.20.170.200\Imaging\GA\075\Daily\" + instrumentType + "\\" + book + "\\"; 
     //g_filePath = @"\\10.15.100.225\sup_court\Imaging\GA\075\Daily\" + instrumentType + "\\" + book + "\\"; 
     byte[] file = imgConv.ConvertTifToPDF(g_filePath, booktype, book, startpage, EndPage); 

     var ms = new MemoryStream(file); 
     var fsResult = new FileStreamResult(ms, "application/pdfContent"); 

     return fsResult; 


    //return imgConv.ConvertTifToPDF(g_filePath, booktype, book, startpage, EndPage); 
} 

Вот мой JQuery

var options = { 
       pdfOpenParams: { 
        navpanes: 1, 
        toolbar: 0, 
        statusbar: 0, 
        pagemode: 'none', 
        pagemode: "none", 
        page: 1, 
        zoom: "page-width", 
        enableHandToolOnLoad: true 
       }, 
       forcePDFJS: true, 
       PDFJS_URL: "/PDF.js/web/viewer.html" 
      } 

      PDFObject.embed("@Url.Action("GetPDFString", "DocumentView", new { instrumentType = ViewBag.instrumentType, BookType = Model.BookType, Book = ViewBag.Book, StartPage = ViewBag.StartPage, EndPage = ViewBag.endPage, style = "height:100%; width100%;" })", "#PDFViewer", options); 

Проблема теперь, вместо того, чтобы показывать PDF внутри #PDFViewer, он пытается загрузить файл. Может кто-то, пожалуйста, помогите мне в финальной части головоломки. Это сводит меня с ума.

+0

Вы не указали браузер, у которого есть проблема. На основе стека, который вы используете, это probabl IE, и он имеет ограничение на размер URL-адресов с кодировкой base64 - большинство PDF-файлов не будут соответствовать этому пределу. – async5

+0

Я могу получить PDF для отображения. Проблема в том, что мне действительно нужна функциональность pdf.js, поэтому я пытаюсь загрузить ее внутри pdf.js – Godrules500

+0

Не уверен, что это поможет ... http://stackoverflow.com/questions/6439634/ view-pdf-as-part-of-the-страница Нужно ли указывать «ActionResult» как возвращаемый тип «FileStreamResult»? – Gwasshoppa

ответ

1

Вы пытались использовать только стандартный html для этого? Действие контроллера

public ActionResult GetAttachment(string instrumentType, string booktype, string book, string startpage, string EndPage) 
{ 
    var fileStream = new FileStream(Server.MapPath("~/Content/files/sample.pdf"), 
            FileMode.Open, 
            FileAccess.Read 
            ); 
    var fsResult = new FileStreamResult(fileStream, "application/pdf"); 
    return fsResult; 
} 

По вашему мнению

<div id="PDFViewer"> 
    <embed src="@Url.Action("GetAttachment", "DocumentView", new { instrumentType = ViewBag.instrumentType, BookType = Model.BookType, Book = ViewBag.Book, StartPage = ViewBag.StartPage, EndPage = ViewBag.endPage })" width="100%" height="100%" type="application/pdf"></embed> 
</div> 

Будет ли это удовлетворить ваши требования, а не с помощью PDFObject?

+0

Это будет не только потому, что я должен использовать PDF.js, либо я мог бы грустно: \ – Godrules500

0

Обязательно установите заголовок для размещения контента на inline или браузер попытается загрузить файл, а не отобразить его в окне просмотра.

См Content-Disposition:What are the differences between "inline" and "attachment"?

Насколько PDFObject по сравнению с простым HTML, для устранения неполадок Я всегда рекомендую попробовать статическую разметку (без JS), чтобы отобразить тот же PDF. Если он там работает, проблема может заключаться в PDFObject (в этом случае обработка PDFObject для строк Base64). Если PDF не отображается должным образом с помощью простой разметки, проблема, вероятно, связана с вашим файлом/Base64.

Вы можете получить копию статической разметки от PDFObject статического генератора разметки: http://pdfobject.com/generator

(я должен добавить, что я не могу говорить с обработкой pdf.js' строк Base64 ...)