2009-06-02 49 views
5

Làm cách nào để (trong bộ điều khiển của tôi) gửi bản pdf mở trong trình duyệt. Tôi đã thử điều này nhưng nó chỉ tải các tập tin (cả hai tức là và firefox) mà không yêu cầu.Mở pdf trong plugin trình duyệt

public ActionResult GetIt() 
{ 
    var filename = @"C:\path\to\pdf\test.pdf"; 
    // Edit start 
    ControllerContext.HttpContext.Response.AddHeader("Content-Disposition", String.Format("inline;filename=\"{0}\"", "test.pdf")); 
    // Edit stop 
    return File(filename, "application/pdf", Server.HtmlEncode(filename)); 
} 

Sau khi thêm sửa đổi ở trên, nó hoạt động bình thường, cảm ơn.

Trả lời

6

Bạn cần đặt tiêu đề HTTP Bố cục nội dung thành nội tuyến để cho biết trình duyệt nên sử dụng plugin PDF nếu có sẵn.

Giống như: Nội dung-Bố trí: nội dòng; filename = test.pdf

Lưu ý rằng bạn không thể buộc sử dụng plugin, đó là quyết định của trình duyệt.

1

Tôi nghĩ điều này phụ thuộc vào cách khách hàng xử lý các tệp PDF. Nếu nó đã được thiết lập để cho Adobe Reader mở các tập tin trong plugin trình duyệt nó sẽ làm điều đó, nhưng có thể bạn đã thiết lập nó để tải về tập tin chứ không phải là mở nó. Trong mọi trường hợp, không có cách nào kiểm soát cách các tệp PDF sẽ được mở trên máy của người dùng.

+0

Không, khách hàng của tôi hoạt động như mong đợi trên các trang web khác. Đôi khi nó tải xuống, đôi khi nó mở trong trình cắm thêm adobe. Nó có thể có một cái gì đó để làm với các tiêu đề gửi đi. – Nifle

+0

Vâng, đó là tiêu đề - xem nhận xét bên dưới. –

2

này (ngoài các tiêu đề khác) hiện các trick cho tôi trong một .net ứng dụng web đơn giản:

Response.AddHeader ("Content-Disposition", String.Format ("inline; filename =" "{0}" "", Tên tệp))

Tôi không quen với MVC, nhưng hy vọng điều này sẽ hữu ích.

+2

Tôi nghĩ bạn cần đặt bố cục thành nội tuyến thay vì tệp đính kèm. Sử dụng tập tin đính kèm buộc nó để lưu tập tin vào đĩa. –

+0

Có, xin lỗi, nhanh chóng sao chép/dán của tôi. Điều đó sẽ mở nó trong một cửa sổ mới, điều này sẽ cố gắng để mở nó trong cùng một cửa sổ: Response.AddHeader ("Content-Disposition", String.Format ("inline; filename =" "{0}" "", FileName)) – ScottE

Các vấn đề liên quan