对于传输非常机密的文档的 Intranet 应用程序 AES256 加密,pdf 数据源以 base64 字符串的形式提供(鉴于它们首先被解密)。出于测试目的,我从服务器读取了pdfhttp://ddlab.de/stackoverflow/pdf.js/1/test.pdf
这是索引.html:http://ddlab.de/stackoverflow/pdf.js/1/index.html
在查看器中.js我可以设置
var DEFAULT_URL = 'test.pdf'; // giving a local or crossdomain path to pdf
我的想法是,将 base64 字符串设置为默认源,例如
var DEFAULT_URL = 'data:application/pdf;base64,JVBERi0...GCg=='; // shortened
(在FF中也有效)
为此,我编写了一个小的 php 脚本,它提供了 base64 编码的字符串。http://ddlab.de/stackoverflow/pdf.js/1/readfile.php
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
ob_start('ob_gzhandler');
header('Content-Type: text/javascript; charset=utf-8');
$file = 'test.pdf';
$mime = mime_content_type ($file);
$data = base64_encode(file_get_contents($file));
$url = 'data:' . $mime . ';base64,' . $data;
echo '/*read pdf and output the base64 code*/' . "nn";
echo 'var pdf_src = "' . $url . '";';
ob_end_flush();
?>
这被添加到 HEAD 中作为
<script type="text/javascript" src="readfile.php"></script>
所以,终于我可以使用
var DEFAULT_URL = pdf_src; // retrieving the base64-string as URL
在查看器中.js
这在FF中效果很好,但是在Safari和Chrome中呢?不。
有人可以帮助我解决这个问题吗?
PDFView.open 调用接受类型化数组。从 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding 复制"Base64/二进制数据/UTF-8 字符串实用程序",并使用 base64DecToArr 函数解码 base64 内容。您已经在修改查看器,因此添加几个功能应该不是问题。