Tôi đặt cùng một số mã hoàn chỉnh và đã có thể tìm ra vấn đề với các giải pháp dưới đây:
var int8View = new Uint8Array(...); //populate int8View with the raw pdf data
PDFJS.getDocument(int8View).then(function(pdf) {
}
Khi sử dụng giải pháp này tôi chạy vào vấn đề mà người dùng khác đã thấy (@MurWade và @ user94154) - thông báo lỗi stream must have data
. Có vẻ như vấn đề nằm trong dòng sau:
var int8View = new Uint8Array(...);
Mảng chứa dữ liệu không được tạo đúng cách vì dữ liệu không có định dạng mong muốn. Do đó, dòng này hoạt động đối với một số trường hợp, nhưng nó có thể không hoạt động trong trường hợp chung.
Tôi đã kết hợp một giải pháp hoàn chỉnh, có vẻ như hoạt động tốt hơn. Nó tải một tập tin PDF, và nó chuyển đổi nó thành một dòng PDF thô. Điều này là có chỉ cho mục đích thử nghiệm, trong một ví dụ thế giới thực, dòng PDF có thể sẽ nhận được trong một thời trang khác nhau. Bạn có thể kiểm tra luồng trong trình gỡ lỗi và nó sẽ hiển thị dưới dạng văn bản thuần túy. Dưới đây là dòng chính của mã để làm mẫu này hoạt động. Thay vào đó chuyển đổi luồng PDF thô thành một mảng, chuyển đổi nó thành dữ liệu.
var docInitParams = { data: pdfraw };
Sau đó tiếp tục tải dữ liệu. Dưới đây là mẫu làm việc hoàn chỉnh về cách tải luồng PDF thô chuẩn và hiển thị nó. Tôi đã sử dụng PDF JS xin chào mẫu thế giới như là một điểm khởi đầu. Xin vui lòng cho tôi biết trong các ý kiến nếu làm rõ là cần thiết về điều này.
'use strict';
PDFJS.getDocument('helloworld.pdf').then(function(pdf) {
pdf.getData().then(function(arrayBuffer) {
var pdfraw = String.fromCharCode.apply(null, arrayBuffer);
var docInitParams = {
data: pdfraw
};
PDFJS.getDocument(docInitParams).then(function(pdfFromRaw) {
pdfFromRaw.getPage(1).then(function(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
var renderContext = {
canvasContext: context,
viewport: viewport
};
page.render(renderContext);
});
});
});
});
Nguồn
2015-08-14 15:11:16
Tốt, chấp nhận câu trả lời này vì câu trả lời có vẻ hoàn chỉnh hơn câu trả lời gốc của tôi! – Swiss
Cảm ơn! Hãy cho tôi biết nếu tôi có thể làm bất cứ điều gì để cải thiện nó. –
@ user94154, giải pháp trên có trả lời được câu hỏi của bạn không? –