2015-11-18 24 views
7

Tôi đã xem rất nhiều bài đăng SO khác nhau về điều này ngay hôm nay.Hiển thị các tệp PDF tức là bên trong trình duyệt

Tôi có một ứng dụng cần hiển thị tài liệu PDF bên trong trình duyệt. Ứng dụng này cũng cần chạy trong IE (11+).

Đây là điều: một iframe với một src hoạt động tốt. Một cái gì đó như:

<iframe src="www.myurl.com/thedocument"></iframe> 

Tuy nhiên, www.myurl.com/thedocument hiện được bảo vệ bởi oAuth. Điều này có nghĩa là tôi cần phải yêu cầu www.myurl.com/thedocument bằng thông tin đăng nhập ủy quyền thích hợp.

Điều này có nghĩa là (tôi nghĩ), rằng tôi phải yêu cầu www.myurl.com/thedocument qua ajax. Yêu cầu ajax trả về base64 hoặc một byte [] chứa tài liệu.

IE không hỗ trợ URI dữ liệu để hiển thị tệp PDF, vì vậy tôi không thể chỉ chia phản hồi từ yêu cầu ajax của tôi vào khung nội tuyến.

Vì vậy, bây giờ tôi đang bị kẹt.

Bất kỳ ý tưởng nào?

Cảm ơn

Trả lời

3

Một lựa chọn sẽ được sử dụng PDF.js, thư viện javascript để render các file PDF thành một canvas HTML5 với support for IE10+. Thư viện hỗ trợ tải dữ liệu PDF từ TypedArray (ví dụ: Uint8Array), có thể được tạo ra từ kết quả của yêu cầu ajax.

Tôi đã chuẩn bị một ví dụ ngắn here hiển thị một trang PDF được lưu trữ trong mã nhị phân được mã hóa base64. Để tránh thực hiện việc chuyển đổi base64, một TypedArray cũng có thể được lấy trực tiếp từ một phản ứng XMLHttpRequest:

function reqListener() { 
    var byteArray = new Uint8Array(this.response); 
    PDFJS.getDocument(byteArray).then(function(page) { 
     // .... 
    }); 
} 

var req = new XMLHttpRequest(); 
req.addEventListener("load", reqListener); 
req.responseType = "arraybuffer"; 
req.open("GET", "http://www.example.com/example.pdf"); 
req.send(); 

Để hỗ trợ các tính năng mà bạn mong đợi ở một trình xem pdf mẹ đẻ (in, vv) thư viện bao gồm một example viewer rằng bạn có thể thích ứng với mục đích của riêng bạn.

+0

PDF.js là một thư viện tuyệt vời. Tuy nhiên, hiển thị TẤT CẢ các trang của pdf cùng một lúc là một cái gì đó thư viện không làm rất tốt (nơi như vẽ một uri dữ liệu trong chrome cho thấy tất cả các trang trong pdf - và nó làm nó rất tốt). Đây là một gợi ý tuyệt vời. Thật không may, nó không có tính năng cụ thể mà tôi đang tìm kiếm. – Jeff

+1

Không sao cả. Nó sẽ không phải là cách thực hiện nhất để thể hiện chúng, nhưng đối với các tài liệu văn bản nặng thì có vẻ như nó không quá tệ. Nếu bạn chưa có, bạn có thể thử mở các bản pdf của mình trong [demo] (https://mozilla.github.io/pdf.js/web/viewer.html) để xem liệu nó có bị xước hay không. – tmw

+3

@Jeff Với IE, đó là PDF.js hoặc iframe. Theo nghiên cứu của tôi, với tình huống của bạn, bạn không thể sử dụng iframe, vì IE không hỗ trợ iframe dữ liệu uri, vì vậy bạn không có nhiều lựa chọn ở đây. – Sheepy

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