2011-01-06 6 views
2

Interop.WordとC#で画像に問題があります。生成しようとしているドキュメントのヘッダにイメージを追加したいと思います。私はこのコード取り組ん完全C#Interop.Wordプロジェクトリソースフォルダから画像を追加する

section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes.AddPicture(@"C:\Logo.jpg", ref x, ref x, ref x, ref x, ref x, ref x, ref x); 

問題は、プロジェクトを公開した後、おそらくユーザーのCフォルダにはLogo.jpgはないだろうので、私はコード内の"C:\Logo.jpg"を持つことができないということである持っています。イメージはすでにプロジェクトのリソースフォルダにあります。前にImage.FromFile("Logo.jpg")を使用しましたが、.AddPictureには画像ではなく文字列が必要です。

アイデア?

- 編集 - ネット経由

ソウ本:

string anyPath = @"C:\logo.jpg"; 
Properties.Resources.logo.Save(anyPath); 
section.Headers.[...].Shapes.AddPicture(anyPath, ... 

が、その後、私はまだGDI +で一般的なエラーを取得やExternalExceptionが未処理でした。あなたが使用

答えて

0

カント...

section.Headers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Shapes.AddPicture(@"Logo.jpg", ref x, ref x, ref x, ref x, ref x, ref x, ref x); 

は、絶対位置のファイル

EDITの代わりにbinフォルダ内の画像ファイルの相対位置を使用し

あなたが生成するためにこれを使用することができ

相対リンクに基づく絶対ファイルの場所。 は、ランダムなファイルのような誰もがされていない言及しないように、私は彼らが(多分)、様々な書き込み権限を持っているので、あなたの更新方法は、ビスタ/ Windows7の上、あまりにも素晴らしい仕事だろうとは思わない

string relative = @"images\Logo.jpg"; 
System.IO.FileInfo fi = new System.IO.FileInfo(Application.ExecutablePath); 
string absolute = System.IO.Path.Combine(fi.Directory.FullName, relative); 

使用してのWinFormsに依存しています彼らのCドライブに追加されました。

私はしぶしぶ私

+0

既に試してみましたが、役に立たないです。また、画像のプロパティを編集し、Build ActionをResourceを埋め込み、Copy to Output Directoryにコピーするように設定しましたが、何も起こりませんでした。 – iamnobody

+0

あなたはそこにチェックを入れましたか? Console.out.println(File.Exists( "logo.jpg"))のようなことをすることで、 ? – Kurru

+0

falseを返します。しかし、ファイルはすでに私のresource.resxと私のリソースフォルダにあります。私は今本当に混乱しています。どのようにこれを修正することができますか?ところで、Kurruの時間に感謝します。 :) – iamnobody

0

...アプリケーションフォルダにないと、このような重要なファイルのためにその悪い習慣だと思う - しかし、成功した - でした:

if (!File.Exists("singleright.png")) 
{ 
object obj = Properties.Resources.singleright; 
System.Drawing.Bitmap rs = (System.Drawing.Bitmap)(obj); 
rs.Save("singleright.png"); 
} 
insertionPoint.InlineShapes.AddPicture("singleright.png", ref LinkToFile, ref SaveWithDocument); 

これは、作業を行い - そしてそれは動作します私の言葉 - アドインを出版したときに外国のコンピュータでも。しかし、私はまだそれを好きではありません。クライアントコンピュータ上のリソースからイメージファイルを保存する必要はありません。リソースを直接使用できるようにする必要があります。

0

私は同じ状況に陥っています。以前に保存しなくてもInlineShapesというイメージリソースを直接使用する方法を見つけることができませんでした。

これらのファイルを保存するための素晴らしいフォルダはMy.Computer.FileSystem.SpecialDirectories.Tempです。

0

私はこの記事を見て、リソースファイルから画像を追加するのは簡単です。方法を見つけて、ローカルマシンに保存せずに私のために働いてください。

// PictureContentContorl       
    Microsoft.Office.Tools.Word.PictureContentControl ct; 
    // Removing the control if already exists 
         Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument).Controls.Remove("HeaderLogo"); 
    // adding control to a range rng 
          ct = Globals.Factory.GetVstoObject(Globals.ThisAddIn.Application.ActiveDocument).Controls.AddPictureContentControl(rng, "HeaderLogo"); 
          ct.Image = Properties.Resources.my_logo; 
          ct = null; 

誰かに役立つかもしれません。

関連する問題