同じ種類の異なる内容の多くの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