PDF.js:如何在新选项卡中显示PDF?

时间:2019-08-31 08:01:16

标签: javascript tcpdf pdf.js

作为序言,我必须主持一个事实,即我在Web开发环境中的知识有限。实际上,我的问题对某些人来说似乎微不足道。

通过Ajax调用,我通过TCPDF生成了PDF,并在变量中进行了检索。

我将其转换为base64并将其放置在Uint8Array中。

    function create_pdf() {
    var jsonOptions = jQuery("#Form").serializeArray();

    $.ajax({
        url: 'tcpdf/samples/samples_002c.php',
        type: 'POST',
        cache: false,
        data: jsonOptions
    })
        .done(function(data) {
            var pdfData = convertDataURIToBinary('data:application/pdf;base64,' + data);
            // View PDF
            // .....
    })
        .fail(function() {
            alert('Faild');
    });

    return false;
}

function convertDataURIToBinary(dataURI) {
    var BASE64_MARKER = ';base64,';
    var base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length;
    var base64 = dataURI.substring(base64Index);
    var raw = window.atob(base64);
    var rawLength = raw.length;
    var array = new Uint8Array(new ArrayBuffer(rawLength));

    for(i = 0; i < rawLength; i++) {
        array[i] = raw.charCodeAt(i);
    }
    return array;
}

我想通过PDF.js查看器在新计算机上将其显示在用户计算机上(目的是避免将PDF保存在服务器上的文件中)。

我一直在等待几天才能完成这部分工作,但没有成功。

您是否有研究线索可以使我在该项目中取得成功?

预先感谢您的建议。

2 个答案:

答案 0 :(得分:0)

// ADD OPEN WHIT WINDOW JAVASCRIPT
var pdfData = convertDataURIToBinary('data:application/pdf;base64,' + data);
window.open(pdfData);

答案 1 :(得分:0)

一种解决方案是不使用PDF.js,而依靠具有open功能(如@MarcoDeveloper建议)的浏览器对PDF的处理。另一种解决方案是准备单独的页面,以使用PDF.js显示文件。

为此,您需要准备简单的html页面。我建议使用帖子,但是如果您的页面在同一域中,则也可以直接发送数据。

preview.html

window.addEventListener("message", receiveMessage, false);
function receiveMessage(e) {
   if (event.origin === window.location.origin) {
       PDFJS.getDocument({ data: convertDataURIToBinary(e.data) }).then(function() {
       });
   }
}

index.html

var win = window.open('preview.html');
win.postMessage(dataURI, '*');

发送base64数据并在preview.html中解码可能是个好主意。

要直接发送pdf数据,您可以使用(仅在同一域中):

var win = window.open('preview.html');
win.PDFJS.getDocument({ data: binary_data });

文件preview.html仅需要包含PDF.js的JS文件,它应该可以工作。