Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Chrome'中打开jsPDF创建的pdf;s新的选项卡/窗口_Javascript_Google Chrome_Pdf_Jspdf - Fatal编程技术网

Javascript 在Chrome'中打开jsPDF创建的pdf;s新的选项卡/窗口

Javascript 在Chrome'中打开jsPDF创建的pdf;s新的选项卡/窗口,javascript,google-chrome,pdf,jspdf,Javascript,Google Chrome,Pdf,Jspdf,如何使用javascript链接打开数据:application/pdf;filename=generated.pdf;base64;Chrome 71中的数据? 控制台中的链接已成功打开,但未从代码中打开-很遗憾。 出于安全原因,该代码段不起作用。仅用于代码演示。 我读了一些类似的问题,但没有找到答案 var-button=document.getElementById(“按钮”); 按钮。addEventListener(“单击”,生成,false); 函数生成(){ var doc=新

如何使用javascript链接打开
数据:application/pdf;filename=generated.pdf;base64;Chrome 71中的数据

控制台中的链接已成功打开,但未从代码中打开-很遗憾。
出于安全原因,该代码段不起作用。仅用于代码演示。
我读了一些类似的问题,但没有找到答案

var-button=document.getElementById(“按钮”);
按钮。addEventListener(“单击”,生成,false);
函数生成(){
var doc=新的jsPDF({
方向:“l”,
单位:毫米
});
文件文本(‘法案’、130、20);
var string=doc.output('datauristring');
console.log(字符串);
var link=document.createElement('a');
link.href=string;
link.setAttribute('target','u blank');
document.body.appendChild(链接);
link.click();
link.parentNode.removeChild(link);
}


生成pdf表格
您正在使用Javascript从原始数据生成pdf。为什么不使用Adobe这样的阅读器来呈现它呢?这就是从控制台单击链接时发生的情况。你可以直接打开链接,它将以PDF格式打开。我认为这项任务可能过于复杂了。

试试
window.open()
。下面的代码适用于我。您需要修改窗口/页面大小

let dataSrc = pdf.output("datauristring");
let win = window.open("", "myWindow");
win.document.write("<html><head><title>jsPDF</title></head><body><embed src=" + 
    dataSrc + "></embed></body></html>");
更新2:

为避免页面在缩放时被切断


我在本地计算机中运行问题代码并接受以下错误:

不允许将顶部框架导航到数据URL:data:application/pdf;filename=generated.pdf;base64

我尝试了“卫惠国”的建议。对我来说很不幸

我发现比Chrome Automatically开放pdf


不仅是新标签。当前页面上也未打开。

在其他浏览器中,此页面可以正确显示


真是个不幸的消息。

其实很简单,不要把事情复杂化

window.open(URL.createObjectURL(doc.output("blob")))
或者更详细、效率更低的版本:

let newWindow = window.open('/');
fetch(doc.output('datauristring')).then(res => res.blob()).then(blob => {
    newWindow.location = URL.createObjectURL(blob);
})
(您需要在onclick或Chrome阻止弹出窗口后立即打开新窗口。此解决方案没有那么好,因为存在从datauri到blob的不必要的转换)

此代码适用于我

  var doc = new jsPDF();
  doc.setProperties({
  title: "new Report"
  });
  doc.output('dataurlnewwindow');

谢谢你的回复。在浏览器中打开pdf以满足其业务需求。你可能知道这是怎么回事(我可以下载pdf。但是他的不适合客户。大多数浏览器仍然会使用安装的阅读器在浏览器中打开它。我很确定您仍然安装了某种pdf阅读器,这就是当您单击控制台中的链接时打开它的原因。可能是chrome有内置阅读器。尝试复制/粘贴链接进入地址栏。你可以随时在iframe中打开链接,它将在浏览器中打开。如果你使用javascript库,那么我不确定这是否是从PDF创建html页面。我很难理解你现在的目标是什么。如果你只想在新的选项卡/窗口中打开jspdf创建的PDF,它可以是s简化为
doc.output('dataurlnewwindow')查看我的更新答案。您遇到的错误,
不允许将顶部框架导航到数据URL:data:application/pdf;filename=generated.pdf;base64,
更像是您试图在同一选项卡/窗口打开pdf,而不是新的。@WeihuiGuo,感谢您的耐心和帮助。我还没有弄清楚原因,但您的同事de现在可以使用
pdf.output('dataurlnewwindow')
没有问题。但是答案并不完美。我发现如果用户将页面放大到一定程度,输出可能会被切断。我仍在试图找到解决方法。是的,您也可以使用
window.open(pdf.output('bloburl');
pdf通过
pdf.output]打开('dataurlnewwindow')
在点击地址栏上的enter键时也会消失,因为地址栏中没有url。
window.open(pdf.output('bloburl'))
没有这个问题我注意到在使用pdf.output('dataurlnewwindow')时在Chrome上,新页面继续加载。这使你无法使用下载功能。但在另一个浏览器(如Firefox)上,同样的方法没有这个问题。在那里,它按预期工作。
  var doc = new jsPDF();
  doc.setProperties({
  title: "new Report"
  });
  doc.output('dataurlnewwindow');