用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>")