2017-08-27 1 views
0

J'ai un problème d'extraction d'image. J'ai écrit ce code pour extraire toutes les images du fichier word mais ce code fonctionne pour certaines images ce qui signifie qu'il enregistre certains fichiers image mais d'autre part ce code n'extrait pas les images du fichier Word. J'utilise la bibliothèque de bureau interop.Extrait des images d'un fichier Word en 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

* » il ne sauvegarde que quelques fichiers image mais d'un autre coté ce code n'extrait pas les images du fichier Word "* - Alors le fait-il ou ça ne fait-il pas exatter les images? Votre question est vague. –

+0

Je lis des fichiers de mots à partir d'un dossier et en extrait toutes les images. Ce code 80% fois extrait toutes les images mais 20% fois il manque les images du fichier. –

+0

Oui, je ne fais que lire les fichiers docx. –

Répondre

-1

Je n'aime pas déconner avec le Presse-papiers parce que l'utilisateur pourrait être l'utiliser ...

Ainsi, au lieu je l'ai fait en utilisant le code suivant:

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 ... pourquoi le vote négatif ? –