pdf.js - base64字符串而不是URL? (FF适用,Safari和Chrome不)

时间:2013-12-31 16:16:44

标签: base64 aes pdf.js

对于内部网应用程序,其中非常机密的文档被传输AES256加密,pdf数据源可用作base64字符串(考虑到它们首先被解密)。出于测试目的,我从服务器上读取了pdf http://ddlab.de/stackoverflow/pdf.js/1/test.pdf

这是index.html: http://ddlab.de/stackoverflow/pdf.js/1/index.html

在viewer.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*/' . "\n\n";
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
在viewer.js中

这在FF中非常棒,但在Safari和Chrome中?不。

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

PDFView.open调用接受类型化数组。从https://developer.mozilla.org/en-US/docs/Web/JavaScript/Base64_encoding_and_decoding复制“Base64 /二进制数据/ UTF-8字符串实用程序”,并使用base64DecToArr函数解码base64内容。您已经在修改查看器,因此添加几个函数不会有问题。