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

3

我该如何从这个数组下载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);

你需要使用 rawFileData 并移除开头的 base64, - Markus Zeller
@MarkusZeller,有没有一个示例可以告诉我应该怎么做? - Michael
如果我的回答对您有用,请标记为正确。 - Markus Zeller
1个回答

2
尝试这样做:
  • 去掉 'base64,' (7个字符)
  • 解码字符串
  • 写入文件
file_put_contents('test.pdf', base64_decode(substr($result['ContractBills'][0]->rawFileData, 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);

因此,您可以决定您更喜欢的方式。


谢谢你的帮助,@Markus。我有点困惑,我该如何将它放到我的代码中? - Michael
我插入了所有的最后一段代码,但是出现了这个错误:Uncaught Error: Cannot use object of type stdClass as array in。 - Michael
啊,是的,$result['ContractBills'] 保存了一个对象数组。我会更新答案。 - Markus Zeller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接