2017-08-27 8 views
0

画像抽出に問題があります。私はワードファイルからすべてのイメージを抽出するためにこのコードを書いていますが、このコードはいくつかのイメージでは機能しますが、イメージファイルは保存しますが、Wordファイルからはイメージを抽出しません。私はオフィスinteropライブラリを使用しています。私は、ユーザーがそれを使用している可能性があるため、クリップボードをいじりが好きではありませんC#の単語ファイルから画像を抽出します

protected void ExtractImage(string imagename, int imagenum) 
    { 

     word.InlineShape shape = oword.ActiveDocument.InlineShapes[imagenum]; 
     int dones = oword.ActiveDocument.InlineShapes.Count;   //Counts number of images in word document 
     for(int i =1 ; i <= dones; i++) 
     { 
      shape = oword.ActiveDocument.InlineShapes[i]; 
      shape.Select(); 
      oword.Selection.Copy(); 

      if (Clipboard.GetDataObject() != null) 
      { 
       IDataObject data = Clipboard.GetDataObject(); 
       if (data.GetDataPresent(DataFormats.Bitmap)) 
       { 
        System.Drawing.Bitmap image = (System.Drawing.Bitmap)data.GetData(typeof(System.Drawing.Bitmap)); 
        image.Save(@"C:\Upload2\" + imagename, System.Drawing.Imaging.ImageFormat.Jpeg); 
        Clipboard.Clear(); 
       } 
      } 
     } 
    } 
+1

をイメージファイルをいくつか保存しますが、このコードはWordファイルからイメージを抽出しません。 "* - イメージを抽出する、または実行しませんか?あなたの質問はあいまいです。 –

+0

私はフォルダからワードファイルを読み込み、そこからすべてのイメージを抽出しています。このコードでは、80%の時間ですべての画像が抽出されますが、ファイルからの画像が失われる時間は20%です。 –

+0

はい、私はdocxファイルを読み込んでいます。 –

答えて

-1

...

ので、代わりに私はこの次のコードを使用しました:それは「*

private IEnumerable<Image> GetImagesFromXml(string xml) 
{ 
    XDocument doc = XDocument.Parse(xml); 

    var ns = doc.Root.Name.Namespace; 
    var images = doc.Descendants(ns + "part").Where(a => a.Attribute(ns + "contentType") != null && a.Attribute(ns + "contentType").Value.Contains("image")) 
    .Select(a => new { Name = a.Attribute(ns + "name").Value, Type = a.Attribute(ns + "contentType").Value, D64 = a.Descendants(ns + "binaryData").First().Value, Compression = a.Attribute(ns + "compression").Value }); 

    return images.Select(i => Image.FromStream(new MemoryStream(Convert.FromBase64String(i.D64)), false, false)); 
} 
+0

erm ...なぜ否定的な投票? –

関連する問題