在客户端解密 PDF 文件并使用 pdf.js 查看
Decrypt PDF file on client side and view with pdf.js
我正在做一个所有 pdf 文件都在 Web 服务器上加密的项目。
通过 XMLHttpRequest,我得到了加密的 pdf 文件的内容。然后使用 JavaScript 工具解密文件。毕竟将文件的内容分配给 javascript 变量作为 decrypted_file。所有这些都在客户端完成。
这是我想要做的;
pdf.js 呈现和查看位于 Web 服务器或相同目录库中的 pdf 文件。
我如何处理 pdf.js 以从 javascript 变量而不是 url 获取内容,因为 "http//yourdomain.com/first-test.pdf or file as "first-test.pdf"?
欢迎回答,谢谢
假设您正在使用 PDF.js 的 viewer.html,从数据打开 PDF 文件就像使用正确的参数调用 PDFViewerApplication.open
一样简单。
示例:类型化数组 (Uint8Array / ArrayBuffer / ..)
// in viewer.html
var data = new Uint8Array( /* ... data ... */ );
PDFViewerApplication.open(data);
示例:Blob/文件对象
// in viewer.html
var data = new Blob([ '%PDF....'] , {type: 'application/pdf'});
var url = URL.createObjectURL(data);
PDFViewerApplication.open(url);
示例:数据URL(如果浏览器支持)
var url = 'data:application/pdf;base64,....';
PDFViewerApplication.open(url);
示例:数据 URL(任何浏览器)
这包括两个步骤:解码base64数据-URL,然后将二进制字符串转换为Uint8Array
.
var url = 'data:application/pdf;base64,....';
var data = url.split(';base64,')[1];
// Decode base64
var binaryString = atob(data);
// Convert binary string to Uint8Array
data = new Uint8Array(binaryString.length);
for (var i = 0, ii = binaryString.length; i < ii; ++i) {
data[i] = binaryString.charCodeAt(i);
}
PDFViewerApplication.open(data);
示例:在框架中使用 PDF.js
<iframe src="viewer.html" id="pdfjsframe"></iframe>
<script>
var pdfjsframe = document.getElementById('pdfjsframe');
// At the very least, wait until the frame is ready, e.g via onload.
pdfjsframe.onload = function() {
var data = ... data here or elsewhere ... ;
pdfjsframe.contentWindow.PDFViewerApplication.open(data);
};
</script>
我正在做一个所有 pdf 文件都在 Web 服务器上加密的项目。
通过 XMLHttpRequest,我得到了加密的 pdf 文件的内容。然后使用 JavaScript 工具解密文件。毕竟将文件的内容分配给 javascript 变量作为 decrypted_file。所有这些都在客户端完成。
这是我想要做的;
pdf.js 呈现和查看位于 Web 服务器或相同目录库中的 pdf 文件。
我如何处理 pdf.js 以从 javascript 变量而不是 url 获取内容,因为 "http//yourdomain.com/first-test.pdf or file as "first-test.pdf"?
欢迎回答,谢谢
假设您正在使用 PDF.js 的 viewer.html,从数据打开 PDF 文件就像使用正确的参数调用 PDFViewerApplication.open
一样简单。
示例:类型化数组 (Uint8Array / ArrayBuffer / ..)
// in viewer.html
var data = new Uint8Array( /* ... data ... */ );
PDFViewerApplication.open(data);
示例:Blob/文件对象
// in viewer.html
var data = new Blob([ '%PDF....'] , {type: 'application/pdf'});
var url = URL.createObjectURL(data);
PDFViewerApplication.open(url);
示例:数据URL(如果浏览器支持)
var url = 'data:application/pdf;base64,....';
PDFViewerApplication.open(url);
示例:数据 URL(任何浏览器)
这包括两个步骤:解码base64数据-URL,然后将二进制字符串转换为Uint8Array
.
var url = 'data:application/pdf;base64,....';
var data = url.split(';base64,')[1];
// Decode base64
var binaryString = atob(data);
// Convert binary string to Uint8Array
data = new Uint8Array(binaryString.length);
for (var i = 0, ii = binaryString.length; i < ii; ++i) {
data[i] = binaryString.charCodeAt(i);
}
PDFViewerApplication.open(data);
示例:在框架中使用 PDF.js
<iframe src="viewer.html" id="pdfjsframe"></iframe>
<script>
var pdfjsframe = document.getElementById('pdfjsframe');
// At the very least, wait until the frame is ready, e.g via onload.
pdfjsframe.onload = function() {
var data = ... data here or elsewhere ... ;
pdfjsframe.contentWindow.PDFViewerApplication.open(data);
};
</script>