2011-12-27 23 views
0

私はWord(.docx)ドキュメントを生成していますが、そこに既に存在するドキュメントにカスタムタグの代わりに図、イメージを挿入する方法の問題が発生しています。しかし、最初はいくつかの.RTFファイルからドキュメントを作成し、 "Altchunk"アプローチを使用して.RTFをテンプレートdocのコンテンツコントロールに挿入します。これらの.RTFファイルには、カスタムタグが含まれています。「< ElementType = "Diagram" Name = "Somename" > "のように表示され、次のような新しい行がドキュメントに表示されます(そして、ドキュメントにどのように多くのこれらのタグになります) .......Openxml sdk。

<のElementType = "ダイアグラム" NAME = "図のいくつかの名前を" >

....... ググそれはタグをイメージで置き換える方法の良いアプローチを見つけることができません。 最初にイメージの名前を認識するためにタグを読み取る必要があるので、タグの代わりにどのイメージが表示されるのかを知ってから、ドキュメントからタグ(テキストのみ)を削除し、その場所に、画像の名前。だからかなり複雑ですが、誰かが分かち合う良いアイデアを持っていることを願っています。おかげ

私はもう少し具体的なこの問題を説明したいと思い

1)altchunk方法については、私はちょうど私がテンプレートとして使用し、私はワード文書に入れたコンテンツコントロールを見つけ、そして私をrtf文字列を持っている、私はそのCCの後にaltchunkを挿入する。

private void ReplaceContentControlWithRTF(MainDocumentPart mainPart, string tagName,  string rtfString) 
{ 
       SdtBlock sb = mainPart.Document.Body.Descendants<SdtBlock>().Where(r => r.SdtProperties.GetFirstChild<Tag>().Val == tagName).Single(); 
       string altChunkId = "altChunkId" + altChunkIdNumber++; 
       AlternativeFormatImportPart chunk = mainPart.AddAlternativeFormatImportPart(AlternativeFormatImportPartType.Rtf, altChunkId); 
       MemoryStream s = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(rtfString)); 
       chunk.FeedData(s); 
       AltChunk altChunk = new AltChunk(); 
       altChunk.Id = altChunkId; 
       DocumentFormat.OpenXml.OpenXmlElement parent = sb.Parent; 
       parent.InsertAfter(altChunk, sb); 
       sb.Remove(); 
       mainPart.Document.Save(); 

} 

答えて

1

私の答えは非常に長くなったので、私はそれを読みやすくするために、いくつかの見出しと内容を分離します:):
私の方法は、以下のようになります。あなたがすでに良い方法を見つけていない限り、それぞれを考慮する必要があります。文書

を連結

私はあなたがaltchunkメソッドを使用する場合、あなたは、最初の文書(元の)のXMLを持っているし、すべての追加文書がエンコードされていることとします。 文書全体のxmlツリーに簡単にアクセスできるので、文書の内容を連結する方がよいでしょう。特別な方法で処理する必要があり、より複雑にする必要があるため、イメージ、ハイパーリンクなどを連結ドキュメントで使用しないと、非常に簡単です。

また、ドキュメントを連結する前に、それぞれのドキュメントに画像を挿入することもできます。今すぐ文書

の中のプレースホルダとして

使用コンテンツコントロール、ドキュメントにアクセスすることができ、すでにあなたを想定し、あなたはあなたのイメージを表示する場所で、Word文書にコンテンツコントロールを配置してのタグを設定する必要がありますそれぞれの値をあなたのコードで検索して、画像を挿入するための適切な場所を探してください。コンテンツコントロールに関する基本的な情報は、http://office.microsoft.com/en-us/help/content-controls-HA010030750.aspxです。

挿入XMLタグおよび画像のバイト

文書に画像を挿入するために、あなたは画像を表示したい場所にいくつかのXMLタグを挿入するだけでなく、含むバイトを追加する必要がありますだけでなく、画像はImagePartです。私はここでそれを行う方法を説明するチュートリアルを見つけました(私は自分自身に従っていませんが): http://msdn.microsoft.com/en-us/library/ee342530%28v=office.12%29.aspx

は、OpenXMLのSDKに簡単にあなたの仕事を行うためにのOpenXML SDK 2.0生産性向上ツール

を使用することを検討してください、私はあなたがMicrosoftからSDK生産性向上ツールを使用することをお勧めします。 OpenXML SDKの一部としてドローロードすることができ、MS Office OpenXMLドキュメントを開き、その内容をXML形式で表示し、再作成に必要なC#コードを表示することさえできます。こちらからダウンロードできます:http://www.microsoft.com/download/en/details.aspx?id=5124

他のご質問がある場合は、お気軽にお問い合わせください:)。

+0

「コンテンツコントロールをドキュメントのプレースホルダとして使用する」はい、私のイメージがどこに表示されるのかを知ることはいいですが、このドキュメントはさまざまな入力データ(rtfファイル)を使って何度も生成されるはずです。幾つ、どこに画像が配置されるかを知ることはできません。しかし、すべてのrtfファイルを挿入すると、新しい段落のテキストのように見えるカスタムタグで.docxファイルが作成されます。だから私はそれらを見つけなければなりません、私はその名前を読みました。 – Sergio

+0

あなたの問題は何か分かりません。あなたは質問に記載されているようにそれをする必要があります;)。 http://msdn.microsoft.com/en-us/library/ee342530%28v=office.12%29.aspxでチュートリアルを読む。ドキュメントにイメージを挿入する方法について説明します。あなたのカスタムタグを見つけたらそれを削除し、親のpagargaphノードを取得してそこに画像タグを挿入し、画像部分を文書に挿入します。リンクには、画像を挿入する方法を説明するかなり詳細な説明が含まれていると思います。 –

+0

これでほぼ終わりですが、ページの使用可能なスペースの幅を取得する方法に関する最後のヒントを教えてくれますか?私はそれがピクセルではなく、いくつかの単位であると思います。 – Sergio

関連する問題