当前位置: 首页 > 面试题库 >

从arraybuffer显示pdf

祝宏放
2023-03-14
问题内容

我从这段代码中从laravel dompdf返回流数据

 $pdf = \App::make('dompdf.wrapper');
 $pdf->loadHTML("<div>This is test</div>");
 return $pdf->stream();

这是我的JS ajax代码

    $.ajax({
        type:"GET",
        url: "/display",
        responseType: 'arraybuffer'
    }).done(function( response ) {
        var blob = new Blob([response.data], {type: 'application/pdf'});
        var pdfurl = window.URL.createObjectURL(blob)+"#view=FitW";
        $("#pdfviewer").attr("data",pdfurl);
    });

这是在ajax之后显示pdf的HTML

<object id="pdfviewer" data="/files/sample.pdf" type="application/pdf" style="width:100%;height:500px;"></object>

我低于错误

无法加载PDF文档

请帮助解决此问题。如何显示PDF文件。


问题答案:

jQuery.ajax()``responseType默认情况下没有设置。您可以使用polyfill,例如实现二进制数据传输的jquery-
ajax-blob-arraybuffer.js
,也可以利用fetch()

。用<iframe>element代替<object>element。

$(function() {

  var pdfsrc = "/display";

  var jQueryAjaxBlobArrayBuffer = "https://gist.githubusercontent.com/SaneMethod/" 
                         + "7548768/raw/ae22b1fa2e6f56ae6c87ad0d7fbae8fd511e781f/" 
                         + "jquery-ajax-blob-arraybuffer.js";

  var script = $("<script>");

  $.get(jQueryAjaxBlobArrayBuffer)
  .then(function(data) {
    script.text(data).appendTo("body")
  }, function(err) {
    console.log(err);
  })
  .then(function() {
    $.ajax({
      url: pdfsrc,
      dataType: "arraybuffer"
    })
    .then(function(data) {
      // do stuff with `data`
      console.log(data, data instanceof ArrayBuffer);
      $("#pdfviewer").attr("src", URL.createObjectURL(new Blob([data], {
            type: "application/pdf"
          })))
     }, function(err) {
          console.log(err);
     });

  });
});

使用fetch().arrayBuffer()

  var pdfsrc = "/display";

  fetch(pdfsrc)
  .then(function(response) {
    return response.arrayBuffer()
  })
  .then(function(data) {
    // do stuff with `data`
    console.log(data, data instanceof ArrayBuffer);
    $("#pdfviewer").attr("src", URL.createObjectURL(new Blob([data], {
        type: "application/pdf"
    })))
  }, function(err) {
      console.log(err);
  });

plnkr
http://plnkr.co/edit/9R5WcsMSWQaTbgNdY3RJ?p=preview

版本1 jquery-ajax-blob-arraybuffer.jsjQuery.ajax(); 版本2
fetch().arrayBuffer()



 类似资料:
  • 我正在研究Blob,我注意到当你有一个ArrayBuffer时,你可以很容易地将它转换成Blob,如下所示: 我现在的问题是,有没有可能从一团变成一团?

  • 问题内容: 我已经创建了一个表,其中已通过“ BLOB”保存了图像。我需要将这些图像与其他项目一起显示。但是我不知道如何在同一页面中一起显示这些图像。这是我的php代码,以表格形式显示其他内容。同样,我想相应地显示图像。有什么帮助吗? 问题答案: 正如其他人所提到的,将图像存储在数据库中通常不是一个好主意。 图像不会与另一个页面数据以相同的响应传输。 要显示数据库中的图像,您需要实现一个脚本,给定

  • 如何在任何浏览器中显示创建的pdf? 当前的输出是这样的,基本上是原始的PDF: %PDF-1.4%2 0 obj<>流x+r 26 s 00 si 2 p 5 1 b 4>>>>/父3 0 r/mediabox[0 0 595 842]>>内dobj 1 0 obj<>内dobj 3 0 obj<>内dobj 5 0 obj<>内dobj 6 0 obj<>内dobj xref 0 7 000

  • 我正在尝试使用Swift在我的iOS应用程序中显示pdf。我从服务器得到的响应是pdf数据,它看起来如下所示: %PDF-1.4%ôiá1 0 obj 我检查了iOS PDF阅读器和PDFKit,但主要问题是我不明白如何处理应用程序中的响应。 有什么想法吗?谢谢!

  • 我有一个docker容器,它可以打开一个tkinter窗口,但它一直崩溃,因为它无法连接到主机的显示器。本文给出的答案建议将X-11套接字绑定到容器< code >-v/tmp/. X11-unix:/tmp/. X11-UNIX:ro ,并将其显示环境变量设置为主机< code>-e DISPLAY=$DISPLAY的显示环境变量,但由于这两个变量都是UNIX特定的路径/变量,因此它们在其他操作

  • 所以我是Android编程的新手,我正在尝试制作一个能够实时处理图像的应用程序。我已经实现了文档中的预览用例以及ImageAnalysis用例。目前,预览显示在上,但我希望在显示图像之前对图像进行处理,因此简而言之,我希望在方法中对帧做一些处理,然后显示此帧,而不是CameraX预览。 顺便说一句,使用CameraX这样做有意义吗?最后,我想使用OpenCV进行处理,但我选择了CameraX,因为