gpt4 book ai didi

javascript - Pdf.js:使用 base64 文件源而不是 url 呈现 pdf 文件

转载 作者:IT王子 更新时间:2023-10-29 02:53:23 27 4
gpt4 key购买 nike

我正在尝试使用 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...

如何做到这一点?

最佳答案

来自源代码 http://mozilla.github.com/pdf.js/build/pdf.js

/**
* This is the main entry point for loading a PDF and interacting with it.
* NOTE: If a URL is used to fetch the PDF data a standard XMLHttpRequest(XHR)
* is used, which means it must follow the same origin rules that any XHR does
* e.g. No cross domain requests without CORS.
*
* @param {string|TypedAray|object} source Can be an url to where a PDF is
* located, a typed array (Uint8Array) already populated with data or
* and parameter object with the following possible fields:
* - url - The URL of the PDF.
* - data - A typed array with PDF data.
* - httpHeaders - Basic authentication headers.
* - password - For decrypting password-protected PDFs.
*
* @return {Promise} A promise that is resolved with {PDFDocumentProxy} object.
*/

因此,标准的 XMLHttpRequest(XHR) 用于检索文档。问题在于 XMLHttpRequests 不支持数据:uris(例如 data:application/pdf;base64,JVBERi0xLjUK...)。

但是有可能将类型化的 Javascript 数组传递给函数。您唯一需要做的就是将 base64 字符串转换为 Uint8Array。您可以使用位于 https://gist.github.com/1032746 的此功能

var BASE64_MARKER = ';base64,';

function convertDataURIToBinary(dataURI) {
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(var i = 0; i < rawLength; i++) {
array[i] = raw.charCodeAt(i);
}
return array;
}

tl;dr

var pdfAsDataUri = "data:application/pdf;base64,JVBERi0xLjUK..."; // shortened
var pdfAsArray = convertDataURIToBinary(pdfAsDataUri);
PDFJS.getDocument(pdfAsArray)

关于javascript - Pdf.js:使用 base64 文件源而不是 url 呈现 pdf 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12092633/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com