0

SOAP に詳しくないことをお許しください。私は、サード パーティ ベンダーの SOAP API を通じて提供された複数の pdf ファイルを Web サーバーに保存する任務を負っています。ベンダーの API からの結果は、次のように提供されます。

    xsd:element name="content" type="xsd:base64Binary" 

次のコードで問題なくphpを使用してpdfをブラウザに出力できるようになりました。

    $document=$vendor_soap_client->getPersonDocument($pid);  
    $filename= $name . $extension;  
    header("Content-type: " . $document->mime);  
    header("Content-Disposition: attachment; filename=" . $name. $extension);  
    print($document->content);

結果の base64Binary 型から、base64_decode が必要であると推測しました。それは私の出力にたくさんのシンボルを残しました。結果を文字列に変換してからpdfに保存しようとしました。少なくとも pdf のテキストはファイルに書き込まれましたが、元の書式設定はそうではなかったという点で、これは私に近づきました。では、API から元の pdf を取得して、独自の Web サーバーに保存するにはどうすればよいでしょうか? 参考までに - はい、pdf のコンテンツは私たちのものであり、ダウンロードすることは許可されています。私はここで何かずるいことをしようとしているわけではありません。上記からサーバーにpdfを作成する方法がわかりません。さて、次の明らかな選択は、上記を実行して、各 pdf を一度に 1 つずつ保存することです。実行可能ですが、面倒です。

更新: XSD:

    <xsd:complexType name="DocumentObject">
  <xsd:all>  
   <xsd:element name="student_document_id" type="xsd:string" nillable="true"/>  
   <xsd:element name="document_label" type="xsd:string" nillable="true"/>
   <xsd:element name="document_type" type="xsd:string" nillable="true"/>
   <xsd:element name="mime" type="xsd:string" nillable="true"/>
   <xsd:element name="size" type="xsd:integer" nillable="true"/>
   <xsd:element name="content" type="xsd:base64Binary" nillable="true"/>
   <xsd:element name="private" type="xsd:boolean" nillable="false"/>
   <xsd:element name="created" type="xsd:dateTime" nillable="false"/>
   <xsd:element name="modified" type="xsd:dateTime" nillable="false"/>
   <xsd:element name="approved" type="xsd:boolean" nillable="false"/>
   <xsd:element name="link" type="xsd:string" nillable="true"/>
   <xsd:element name="student_id" type="xsd:string" nillable="true"/>
   <xsd:element name="match_context" type="xsd:string" nillable="true"/>
   <xsd:element name="reviewed_date" type="xsd:dateTime" nillable="true"/>
   <xsd:element name="review_status" type="xsd:string" nillable="true"/>
   <xsd:element name="review_comment" type="xsd:string" nillable="true"/>
   <xsd:element name="reviewed_by" type="xsd:string" nillable="true"/>
   <xsd:element name="resubmitted" type="xsd:boolean" nillable="true"/>
  </xsd:all>  

それはあなたが求めていたものですか?

file_put_contents を実行した結果は次のようになります。

%PDF-1.5 %µµµµ 1 0 obj <>>> endobj 2 0 obj <> endobj 3 0 obj <>/XObject<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]

/Annots[ 9 0 R 12 0 R] /MediaBox[ 0 0 612 792] /Contents 4 0 R/Group<>/Tabs/S/StructParents 0>> endobj 4 0 obj <> ストリーム xœµ=k“ÛÆ'ßU ¥ÿ€IŠL¼æ çÚº•Vr”xíÄR'«RîÍ…visÞ%¥(u?þ¦{0/

更新: ユーザー エラーがここでの大きな問題であることがわかりました。fopen と fwrite を実行するとうまくいきました。これは私が最初に試したことです。ただし、WinScpを使用してサーバー上のファイルを表示し、それらが書き込まれていることを確認していました...しかし、実際にpdfを表示するためにそれを使用することの結果についても考えていませんでした!! だから、彼らはずっと正しかった。でも、たくさんの反応をありがとう!

4

1 に答える 1

2

$document->contentエンコードされていない、生のファイルデータのようです。その場合、これでうまくいくはずです:

file_put_contents($filename, $document->content);

そうでない場合は、Web サービスの完全な XSD へのリンクを提供できますか?

于 2013-09-12T19:14:20.160 に答える