我已经尝试过你的代码,它返回 PDF 内容为文字字符串 (in event.data
)。您无法获取字符串数据的 URL(本地或非本地),除非您首先将其上传回某个地方(例如,通过 XHR 上传到您自己的服务器)。除此之外,我希望这个答案有所帮助。
下面的方法使用数据 URI 方案 http://en.wikipedia.org/wiki/Data_URI_scheme渲染由字符串表示的 PDF(例如event.data
在你的情况下)。它与 Chrome 和 Firefox 配合得很好。不幸的是,对于 IE10,我收到 Adobe Acrobat Reader 插件(IE10/Win8 64 位,带最新更新和最新 Adobe Acrobat Reader)的“访问被拒绝”消息。因此,对于跨浏览器解决方案,您最好的选择可能是某种基于 HTML5 的 PDF 渲染器,例如PDF.js https://mozillalabs.com/en-US/pdfjs/.
Fiddle: http://jsfiddle.net/Noseratio/nmTJ9/1/ http://jsfiddle.net/Noseratio/nmTJ9/1/
HTML/JavaScript:
<!DOCTYPE html>
<head>
<title></title>
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript">
window.runit = function() {
// var pdfText = event.data;
var pdfText = pdfSource.text;
var pdfTextEncoded = btoa(unescape(encodeURIComponent(pdfText)));
textContainer.innerText = pdfText;
pdfContainer.innerHTML =
'<object id="pdf"' +
'width="400" height="240" type="application/pdf"' +
'data="data:application/pdf;base64,' + pdfTextEncoded + '">' +
'<span>PDF plugin is not available.</span>' +
'</object>';
}
</script>
</head>
<body>
<input type="button" onclick="runit()" value="runit">
<!-- http://en.wikipedia.org/wiki/Data_URI_scheme -->
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
<br>
<textarea id="textContainer" style="width: 400px; height: 240px"></textarea>
<br>
<div id="pdfContainer"></div>
<script id="pdfSource" type="text/plain">
%PDF-1.7
1 0 obj % entry point
<<
/Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<<
/Type /Pages
/MediaBox [ 0 0 200 200 ]
/Count 1
/Kids [ 3 0 R ]
>>
endobj
3 0 obj
<<
/Type /Page
/Parent 2 0 R
/Resources <<
/Font <<
/F1 4 0 R
>>
>>
/Contents 5 0 R
>>
endobj
4 0 obj
<<
/Type /Font
/Subtype /Type1
/BaseFont /Times-Roman
>>
endobj
5 0 obj % page content
<<
/Length 44
>>
stream
BT
70 50 TD
/F1 12 Tf
(Hello, world!) Tj
ET
endstream
endobj
xref
0 6
0000000000 65535 f
0000000010 00000 n
0000000079 00000 n
0000000173 00000 n
0000000301 00000 n
0000000380 00000 n
trailer
<<
/Size 6
/Root 1 0 R
>>
startxref
492
%%EOF
</script>
</body>
[EDITED] Using BLOB https://developer.mozilla.org/en-US/docs/Web/API/Blob and URL.createObjectURL(blob) https://developer.mozilla.org/en-US/docs/Web/API/URL.createObjectURL仅适用于 Chrome。显然,在撰写本文时,Acrobat Reader 插件不支持“blob:”样式 URL。
Fiddle: http://jsfiddle.net/Noseratio/uZwQw/1/ http://jsfiddle.net/Noseratio/uZwQw/1/
所以,跨浏览器的解决方案仍然需要一个真正的经典URL。