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

Source: https://habr.com/ru/post/J119551/


All Articles