【问题标题】:display pdf in a network folder through ajax in html5通过html5中的ajax在网络文件夹中显示pdf
【发布时间】:2015-10-02 06:40:46
【问题描述】:

我无法将 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调用的响应:

/Creator (Canon iR-ADV C5235 PDF) /创建日期 (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,我已经成功了,但我觉得这是一个非常糟糕的解决方案。

对读取这个二进制输入并显示它有什么帮助吗?谢谢。

【问题讨论】:

  • 你试过删除header('Content-Transfer-Encoding: binary');吗?
  • 是的,我试过了,输出还是一样,我猜应该是这样的,但是没有办法显示为pdf
  • 不能将 pdf 文件复制到网络服务器文件夹并提供 ajax 的直接链接?
  • 将pdf复制到临时文件夹并重新加载iframe确实有效,但是每次用户从执行操作的列表中选择一个pdf时,即使它有效,我认为这是一个糟糕的解决方案,增加了很多开销/负载/处理。

标签: php ajax html pdf


【解决方案1】:

我想我可能已经解决了,阅读 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);
}

尽管如此,这不是最好的方法,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2011-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多