Javascript 服务器生成的PDF angularjs,包含长文章内容

Javascript 服务器生成的PDF angularjs,包含长文章内容,javascript,php,json,angularjs,pdf,Javascript,Php,Json,Angularjs,Pdf,在尝试了很多不同的方法之后,我什么都不管用 最相似的问题是这个 我有一个AngularJS应用程序,它向我的PHP文件发送生成PDF文件的请求。 我的控制器具有以下功能,我通过单击按钮调用该功能: $scope.print = function() { $http({ method : "post", url : '/pdf/print_processor.php', data : printdata, //response

在尝试了很多不同的方法之后,我什么都不管用

最相似的问题是这个

我有一个AngularJS应用程序,它向我的PHP文件发送生成PDF文件的请求。 我的控制器具有以下功能,我通过单击按钮调用该功能:

$scope.print = function() {
    $http({
        method : "post",
        url : '/pdf/print_processor.php',
        data : printdata,
        //responseType : 'arraybuffer',
        headers : {
            'Content-type' : 'application/json'
        }
    }).success(function(response, status, headers) {                        
     var file = new Blob([response], {type: 'application/pdf'});
        var fileURL = URL.createObjectURL(file);
        window.open(fileURL);
    });
}   
主要原因是我必须向PHP文件发送更多数据。printdata变量包含一个大于12 KB的嵌套JSON对象。因此,我无法使用普通的获取或通过普通链接将此数据作为URL的一部分传递

这个请求是有效的,因为我可以直接调用print_processor.php(它给了我PDF),并且我使用相同的方法来创建和发送电子邮件。 与上面提到的问题一样,我的回答也包含pdf文件本身:

%PDF-1.5
3 0 obj
<</Type /Page
/Parent 1 0 R
/Resources 2 0 R
/Group <</Type /Group /S /Transparency /CS /DeviceRGB>>
/Contents 4 0 R>>
endobj
4 0 obj
<</Filter /FlateDecode /Length 85>>
stream
...
%PDF-1.5
30 obj
endobj
40 obj
流动
...
但是现在我只想把PDF文件交给浏览器,就像我直接打开PHP文件一样。。。虽然控制器打开一个新窗口,其URL为“blob:7e2d358f-00a1-4e33-9e7e-96cfe7c02688”,但页面是空的,我认为,URL对于整个blob来说太短了

其他类似问题包括:

当我使用经常提到的responseType“arraybuffer”(我在上面的代码中注释掉了它)时,PHP的结果是“null”,而不是PHP文件的内容。当它不被使用时,我会得到PDF文件。。。也许这是个暗示

我的角度版本是1.2.26

我尝试的另一个解决方案是直接调用PHP(不使用ajax/angular控制器),方法是使用带有post的表单和printdata的隐藏字段。由于printdata是一个多层嵌套的json对象,因此实际上不可能将其放入隐藏字段


我希望有人有其他想法或发现错误

在$http中添加参数responseType、标头和缓存,如下所示:

$scope.print = function() {
    $http({
        method : "post",
        url : '/pdf/print_processor.php',
        data : printdata,
        responseType : 'arraybuffer',
        headers: {
                            accept: 'application/pdf'
        },
        cache: true,
    }).success(function(response, status, headers) {                        
     var file = new Blob([response], {type: 'application/pdf'});
        var fileURL = URL.createObjectURL(file);
        window.open(fileURL);
    });
}   

嗨,无法确认,因为时间太久了,项目已经不存在了。我无法解释缓存将如何解决这个问题?!accept头也是一样:服务器发送整个响应,所以accept头工作正常,我认为这不会改变任何事情。但也许有一天我会试试。谢谢