【发布时间】:2015-07-15 21:27:52
【问题描述】:
所以在我的应用程序中,用户可以选择将文件上传到<input type = "file" id = "my-file">(HTML 5 文件输入)。我随后可以使用以下 Javascript 获取此文件:
var files = $("#my-file").files;
var file = files[0];
我能否以某种方式将此var file 用作<object> 标签中的data?这是一个对象标签示例,其中通过点击 URL 并联系服务器来获取 PDF。
<object data="data/test.pdf" /*<-- I want the var file here */ type="application/pdf" width="300" height="200">
</object>
我怎样才能做到这一点?请注意,我必须支持 Internet Explorer 11。
更新:
我尝试了一些最终以失败告终的方法。我使用 FileReader 将 PDF 转换为 data-uri,然后在 <object> 标记的 data 属性中使用它,它在 Chrome 中完美呈现,但在 Internet Explorer 中却完全不呈现。
var files = $(e.currentTarget.files);
file = files[0];
var reader = new FileReader();
reader.onloadend = function() {
var data = reader.result;
console.log(data);
$("#content").prepend('<object id="objPdf" data="'+data+'" type="application/pdf"></object>');
};
reader.readAsDataURL(file);
读取器数据的输出如下:
data:application/pdf;base64,JVBERi0xLjQKJe...
Here is the reason PDF's don't work with this approach in Internet Explorer(只有图片)...好伤心:(
更新 2:
尝试pdf.js 取得了一些成功...它在页面上显示 PDF,尽管在 Internet Explorer 11 中它非常慢(单页 5 秒)。它一次也只显示一页,而<object> 标签在一个漂亮的可滚动容器中立即显示所有页面。虽然这是一个极端的后备选项,但我不想走这条路。
关于如何预览用户直接在网页中上传的 PDF,任何人有任何其他想法吗?
【问题讨论】:
-
可以只使用 fileReader API,将数据包装在 $() 中,去掉脚本标签并将正文中的任何内容注入 div 甚至将所有内容放入 iframe
-
你能用一些代码示例详细说明一下吗?我尝试了 data-uri 方法,将其用作 iframe 的源,但 iframe 最终创建了一个嵌入标签,其中不支持 Internet Explorer 中的 PDF。
-
您只需要原始 html,不需要 data-uri。一旦 iFrame 加载或 document.write 整个内容,如果它包含
<html>标签,则使用 html 设置 body 的 innerHTML -
抱歉,我想我遗漏了一些东西。用什么HTML设置body的innerHTML?
<object>标签?为了清楚起见,我想将<object>中的数据与var file中的数据一起使用,我从用户输入中获得,而不是从从服务器抓取的文件中获得。 -
我可能误解了原始问题。我认为这是标题中的 html 文件。这是不正确的吗?
标签: html pdf base64 data-uri object-tag