通过html5

时间:2015-10-02 06:40:47

标签: php ajax html5 pdf

我在向网络输出pdf时遇到问题。 布局是左侧的选择,具有不同的pdf文件名,当用户选择一个时,它通过ajax调用显示在右侧。 我的pdf在网络文件夹中,我不能使用URL,所以我做的是通过php

阅读它
$file = 'C:/Cargos/data.pdf' // trying it out first with filesystem
header('Content-type: application/pdf');
header("Content-Disposition: inline; filename=doc.pdf")
header('Content-Transfer-Encoding: binary');
header('Accept-Ranges: bytes');
readfile($file);

问题是这个输出有点垃圾,这是pdf的二进制原始数据,我还没有找到加载它的方法,这是来自ajax调用的响应:

/创作者(佳能iR-ADV C5235 PDF) / CreationDate(D:20150928152404 + 02'00') /制片人(\ 376 \ 377 \ 000A \ 000d \ 000o \ 000b \ 000e \ 000 \ 000P \ 000S \ 000L \ 000 \ 0001 \ 000. \ 000 \ 2 \ 000e \ 000 \ 000f \ 000o \ 000r \ 000 \ 000C \ 000a \ 000n \ 000o \ 000n \ 000 \ 000) x \TU 8~ Lдt2C W)njH 8 I 2 ) }͌ l Q

它一直在继续,我只是在这里剪掉它。

如果我将pdf移动到一个具有固定名称的临时文件夹并重新加载总是指向该URL的iframe,我已经使它工作了,但我觉得这是一个非常糟糕的解决方案。

有关读取此二进制输入并显示它的任何帮助吗?感谢。

1 个答案:

答案 0 :(得分:0)

我想我可能已经解决了它,阅读pdf,然后将其编码为base64:

$plain = fread(fopen($file,'r'),filesize($file));
$pdfBase64=base64_encode($plain);
echo $pdfBase64;

我的ajax函数的一部分,我修改了src属性并使其从base64编码读取,数据包含base64编码的pdf:

dataType: 'text',
success : function(data) {
$("#myIframe").attr('src', 'data:application/pdf;base64,'+ data);
}

但是,不是最好的方法,但它有效。