2016-08-31 13 views
1

私は、MVC Webアプリケーションでファイルがサーバー上に存在するため、文字列base64要素として返すpdf要素があります。私は現在、PDFObjectとpdf.jsを使用してこのPDFをブラウザで表示しようとしています。しかし、私はPDFを表示することができないようですが、私はサーバー上のIISにこのアプリケーションを置くと動作しませんURLを渡さない限り。既に作成されたPDF要素からPDFObjectを追加

埋め込みpdfをsrc = "{my base 64 string}にしてPDFObjectをラップする方法はありますか?そうでない場合は、PDFObjectを使ってbase64文字列を使用する方法がありますか代わりに、URLの?

また、これはIE 11にここで は私のコントローラここ

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の

0である

UPDATEです

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

を問題のあるブラウザは指定していません。あなたが使用しているスタックに基づいて、IEの可能性があり、base64でエンコードされたURLサイズに制限があります。ほとんどのPDFはこの制限に適合しません。 – async5

+0

私はPDFを表示することができます。問題は、私は本当にpdf.jsの機能が必要なので、pdf.jsの中にロードしようとしています。 – Godrules500

+0

これが役立つかどうかわかりません... http://stackoverflow.com/questions/6439634/ view-pdf-as-the-pageの一部として '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に設定してください。ブラウザがファイルをビューポートでレンダリングするのではなく、ダウンロードしようとします。

は、トラブルシューティングのために、私はいつも同じPDFを表示するには、静的なマークアップ(ノーJS)をしようとお勧めします、限りプレーンHTML対PDFObjectとしてContent-Disposition:What are the differences between "inline" and "attachment"?

を参照してください。そこで動作する場合、問題はPDFObject(この場合、PDFObjectのBase64文字列の処理)にある可能性があります。 PDFがプレーンなマークアップで正しくレンダリングされない場合は、ファイル/ Base64に問題があると考えられます。

あなたはPDFObject静的なマークアップジェネレータから静的なマークアップのコピーをつかむことができます。http://pdfobject.com/generator

(私はBase64で文字列のPDF.js'扱いに話すことができないことを追加する必要があります...)

関連する問題