PHP + Word

画像



同じ種類の異なる内容の多くのWordファイルを作成する必要がある場合はどうすればよいですか? たとえば、フォーム、領収書に記入します。



3つのオプションがあります。

1)Wordドキュメントを操作するためにライブラリの1つを使用する

2)ドキュメントをdocx形式で保存し、アーカイバで開くと、「\ word \ document.xml」が表示されます-str_replaceで作業できる純粋なxml(ヘルプについてはEnuriruに感謝します)

3)ほとんどの作業を行うサードパーティのサービスを使用する



最初のオプションはすぐに削除されました、なぜなら 複雑なフォーマットのドキュメントを作成する必要があり、手動で作成し、各行に多数のパラメーターを処方する必要がありましたが、時間も要望もありませんでした。



2番目のオプションは、.docx形式のWord文書を操作する場合に適していますが、残念ながら.doc形式をサポートしていません



3番目のオプションを開発する過程で、興味深いソリューションLiveDocxに出会いました



利点:

-テンプレートファイルは、Wordを使用して通常の方法で作成できます。

-doc、docx、rtf、pdf形式のドキュメントのプレゼンテーション

-htmlやXMLを介してWord文書を表示する必要はありません。

-接続のしやすさ

-信頼性-サービスは長期間存在し、Zendの既製のライブラリもあります

短所:

-無料版では、1日に生成されるドキュメントの上限は250です

-テンプレートを変更することはできません(たとえば、データベース内の要素の数と同じ行数を持つテーブルを生成することはできません)







これは、顧客から送信されたファイルの外観です。











始めましょう。



1)まず、テンプレートをマークアップする必要があります。 ファイルを開き、特別なmergeField Word変数で必要なフィールドをマークします。これはWord 2007で行われる方法です。

-挿入=>高速ブロック=>フィールド

ウィンドウが表示されます。







フィールドのタイプを選択します:MergeField =>フィールド名に変数の名前を書きます=> OKをクリックします



したがって、ドキュメント全体をマークアップすると、次のような結果が得られます。











ドキュメントを保存し、アプリケーションのディレクトリに配置します。



2)コードを操作しましょう



LiveDocx Webサイトに登録し、ログインとパスワードを取得します。



Zend Frameworkの幸せ/不幸な所有者であれば、すべてが非常に簡単で、LiveDocxのサポートはすぐに利用できます。



//             $livDoc = new Zend_Service_LiveDocx_MailMerge(array( 'username' => 'yourusername', 'password' => 'yourpassword' )); //     mergeFields  Word  $livDoc->assign('orderNum',' '); $livDoc->assign('orderDay',date('d', ' ')); //          $documentPath = 'contract_bid_for_customer.doc'; $livDoc->setLocalTemplate($documentPath); //      $livDoc->createDocument(); $doc = $livDoc->retrieveDocument('doc'); //      header("Cache-Control: public"); header("Content-Description: File Transfer"); $fileName = ".doc"; header("Content-Disposition: attachment; filename=$fileName"); header("Content-Type: application/msword"); header("Content-Transfer-Encoding: binary"); echo $doc; die;
      
      







プレーンなphpを好む場合は、空腹でもありません。



作業には、付属のsoapモジュールが必要になります。ほとんどの場合、デフォルトで有効になっていますが、状況は次のとおりです。

phpinfo();

SOAPセクション

Soapクライアントが有効で、Soapサーバーが有効になっているはずです。



  //  WSDL  ini_set ('soap.wsdl_cache_enabled', 0); //    date_default_timezone_set('Europe/Moscow'); //    Soap       $soap = new SoapClient('https://api.livedocx.com/1.2/mailmerge.asmx?WSDL'); $soap->LogIn( array( 'username' => 'yourusername', 'password' => 'yourpassword' ) ); //     $data = file_get_contents('contract_bid_for_customer.doc'); //    .doc    $soap->SetLocalTemplate( array( 'template' => base64_encode($data), 'format' => 'doc' ) ); //    $fieldValues = array ( 'orderNum' => ' ', 'orderDay' => ' ' ); //      c      SOAP function assocArrayToArrayOfArrayOfString ($assoc) { $arrayKeys = array_keys($assoc); $arrayValues = array_values($assoc); return array ($arrayKeys, $arrayValues); } //     LiveDocx  $soap->SetFieldValues( array ( 'fieldValues' => assocArrayToArrayOfArrayOfString($fieldValues) ) ); //   $soap->CreateDocument(); $result = $soap->RetrieveDocument( array( 'format' => 'doc' ) ); $doc = base64_decode($result->RetrieveDocumentResult); //    SOAP $soap->LogOut(); //    header("Cache-Control: public"); header("Content-Description: File Transfer"); $fileName = ".doc"; header("Content-Disposition: attachment; filename=$fileName"); header("Content-Type: application/msword"); header("Content-Transfer-Encoding: binary"); echo $doc; die;
      
      







3)出力には、このようなファイルがあります







LiveDocxは、DOCX、RTF、PDFなどの他の形式もサポートしています。



詳細はこちらをご覧ください:

livedocx.com

phplivedocx.org/articles/getting-started-with-phplivedocx

blog.zendguru.com/2010/02/13/creating-word-processing-document-using-zend_service_livedocx



All Articles