Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/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 如何显示base64编码的pdf?_Javascript_Html_Pdf_Base64_Embed - Fatal编程技术网

Javascript 如何显示base64编码的pdf?

Javascript 如何显示base64编码的pdf?,javascript,html,pdf,base64,embed,Javascript,Html,Pdf,Base64,Embed,我必须在新选项卡中显示base64 pdf。我正在使用下面的代码 var windo = window.open("", ""); var objbuilder = ''; objbuilder += ('<embed width=\'100%\' height=\'100%\' src="data:application/pdf;base64,'); objbuilder += (fileData); objbuilder += ('" type="application

我必须在新选项卡中显示base64 pdf。我正在使用下面的代码

 var windo = window.open("", "");  
 var objbuilder = '';
 objbuilder += ('<embed width=\'100%\' height=\'100%\'  src="data:application/pdf;base64,');
 objbuilder += (fileData);
 objbuilder += ('" type="application/pdf" />');
 windo.document.write(objbuilder); 
var-windo=window.open(“,”);
var objbuilder='';
objbuilder+=(“”);
windo.document.write(objbuilder);
它在FireFox中工作,而在Chrome和IE中不工作。我甚至试过使用tag,但输出相同,在FF中工作,但在Chrome和IE中不工作

我看了下面的JSfiddle,它们在FF中工作,但在Chrome中不工作

我的Chrome版本是:54.0.2840.99 m版

FireFox版本:49.0.2

有没有人有什么想法,请分享


提前感谢

您可以使用Chrome浏览器

我在IE中也遇到了同样的问题:用
base64
字符串显示pdf是不可能的

我必须在服务器上生成临时文件,以便使用IE显示它们。他仅使用路径显示现有文件


您仍然可以使用JS库
pdf.JS

一样显示您的pdf。对于那些仍然无法显示的用户,我在其他人的回答中发现了这一点,但我不记得是谁

var objbuilder = '';
objbuilder += ('<object width="100%" height="100%" 
data="data:application/pdf;base64,');
objbuilder += (myBase64string);
objbuilder += ('" type="application/pdf" class="internal">');
objbuilder += ('<embed src="data:application/pdf;base64,');
objbuilder += (myBase64string);
objbuilder += ('" type="application/pdf"  />');
objbuilder += ('</object>');

var win = window.open("#","_blank");
var title = "my tab title";
win.document.write('<html><title>'+ title +'</title><body style="margin-top: 
0px; margin-left: 0px; margin-right: 0px; margin-bottom: 0px;">');
win.document.write(objbuilder);
win.document.write('</body></html>');
layer = jQuery(win.document);
var objbuilder='';
objbuilder+=(“”);
objbuilder+=(“”);
objbuilder+=(“”);
var win=window.open(“#”和“_blank”);
var title=“我的选项卡标题”;
赢。文件。写(“”+标题+“”);
win.document.write(objbuilder);
win.document.write(“”);
layer=jQuery(win.document);
这样,我们就可以在新选项卡中打开pdf。

函数打印预览(数据){
function printPreview(data){
        var type = 'application/pdf';
        let blob = null;
        const blobURL = URL.createObjectURL( pdfBlobConversion(data, 'application/pdf'));
        const theWindow = window.open(blobURL);
        const theDoc = theWindow.document;
        const theScript = document.createElement('script');
        function injectThis() {
            window.print();
        }
        theScript.innerHTML = 'window.onload = ${injectThis.toString()};';
        theDoc.body.appendChild(theScript);
    }
  //converts base64 to blob type for windows
    function pdfBlobConversion(b64Data, contentType) {
          contentType = contentType || '';
          var sliceSize = 512;
          b64Data = b64Data.replace(/^[^,]+,/, '');
          b64Data = b64Data.replace(/\s/g, '');
          var byteCharacters = window.atob(b64Data);
          var byteArrays = [];

          for ( var offset = 0; offset < byteCharacters.length; offset = offset + sliceSize ) {
            var slice = byteCharacters.slice(offset, offset + sliceSize);

            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i++) {
              byteNumbers[i] = slice.charCodeAt(i);
            }

            var byteArray = new Uint8Array(byteNumbers);

            byteArrays.push(byteArray);
          }

          var blob = new Blob(byteArrays, { type: contentType });
          return blob;
        }
变量类型='application/pdf'; 设blob=null; const blobURL=URL.createObjectURL(pdfBlobConversion(数据,'application/pdf')); const theWindow=window.open(blobURL); const theDoc=theWindow.document; const theScript=document.createElement('script'); 函数injectThis(){ window.print(); } theScript.innerHTML='window.onload=${injectThis.toString()};'; doc.body.appendChild(脚本); } //将base64转换为windows的blob类型 函数pdfBlobConversion(b64Data,contentType){ contentType=contentType | |“”; var-sliceSize=512; b64Data=b64Data.replace(/^[^,]+,/,''); b64Data=b64Data.replace(/\s/g'); var byteCharacters=window.atob(b64Data); var ByteArray=[]; 对于(变量偏移量=0;偏移量
将base64数据传递到此函数,它将在新窗口中显示pdf。 这是在chrome和firefox中工作,而不是在IE中。 请帮忙。我希望它也能在IE中工作。
我将bloburl赋给窗口时出现了给定错误。

此处'@Model.binaryDocument'是base64数据

1) 按模式


2) 作者:js

$(文档).ready(函数(){
var b64Data=“@Model.binaryDocument”;
var contentType=“应用程序/pdf”;
const blob=b64toBlob(b64Data,contentType);
const blobUrl=URL.createObjectURL(blob);
window.location=blobUrl;
})
const b64toBlob=(b64Data,contentType='',sliceSize=512)=>{
常量ByTechCharacters=atob(B64数据);
常量字节数组=[];
for(让offset=0;offset

第一种解决方案更适合防止自动下载pdf。

我尝试了Object,iframe也尝试了URIdata,但不在Chrome中工作。你可以在下面的Jsfiddle中看到,我只是将JSFIDLE上的代码复制粘贴到html文件中,然后用Chrome启动,它可以工作。。。它在小提琴上不起作用,但在本地起作用。我使用相同的代码(iframe代码),但它不适用于我的数据。当它与@dnyaneshwarThx示例一起工作时。您的解决方案与node中的PDFKIT配合得非常好。jsI具有base64String数据,需要使用iframe控件在mvc视图中打开。我正在尝试使用嵌入和ifame,但它们都不起作用。var pdfData='@Model.PdfDataString'$attr('src','data:application/pdf;base64,{0}'。替换('0}',pdfData))$attr('src','data:application/pdf;base64,{0}'。替换('0}',pdfData));对不起,我不喜欢MVC@chacochrome中的大型PDF不起作用。像这个一样,它最多允许9页,我猜在我的例子中,当我试图在iframe中显示base64编码的pdf字符串时,它显示的是空白页。它只能在Firefox上正常工作。在花了一天时间使它工作之后,我终于找到了错误的原因。在我的PDF文档中,我嵌入了从文本编辑器生成的HTML代码,当我删除这些HTML代码时,它开始工作。我发现了导致此错误的代码块,但没有逻辑意义说明错误的原因。这太长了,无法解释我有什么样的错误,但我能说的是,这完全是胡说八道。
<object>
   <embed id="pdfID" type="text/html" width="1200" height="600" src="data:application/pdf;base64,@Model.binaryDocument" />
</object>
  $(document).ready(function () {
    var b64Data = "@Model.binaryDocument";
    var contentType = "application/pdf";
     const blob = b64toBlob(b64Data, contentType);
    const blobUrl = URL.createObjectURL(blob);

    window.location = blobUrl;
  })

const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {
    const byteCharacters = atob(b64Data);
    const byteArrays = [];

    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) 
       {
        const slice = byteCharacters.slice(offset, offset + sliceSize);

        const byteNumbers = new Array(slice.length);
        for (let i = 0; i < slice.length; i++) {
            byteNumbers[i] = slice.charCodeAt(i);
        }

        const byteArray = new Uint8Array(byteNumbers);
        byteArrays.push(byteArray);
    }

    const blob = new Blob(byteArrays, { type: contentType });
    return blob;
}