Bitmaps aus Word-Dokumenten extrahieren

Manche Leute lassen sich nicht davon überzeugen, Screenshots als Bilder zu versenden. Stattdessen fügen sie die Screenshots in ein Word-Dokument ein und senden dieses Dokument. Es ist möglich, mit der rechten Maustaste auf eine Bitmap in Word zu klicken und "Als Bild speichern..." zu wählen, aber das ist für viele Bitmaps zu viel Arbeit.

Daher suche ich ein Tool, das Bitmaps in ihrer ursprünglichen Auflösung aus einem Word-Dokument extrahieren kann. Es sollte unter Windows 7 x64 offline funktionieren und kostenlos sein. Es kann ein Befehlszeilentool sein.

Antworten (2)

Syncfusion bietet Dateiparsing-Bibliotheken für Word – Essential DocIO , die ebenfalls für diesen Zweck verwendet werden können.

Beispiel

Essential DocIO-extrahiertes Bild

private void ExtractImagesFromWordDocument(string inputFilePath,string outputFolderLocation)
    {
        //Create Word document instance.
        WordDocument document = new WordDocument();
        //Open Existing Word document
        document.Open(inputFilePath);

        int index = 0;
        foreach (var item in document.Visit())
        {
            //If the entity is picture then save at particular location
            if (item.EntityType == EntityType.Picture)
            {
                WPicture pic = (WPicture)item;
                pic.Image.Save(outputFolderLocation + "Image" + index + ".png", ImageFormat.Png);
                index++;
            }
        }
        document.Close();
    }

Die gesamte Suite von Steuerelementen und Bibliotheken ist kostenlos über das Community-Lizenzprogramm verfügbar , wenn Sie sich qualifizieren (weniger als 1 Million USD Umsatz). Hinweis: Ich arbeite für Syncfusion.

Vielleicht bin ich etwas ungeduldig und sollte länger auf eine Antwort warten, aber ich hatte einfach das Bedürfnis, dies zu erledigen ...

Mit der großartigen, aber kaum dokumentierten DocX-Bibliothek für C# konnte ich diese Aufgabe lösen und eine kleine Konsolenanwendung erstellen, die alle Bilder aus einem Dokument in einen Ordner extrahiert. Nach meinen kurzen Tests sind alle Bilder im PNG-Format, wenn sie aus der Zwischenablage eingefügt werden.

Der folgende Code funktioniert .docxnur für Dateien, was für mich in Ordnung ist.

using System;
using System.IO;
using Novacode;

namespace BmpFromDocx
{
    static class Program
    {
        static void Main(string[] args)
        {
            if (args.Length < 2)
            {
                PrintHelp();
                return;
            }
            var doc = DocX.Load(args[0]);
            var index = 0;
            foreach (var image in doc.Images)
            {
                var stream = image.GetStream(FileMode.Open, FileAccess.Read);
                var buffer = new byte[stream.Length];
                stream.Read(buffer, 0, buffer.Length);
                File.WriteAllBytes(Path.Combine(args[1], $"image{index}.png"), buffer);
                index++;
            }
        }

        private static void PrintHelp()
        {
            Console.WriteLine("Usage: BmpFromDocx <docx> <output path>");
        }
    }
}