gpt4 book ai didi

javascript - 加载从跨文档消息传递中作为 event.data 获取的 pdf

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:08 24 4
gpt4 key购买 nike

对于知道答案的人来说很简单。我的代码通过跨文档消息传递从网站成功下载了 pdf。但是,我现在想在浏览器中显示 pdf,可能在 iframe 或数据对象中。可能我需要知道 pdf 下载后存储的本地 url。请大家帮忙,大概简单点。参见 the fiddle here对于我的代码。

重要提示:因为我想下载文件,所以我不想简单地制作 client.src="http://ops.epo.org/3.0/rest-services/published-data/images/US/7123345/B2/thumbnail.pdf?Range=1"

HTML代码:

    <input type="button" onclick="runit()" value="runit"></input>
<iframe width=100 height=100 id="client" src="http://ops.epo.org/3.0/xss/crosssitescript.html" />

Javascript 代码:

function runit() {
// Get the iframe window object
var client = document.getElementById('client');
// Create the data string to be passed to the OPS JavaScript
var data = "{'url' : 'http://ops.epo.org/3.0/rest-services/published-data/images/US/7123345/B2/thumbnail.pdf?Range=1', " + "'method' : 'GET', " + "'requestHeaders' : {'Accept': 'application/pdf' } " + "}";
// Use the postMessage() method in order to send the data to the
// iframe object
client.contentWindow.postMessage(data, 'http://ops.epo.org');
}
// Add event listener for your window
window.addEventListener("message", receiveMessage, false);
// Method handling window events
function receiveMessage(event) {
// Check origin of the event!
if (event.origin == "http://ops.epo.org") {
alert("How do I display the event.data as a pdf on the page?");
} else {
alert("Got message from unknown source.");
}
}

最佳答案

我试过你的代码,它返回 PDF 内容作为文字字符串(在event.data 中)。您无法获取字符串数据的 URL(本地或非本地),除非您先将其上传回某个地方(例如,通过 XHR 上传到您自己的服务器)。除此之外,我希望这个答案能有所帮助。

以下方法使用 Data URI scheme呈现由字符串表示的 PDF(如 event.data 在您的情况下)。它适用于 Chrome 和 Firefox。不幸的是,在 IE10 中,Adobe Acrobat Reader 插件(IE10/Win8 64 位,带最新更新和最新的 Adob​​e Acrobat Reader)收到“拒绝访问”消息。因此,对于跨浏览器解决方案,您最好的选择可能是某种基于 HTML5 的 PDF 渲染器,例如 PDF.js。 .

fiddle :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>

[已编辑] 使用 BLOBURL.createObjectURL(blob)仅适用于 Chrome。显然,在撰写本文时,Acrobat Reader 插件不支持“blob:”样式的 URL。

fiddle : http://jsfiddle.net/Noseratio/uZwQw/1/

因此,跨浏览器解决方案仍然需要一个真正的经典 URL。

关于javascript - 加载从跨文档消息传递中作为 event.data 获取的 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19061668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com