2017-08-27 4 views
0

Ich habe ein Problem bei der Bilderfassung. Ich habe diesen Code geschrieben, um alle Bilder aus der Word-Datei zu extrahieren, aber dieser Code funktioniert für einige Bilder bedeutet, dass er einige Bilddateien speichert, aber auf der anderen Seite extrahiert dieser Code keine Bilder aus der Word-Datei. Ich benutze die Office-Interop-Bibliothek.Bilder aus Word-Datei in C extrahieren #

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

* it“ speichert einige Bilddateien, aber auf der anderen Seite extrahiert dieser Code keine Bilder aus Word-Datei "* - Also macht es oder nicht es die Bilder extrahieren? Deine Frage ist vage. –

+0

Ich lese Wortdateien aus einem Ordner und extrahiere alle Bilder daraus. Dieser Code extrahiert 80% mal alle Bilder aber 20% mal die Bilder aus der Datei. –

+0

Ja, ich lese gerade docx-Dateien. –

Antwort

-1

Ich bin nicht mit der Zwischenablage verwirren mag, weil der Benutzer es ...

So verwenden könnte, stattdessen habe ich dies mit dem folgenden Code:

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 ... warum die negative Abstimmung ? –

Verwandte Themen