各PDFのPDFバイトデータを含むリスナーの配列を適切に反復処理し、それぞれを個別のテキストファイルに書き込む方法はありますか? 私はこれに 3 日間取り組んできましたが、最初の 1 つしか書けませんでした。
編集:これは、私がそれを取り除いた新しいコードです:
foreach($xml->DocumentPDFs->DocumentPDF as $value) {
$value = $value->PDFBytes;
$binary = base64_decode($value);
file_put_contents($xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf", $binary);
}
私はこれを使用していました:
$docarr = array();
foreach($xml->DocumentPDFs as $DocumentPDFs){
foreach ($DocumentPDFs->DocumentPDF as $DocumentPDF) {
$docarr[] = $DocumentPDF->PDFBytes;
foreach ($docarr as $pdfbyte) {
$docfiles = $xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . '.txt';
$doctxt = fopen($docfiles,"w");
write($doctxt,$pdfbyte);
fclose($doctxt);
}
}
}
何らかの理由で、最初のチャンクを繰り返し処理し続け、それを印刷してからそこで停止します。
新しい編集- XML 応答を simplexml_load_file にロードしているだけです。これは $xml->DocumentPDFs の print_r です:
SimpleXMLElement Object
(
[DocumentPDF] => Array
(
[0] => SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAo...
[DocumentType] => CONTENT
)
[1] => SimpleXMLElement Object
(
[Name] => LLC_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0Z...
[DocumentType] => CONTENT
)
[2] => SimpleXMLElement Object
(
[Name] => Demo Document.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KNiAwIG9iago8PAovUGFyZW5...
[DocumentType] => CONTENT
)
[3] => SimpleXMLElement Object
(
[Name] => CertificateOfCompletion_4b79ca0d-bbc4-4b2b-9993-295755d3b3ad.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago...
[DocumentType] => SUMMARY
)
)
)
$xml->DocumentPDFs->DocumentPDF の print_r:
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoRDoyMDEzMD...
[DocumentType] => CONTENT
)
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoRDoyMD...
[DocumentType] => CONTENT
)
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoRDoyMDEzMDkx...
[DocumentType] => CONTENT
)
SimpleXMLElement Object
(
[Name] => Corporate_Information.pdf
[PDFBytes] => JVBERi0xLjQKJfv8/f4KMiAwIG9iago8PAovTW9kRGF0ZSAoR...
[DocumentType] => CONTENT
)
何らかの理由で DocumentPDF が正しく返されますが、DocumentPDF にドリルダウンすると、基本的に同じ PDF が返されます。何故ですか?
新しい編集- したがって、foreach 呼び出しを に変更$xml->DocumentPDFs->DocumentPDF->PDFBytes as $value
し、同じアイテムに対して print_r を実行すると、DocumentPDF の印刷は同じものを返しますが、DocumentPDF の印刷は 1 つのオブジェクトを返します。私が見る限り、正しく解析しています。
さらに新しい編集- foreach ループを次のように変更しました。
foreach($xml->DocumentPDFs as $DocumentPDFs) {
foreach ($DocumentPDFs->DocumentPDF as $DocumentPDF) {
foreach ($DocumentPDF->PDFBytes as $pdfbytes) {
$binary = base64_decode($pdfbytes);
file_put_contents($xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf", $binary);
}
}
}
その後、再度印刷を行ったところ、DocumentPDF の印刷物に適切な情報が印刷されるようになりました。ただし、すべてのPDFを書き出すことはまだできません。何かご意見は?
最新の編集- だから私はそれを通常の配列にしました:
$json = json_encode($xml);
$array = json_decode($json,TRUE);
foreach($array['DocumentPDFs']['DocumentPDF'] as $DocumentPDF){
$binary = base64_decode($DocumentPDF['PDFBytes']);
file_put_contents($xml->EnvelopeStatus->EnvelopeID . "/" . $xml->EnvelopeStatus->DocumentStatuses->DocumentStatus->Name . ".pdf", $file);
}
しかし、それはまだ最後のPDFを印刷しているだけです。私は何を間違っていますか?!