PHP二进制数据转换成pdf

时间:2017-12-06 12:18:03

标签: php http pdf header response

我已经写了一个api到外部服务,它给我一个二进制数据的响应。现在我想创建一个PDF来正确查看数据。

API的响应标头:

0 => string 'HTTP/1.1 200 OK' (length=15)
1 => string 'Cache-Control: private' (length=22)
2 => string 'Content-Length: 275454' (length=22)
3 => string 'Content-Type: application/pdf' (length=29)
4 => string 'Server: Microsoft-IIS/8.0' (length=25)
5 => string 'model: Invariant' (length=16)
6 => string 'Content-Disposition: attachment; filename=response_3a293a37-7a00-49ca-b557-fa218f834eb4.pdf' (length=91)
7 => string 'X-AspNet-Version: 4.0.30319' (length=27)
8 => string 'X-Powered-By: ASP.NET' (length=21)
9 => string 'Set-Cookie: ARRAffinity=3d8fa41aef05715eddd28bd82d74a76f49904e3d3e55e9dbdf656e2598101182;Path=/;HttpOnly;Domain=x2c-test.sprengnetter.at' (length=136)
10 => string 'Date: Wed, 06 Dec 2017 12:12:56 GMT' (length=35)
11 => string 'Connection: close' (length=17)

PDF的名称是随机名称。

现在我试图从我的回复中得到一个pdf:

$response_pdf = file_get_contents($remote_print, true, $context);
    if($response_pdf === FALSE){
        var_dump($http_response_header);
        echo "error pdf";
    }else{
        var_dump($http_response_header);

        $base64 = "/$response_pdf/";
        $binary = base64_decode($base64);
        file_put_contents('my.pdf',$binary);
        header('Content-type: application/pdf');
        header('Content-Disposition: attachment; filename="my.pdf"');
        return $binary;

在Response中是这样的数据:

%PDF-1.5 4 0 obj <>/XObject<>>>/Group <>>> endobj 5 0 obj <>stream x��Y[O#7�+~�Uc|�<���UUU[�ݪo�IJ�I�H�ԟ�

我对二进制数据以及如何使用二进制数据创建pdf没有多少经验。所以我很乐意寻求帮助。

1 个答案:

答案 0 :(得分:0)

我可以自己回答我的问题。

首先,我使用tempnam()创建了一个tempfile,并使用rename()重命名它并给它正确的路径..然后我就在新生成的文件上执行了file_put_contents()。