gpt4 book ai didi

javascript - Blob 未正确生成 pdf

转载 作者:行者123 更新时间:2023-11-28 03:08:12 28 4
gpt4 key购买 nike

我创建了一个 pdf 生成器服务,它调用后端来检索制作 pdf blob 所需的数据。由于某种原因,当 blob 打开时,Google Chrome(或任何与此相关的浏览器)会显示:“无法加载 PDF 文档。”我在控制台中没有收到任何错误,并且我的预览标题显示数据正在存储在我的前端值中。我的 http.post 也收到了 200 美元。下面是我的代码。

Blob 代码

    angular.module( 'utilitiesServices' ).factory( 'pdfGenerator', ['$q', '$timeout', '$window', function ($q, $timeout, $window) {


var service = {};

/**
* @memberof pdfGenerator
* @description
* Generates a pdf from given data
**/
function _print(data) {

if (data !== null || data !== undefined) {

var bytes = data

var file = new Blob([bytes], { type: 'application/pdf' });


$timeout(function () {
//IE compatabilty
if (window.navigator && window.navigator.msSaveOrOpenBlob) {

window.navigator.msSaveOrOpenBlob(file, 'report.pdf');

}
else {

var objectUrl = window.URL.createObjectURL(file);
$window.open(objectUrl);

}

});

}

};

/**
* Print the pdf
* @param data
* @returns {*}
*/
service.generatePDF = function (data) {

var deferred = $q.defer();

deferred.resolve(

_print(data)

);

return deferred.promise;

};

return service;

}]);

调用后端获取PDF数据

service.prototype.getPDF = function (id) {

var deferred = $q.defer();

this.loading.GetPDF = true;

$http.post('service/api/GetPdf', JSON.stringify(id), { responseType: 'arraybuffer' })
.then(function successCallback(response) {

return deferred.resolve(response);

},
function errorCallback(error) {

return deferred.reject(error);

});

return deferred.promise;

};

前端响应并调用http.post函数

    $scope.getPDF = function (id) {

$scope.data.loading = true; // Show the loading graphic


tracking.getPdf(id).then(function (data) {

// Tell the user that the pdf data was succesfully retrieved
ngToast.create({
className: 'success',
content: 'Success!'
});

pdfGenerator.generatePDF(data); // Create the pdf using the retrieved data

}, function (error) {

// Tell the user that there was an error getting data for the pdf
ngToast.create({
className: 'warning',
content: 'Error',
animation: 'slide'
});

}).finally(function () {
$scope.data.loading = false; // Turn off the loading graphic
});

};

我尝试更改 blob 类型,仔细检查我的后端代码(检查并将正确的数据发送到前端),并逐步执行每段代码以确保所有内容都捕获了它需要的数据。

另一双眼睛会有很大帮助。如果您需要任何其他信息,请告诉我。在过去的几天里,这个错误一直让我发疯。

最佳答案

解决了。

            pdfGenerator.generatePDF(data);                       // Create the pdf using the retrieved data

需要是:

            pdfGenerator.generatePDF(data.data);                       // Create the pdf using the retrieved data

因此只有数组缓冲区被传递到 blob,没有其他内容。

关于javascript - Blob 未正确生成 pdf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60416262/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com