我正在尝试用pdf.js从pdf中渲染一个页面。
通常,使用url,我可以这样做:
PDFJS.getDocument("http://www.server.com/file.pdf").then(function getPdfHelloWorld(pdf) {
//
// Fetch the first page
//
pdf.getPage(1).then(function getPageHelloWorld(page) {
var scale = 1.5;
var viewport = page.getViewport(scale);
//
// Prepare canvas using PDF page dimensions
//
var canvas = document.getElementById('the-canvas');
var context = canvas.getContext('2d');
canvas.height = viewport.height;
canvas.width = viewport.width;
//
// Render PDF page into canvas context
//
page.render({canvasContext: context, viewport: viewport});
});
});
但在本例中,我将文件放在base64中,而不是url中:
data:application/pdf;base64,JVBERi0xLjUKJdDUxdgKNSAwIG9iaiA8PAovTGVuZ3RoIDE2NjUgICAgICAKL0ZpbHRlciAvRmxhdGVEZWNvZGUKPj4Kc3RyZWFtCnjarVhLc9s2...
如何做到这一点?
发布于 2018-03-02 01:24:25
直接支持According to the examples base64编码,尽管我自己还没有测试过。获取您的base64字符串(从文件派生或使用任何其他方法加载,POST/GET,websockets等),使用atob将其转换为二进制,然后在PDFJS API上将其解析为getDocument,就像PDFJS.getDocument({data: base64PdfData});
Codetoffel answer对我来说工作得很好。
发布于 2016-03-18 01:50:45
使用接受的答案检查IE并将dataURI转换为UInt8Array;这是PDFJS接受的形式
Ext.isIE ? pdfAsDataUri = me.convertDataURIToBinary(pdfAsDataUri): '';
convertDataURIToBinary: function(dataURI) {
var BASE64_MARKER = ';base64,',
base64Index = dataURI.indexOf(BASE64_MARKER) + BASE64_MARKER.length,
base64 = dataURI.substring(base64Index),
raw = window.atob(base64),
rawLength = raw.length,
array = new Uint8Array(new ArrayBuffer(rawLength));
for (var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
},
https://stackoverflow.com/questions/12092633
复制相似问题