docx ドキュメントを読み取り、一部の MS コンテンツ コントロール値を削除してから、すべての MSWord コンテンツとスタイル要素を保持しながら同じ docx ドキュメントを再作成できる API または PHP 手法を見つけようとしています。
これがどのように役立つのか疑問に思うかもしれません。たとえば、次のように MSWord で質問を設定できます。
The sky is blue in colour.
次に、処理されたファイルを MSWord で表示すると、次のように表示されます。
The Sky is in colour.
一方では、コンテンツ コントロール要素から「青」のデータをデータベースに抽出できます。一方、他のエンド ユーザーは、「回答」の青色を明らかにせずに、処理されたファイルを MSWord で表示できます。なんてクールなんだ。
私が念頭に置いている考えは、一般的に次のようなものです。
1. MSWord で作成された docx ファイルを開きます (MSWord 2007 以降)。このファイルには、カスタム コンテンツ コントロール要素 (開発者の MSWord/Visual Studio で作成したもの) とともに、通常の MSWord テキストとスタイリング要素が含まれており、(疑似) のようになります。
... some standard MS styles or runs ...
...<SdtRun> The sky is </SdtRun>
<Sdt Content Control attribute: colour>
<Sdt Content Control value> blue** </Sdt Content Control value>
</Sdt Content Control attribute>
<SdtRun> in colour.></SdtRun>
... ...
2.値に含まれる空白を保持しながら、コンテンツ コントロール要素内の値を削除します。
3. 指定されたコンテンツ コントロール要素の値を使用せずに、新しい MSword ドキュメントを生成します。通常の MSWord テキストとスタイル要素はすべて保持されます。または、新しく生成された docx は、元のコンテンツ コントロール タグと空白を静的テキスト形式で保存しなくても実行できます。
4. コンテンツ コントロール バインディング テクニックを適用せずに上記を実現します (コンテンツ コントロール要素をバインドしたくない場合もありますが、それ自体は別のトピックです)。
課題は、新しい MSWord docx を作成し、定義済みのテンプレートを使用せずにすべての標準 MSWord コンテンツ (テキスト、スタイルなど) を保持することです。私は API をかなり調べましたが、MSWord docx ドキュメントの読み取りと書き込みの両方ができるものを見つけることができないようです。事前に作成されたテンプレート (phpdocx など) に書き込むことができるものはごくわずかです。
上記のアプローチが適切かどうかはわかりませんが、その要点は、元のドキュメントのコンテンツ、スタイル、およびレイアウトを破壊することなく、docx ドキュメントからコンテンツ コントロール値を削除することです。ソリューションには、
(i) XML API を介して document.xml 自体をターゲットにするか、
(ii) docx API を介してネイティブ docx をターゲットにするか、
(iii) 共有したいその他の手法が含まれる可能性があると思います。
いくつかの指針を共有できる人はいますか?
=======2013年2月23日に詳細を追加========
元の質問に文脈を与えるために、もう少し共有したいと思います。私が達成しようとしていることの要点は、人々が編集可能な MSWord テンプレートを介してデータベースにデータをアップロードする方法を作成することです。
このような使用例としては、Web ページを介して MSWord ドキュメントをアップロードするだけで、MSword でオンザフライでオンライン調査フォームを作成し、これらのフォームをアップロードし、これらの調査フォームをオンラインですぐに起動したいマーケティング調査会社が挙げられます。docx 自体では、固定長のテンプレートによって大幅に制限されずに、同じフォーム全体でデータ フィールドのプレースホルダー (つまり、コンテンツ コントロール タグ) を柔軟にコピー アンド ペーストすることを望む人もいます。
固定長固定レイアウトのシナリオでは、データ バインディングが理想的でした。ただし、この場合、エンド ユーザーはテンプレートを簡単に編集できません。データ バインドされたタグをコピー アンド ペーストすることは、n 番目のコピー アンド ペースト タグ間で同じ値を複製することにもなるためです (MSword は自動的にそれを行います)。customXml からではなく document.xml から値を直接解析する別のアプローチを試してみたところ、document.xml から sdt ノードを抽出し、特定のコンテンツ コントロール タグに意味を割り当ててノードごとに識別するだけで、必要なデータ構造を再構築できました。属性。
「blip」ノードを使用して画像を解析することさえできましたが、custom.XML からはまだその方法を見つけていません。この場合、ユーザーはイメージ タグを含むコンテンツ コントロール タグを無制限に複製でき、これらのタグから値を取得することもできます。
最後に、アップロードした元の docx の特定の「デフォルト」コンテンツ コントロール値が削除された「パブリック」バージョンが返されることを望む人もいるかもしれません。したがって、上記の質問が提起されました。phpWord などのさまざまな API について詳しく調べます。その間、私はあなたからもっと多くのことを聞きたいと思っています。