用JavaScript在新窗口中打开PDFstring
我有一个格式化的PDFstring,看起来像
%PDF-1.73 0 obj<<< /Type /Group /S /Transparency /CS /DeviceRGB >> /Resources 2 0 R/Contents 4 0 R>> endobj4 0 obj<> streamx R=o 0 + =|vL R l - ځ, Ge JK { Y5 Z˯k vf a `G֢ۢ Asf z ͼ `% aI# !; t GD?! < B b ... 00000 n 0000000703 00000 n 0000000820 00000 n 0000000926 00000 n 0000001206 00000 n 0000001649 00000 n trailer << /Size 11 /Root 10 0 R /Info 9 0 R >>startxref2015%%EOF
我试图在一个新的窗口中打开这个string作为PDF文件。 每当我使用window.open()并将string写入新标签时,它认为文本应该是HTML文档的内容。 我希望它能认识到这是一个PDF文件。
任何帮助深表感谢
window.open("data:application/pdf," + escape(pdfString));
上面的一个在URL中粘贴编码的内容。 这会限制URL中的内容长度,因此PDF文件加载失败(由于内容不完整)。
您可能想要使用数据URI进行探索。 它看起来像。
window.open("data:application/pdf," + escape(pdfString));
我并没有马上得到这个工作,可能是因为格式化了所提供的二进制string。 在使用数据URI时,我通常也使用base64编码的数据。 如果你能够传递后端编码的内容,你可以使用..
window.open("data:application/pdf;base64, " + base64EncodedPDF);
希望这是你需要的正确方向。 另外请注意,这在IE6 / 7中完全不起作用,因为它们不支持数据URI。
我意识到这是一个相当古老的问题,但今天我也有同样的想法,并提出了以下解决scheme:
doSomethingToRequestData().then(function(downloadedFile) { // create a download anchor tag var downloadLink = document.createElement('a'); downloadLink.target = '_blank'; downloadLink.download = 'name_to_give_saved_file.pdf'; // convert downloaded data to a Blob var blob = new Blob([downloadedFile.data], { type: 'application/pdf' }); // create an object URL from the Blob var URL = window.URL || window.webkitURL; var downloadUrl = URL.createObjectURL(blob); // set object URL as the anchor's href downloadLink.href = downloadUrl; // append the anchor to document body document.body.appendChild(downloadLink); // fire a click event on the anchor downloadLink.click(); // cleanup: remove element and revoke object URL document.body.removeChild(downloadLink); URL.revokeObjectURL(downloadUrl); });
根据其他旧的答案:
escape()
函数现在已被弃用,
改用encodeURI()或encodeURIComponent() 。
在我的情况下工作的例子:
window.open("data:application/pdf," + encodeURI(pdfString));
快乐编码!
第一次海报,所以我希望它看起来不错。
我有这个问题与联邦快递的运输请求。 我用AJAX执行请求。 响应包括跟踪#,成本,以及包含运输标签的pdfstring。
以下是我所做的:
添加一个表单:
<form id='getlabel' name='getlabel' action='getlabel.php' method='post' target='_blank'> <input type='hidden' id='pdf' name='pdf'> </form>
使用JavaScript来填充隐藏字段的值与PDFstring,并张贴表单。
哪里getlabel.php:
<? header('Content-Type: application/pdf'); header('Content-Length: '.strlen($_POST["pdf"])); header('Content-Disposition: inline;'); header('Cache-Control: private, max-age=0, must-revalidate'); header('Pragma: public'); print $_POST["pdf"]; ?>
仅供参考,下面
window.open("data:application/pdf," + encodeURI(pdfString));
在Chrome中不起作用。 昨天,我遇到了同样的问题,并尝试这个解决scheme,但没有工作(这是'不允许导航顶部框架到数据url')。 您无法直接在新窗口中打开数据url。 但是,您可以将其包装在iframe中,并在如下所示的新窗口中打开它。 =)
let pdfWindow = window.open("") pdfWindow.document.write("<iframe width='100%' height='100%' src='data:application/pdf;base64, " + encodeURI(yourDocumentBase64VarHere)+"'></iframe>")