Php 如何从解码的base64字符串获取pdf

Php 如何从解码的base64字符串获取pdf,php,base64,encode,Php,Base64,Encode,如何从这个数组下载pdf,这就是我当前的代码,我无法保存pdf。谢谢你的帮助。 这是我当前的代码: $result = $SoapClient4->getContractBill($contractId, 2019, '09'); var_dump($result); #$base64data = preg_replace('#data:application/pdf/[^;]+;base64,#', '', $result['ContractBills'][0]['Raw

如何从这个数组下载pdf,这就是我当前的代码,我无法保存pdf。谢谢你的帮助。 这是我当前的代码:

$result = $SoapClient4->getContractBill($contractId, 2019, '09');
    var_dump($result);
    #$base64data = preg_replace('#data:application/pdf/[^;]+;base64,#', '', $result['ContractBills'][0]['RawFileData']);
    $decoded = base64_decode($base64);
    $file = 'invoice.pdf';
    $file_put_contents($file, $decoded);

    $pdf_decoded = base64_decode($base64data);
    $pdf = fopen('test.pdf','w');
    fwrite($pdf,$pdf_decoded);
    fclose($pdf);
试试这个:

  • 移除“base64”(7个字符)
  • 解码字符串
  • 写入文件
注意钥匙的大小写是否正确,因为它们区分大小写<代码>'RawFileData'!='rawFileData'

在您的评论问题之后编辑

您可以将代码替换为

$result = $SoapClient4->getContractBill($contractId, 2019, '09');
file_put_contents('invoice.pdf', base64_decode(substr($result['ContractBills'][0]->rawFileData, 7)));
仅此而已。确保以正确的路径写入invoice.pdf

一个衬里的作用与以下相同:

$result = $SoapClient4->getContractBill($contractId, 2019, '09');
$file = 'invoice.pdf';
$base64raw = $result['ContractBills'][0]->rawFileData;
$base64 = substr($base64raw, 7);
$decoded = base64_decode($base64);
file_put_contents($file, $decoded);

因此,您可以决定您喜欢哪种方式。

您需要使用
rawFileData
并在开始时删除
base64,
。@MarkusZeller有没有一个我应该如何做的示例?如果我的答案对您有效,请标记为正确。感谢@Markus的帮助,我有点困惑,我怎么把它放在我的代码上?我插入了所有的最后一位代码,我得到了这个错误:未捕获错误:无法将stdClass类型的对象用作数组inAh,是的,$result['ContractBills']持有一个带有对象的数组。我会更新答案。
$result = $SoapClient4->getContractBill($contractId, 2019, '09');
$file = 'invoice.pdf';
$base64raw = $result['ContractBills'][0]->rawFileData;
$base64 = substr($base64raw, 7);
$decoded = base64_decode($base64);
file_put_contents($file, $decoded);