当前位置: 首页 > 知识库问答 >
问题:

PDF 斑点 - 弹出窗口不显示内容

澹台镜
2023-03-14

在过去的几天里,我一直在解决这个问题。尝试在上显示流时运气不佳。

知道为什么pdf的内容没有显示吗?

代码:

$http.post('/fetchBlobURL',{myParams}).success(function (data) {
    var file = new Blob([data], {type: 'application/pdf'});
    var fileURL = URL.createObjectURL(file);
    window.open(fileURL);
});

共有3个答案

罗和煦
2023-03-14

我用AngularJS v1.3.4

HTML:

<button ng-click="downloadPdf()" class="btn btn-primary">download PDF</button>

JS控制器:

'use strict';
angular.module('xxxxxxxxApp')
    .controller('MathController', function ($scope, MathServicePDF) {
        $scope.downloadPdf = function () {
            var fileName = "test.pdf";
            var a = document.createElement("a");
            document.body.appendChild(a);
            MathServicePDF.downloadPdf().then(function (result) {
                var file = new Blob([result.data], {type: 'application/pdf'});
                var fileURL = window.URL.createObjectURL(file);
                a.href = fileURL;
                a.download = fileName;
                a.click();
            });
        };
});

金诚服务:

angular.module('xxxxxxxxApp')
    .factory('MathServicePDF', function ($http) {
        return {
            downloadPdf: function () {
            return $http.get('api/downloadPDF', { responseType: 'arraybuffer' }).then(function (response) {
                return response;
            });
        }
    };
});

Java REST Web服务-Spring MVC:

@RequestMapping(value = "/downloadPDF", method = RequestMethod.GET, produces = "application/pdf")
    public ResponseEntity<byte[]> getPDF() {
        FileInputStream fileStream;
        try {
            fileStream = new FileInputStream(new File("C:\\xxxxx\\xxxxxx\\test.pdf"));
            byte[] contents = IOUtils.toByteArray(fileStream);
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.parseMediaType("application/pdf"));
            String filename = "test.pdf";
            headers.setContentDispositionFormData(filename, filename);
            ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(contents, headers, HttpStatus.OK);
            return response;
        } catch (FileNotFoundException e) {
           System.err.println(e);
        } catch (IOException e) {
            System.err.println(e);
        }
        return null;
    }
袁弘化
2023-03-14

如果您设置<code>{responseType:‘blob‘}。您可以简单地基于响应内容创建url:

$http({
    url: "...",
    method: "POST",
    responseType: "blob"
}).then(function(response) {
    var fileURL = URL.createObjectURL(response.data);
    window.open(fileURL);
});
乐正镜
2023-03-14

如果要从响应数据创建blob,则需要将responseType设置为arraybuffer

$http.post('/fetchBlobURL',{myParams}, {responseType: 'arraybuffer'})
   .success(function (data) {
       var file = new Blob([data], {type: 'application/pdf'});
       var fileURL = URL.createObjectURL(file);
       window.open(fileURL);
});

更多信息: Sending_and_Receiving_Binary_Data

 类似资料:
  • 我有一个内置于Java的应用程序,当应用程序中按下某个按钮时,另一个jframe应该会弹出一条消息。我制作的ant文件将可运行的jar放入我的Eclipse项目中的一个文件夹中。当jar构建完成后,我在它诞生的文件夹中运行jar,它运行良好。我可以点击使弹出窗口显示的按钮,它确实显示了。 当我把罐子移出并说,放在桌面上时,问题就来了。然后运行jar启动应用程序,但是按下按钮什么也不做(没有弹出窗口

  • 我读了关于JDialogsJOptionPane消息,但我还是无法让它工作。我有一个扩展JFrame的GUI类。我想做的就是在我的程序开始时有一个弹出窗口,通知用户一些事情。在我的主界面中,我创建了以下gui: 在那之后,我要展示橱窗。我在main方法中尝试了以下内容: 我还尝试将弹出窗口添加到GUI类中,如下所示 无论如何,我将如何使此窗口显示?我尝试过的每一种方法都编译了,但什么也没发生。 然

  • 我在我的Yii站点中使用了kcfinder 单击图像上载按钮时,会打开以下弹出窗口。 在这里,当点击“浏览服务器”按钮时,弹出窗口打开,但它显示了php代码。传递的url为:: http://sitename.com/kcfinder/browse.php?type=files 它显示直接的php内容,而不是图像上传屏幕 我不知道为什么。它在我当地的wamp服务器工作正常。请帮助我。

  • 问题内容: 如何将通过javascript 函数打开的弹出窗口居中显示在屏幕变量中心,以当前选定的屏幕分辨率为中心? 问题答案: 更新:它现在也可以在尚未超出屏幕宽度和高度的窗口上运行! 如果您使用双显示器,则窗口将水平居中,而不是垂直居中…使用此功能可以解决此问题。 用法示例:

  • 问题内容: 我正在尝试使用wunderground的api,Leaflet和Cloudmade将天气图标显示在地图标记中。我已经显示了文本和带有图标图像的变量,但是我不确定如何显示它。这是我的代码: 我尝试了一下但没有成功: 有什么建议? 问题答案: 标记的bindPopup方法仅将HTML内容作为字符串,因此您还需要在标记周围加上引号-类似于 应该为您工作。

  • 我试图从扩展服务的类中打开一个活动。当应用程序不在前台/未被使用时,我正在执行此任务。我可以在日志中看到,我的服务类故意触发了启动活动。标志\活动\新任务标志。但活动并未开始。但是,当应用程序处于前台/正在使用时,服务触发相同的活动时,活动就会打开。 经过几次搜索,我发现我需要在应用程序设置的“其他权限”部分中手动授予“在后台运行android时显示弹出窗口”的权限。 “在其他应用程序上显示”权限