encryption - 在客户端解密 PDF 文件并使用 pdf.js 查看

标签 encryption pdf.js cryptojs

我正在处理一个所有 pdf 文件都在 Web 服务器上加密的项目。

使用 XMLHttpRequest 我得到加密的 pdf 文件的内容。然后使用 JavaScript 工具解密文件。毕竟将文件的内容分配给一个javascript变量作为decrypted_file。所有这些都是在客户端完成的。

这是我想要做的;

pdf.js 呈现和查看位于 Web 服务器或相同目录库上的 pdf 文件。

我如何处理 pdf.js 以从 javascript 变量而不是 url 获取内容为“http//yourdomain.com/first-test.pdf 或文件为“first-test.pdf”?

欢迎任何答案,谢谢。

最佳答案

假设您使用的是PDF.js 的viewer.html,从data 打开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>

关于encryption - 在客户端解密 PDF 文件并使用 pdf.js 查看,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28242700/

相关文章:

android - Android AES加密的Node js等效代码

java - 在此特定示例中如何使用模数递减?

firefox - PDF.js 中的 mozdisallowselectionprint 属性有什么作用?

javascript - PDF.js如何创建页面渲染事件?

javascript - 使用 pdf.js 渲染 pdf 时如何重新设置单词样式?

javascript - CryptoJS 使用密码加密 AES 但 PHP 解密需要 key

python - 网络上的PyAudio崩溃

arrays - Powershell字节数组到十六进制

java - 基于 Minecraft 世界的加密。是否可以?

javascript - 如何从 JMeter 调用外部 JavaScript 文件方法