Symfony3资源解释为Document但使用MIME类型application / pdf进行传输

时间:2018-02-23 10:26:07

标签: php ajax symfony

我尝试在iframe中打开pdf,但是我有这条消息。 我尝试了很多东西,但没有人工作。

谢谢。

  

资源解释为文献但与MIME类型application / PDF转移:"数据:应用/ PDF; BASE64,SFRUUC8xLjAgMjAwIE9LDQpDYWNoZS1Db250cm9sOiBwdWJsaWMNCkNvbnRlbnQtVHlwZTogIGFwcGxpY2F0aW9uL3BkZg0KRGF0ZTogICAgICAgICAgRnJpLCAyMyBGZWIgMjAxOCAxMDowNDowNiBHTVQNCkxhc3QtTW9kaWZpZWQ6IEZyaSwgMjMgRmViIDIwMTggMDk6NDI6NDYgR01UDQoNCg =="

HTML

<iframe class="opendoc" style="display:none;"></iframe> 

控制器

$response = new BinaryFileResponse("path to pdf");
$response->trustXSendfileTypeHeader();
$response->headers->set('Content-Type', 'application/pdf');
$str = base64_encode($response);
return new JsonResponse($str);

的Ajax

$.ajax({
        url: urlD,            
        type:'POST',              
        data: $(form).serialize(),            
        success:  function (response) {
                $('.opendoc').css('display','block');
                $('.opendoc').attr('src', 'data:application/pdf;base64,'+ response);

                }
       });

2 个答案:

答案 0 :(得分:0)

我建议您使用knp-snappy捆绑包,有很多有用的选项,其中之一是:

Display the pdf in the browser
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');
echo $snappy->getOutput('http://www.github.com');

答案 1 :(得分:0)

您创建了BinaryResponse,但发送了JsonResponse。由于JsonResponse会将内容类型设置为document / json,因此会出现错误。

你可能想做类似的事情:

$str = base64_encode(file_get_contents("path to pdf"));
$response = new Response($str);
$response->headers->set('Content-Type', 'application/pdf');
$response->trustXSendfileTypeHeader();

return $response;