я работаю над приложением для чтения изображений из нескольких файлов слов и сохранить их в одном файле слова, используя Microsoft.Office.Interop.Word
в C#
EDIT: Мне также нужно сохранить копию изображений в файловой системе, поэтому мне нужно изображение в растровом или подобном объекте.
This моя реализация до сих пор, который работает отлично:Чтение изображения из файлов Word, используя C# Word, API без использования буфера обмена
foreach (InlineShape shape in doc.InlineShapes)
{
shape.Range.Select();
if (shape.Type == WdInlineShapeType.wdInlineShapePicture)
{
doc.ActiveWindow.Selection.Range.CopyAsPicture();
ImageData = Clipboard.GetDataObject();
object _ob1 = ImageData.GetData(DataFormats.Bitmap);
bmp = (Bitmap)_ob1;
images[i++] = bmp;
/*
bmp.Save("C:\\Users\\Akshay\\Pictures\\bitmaps\\test" + i.ToString() + ".bmp");
*/
}
}
У меня есть:
- Выбранные изображения как
InlineShapes
- Скопировал форму в буфер обмена
- Сохранена форма в буфере обмена в
DataObject
- Извлечен из формы
DataObject
в форматеBitmap
и хранится в объектеBitmap
.
Мне сказали воздержаться от использования буфера обмена в области автоматизации Word, и использовать API для Word, вместо этого. Я прочитал об этом и нашел SO answer, заявив то же самое.
Я посмотрел много реализаций чтения изображений из файлов Word, на MSDN
, SO
и т.д., но не мог найти без использования буфера обмена.
Как читать изображения из файлов Word с помощью API Word из Microsoft.Office.Interop.Word
пространства имен без использования буфера обмена?
Это причина, по которой не использовать буфер обмена - это память? если да, не можете ли вы удалить объект сразу после сохранения изображения? Также удалить изображение \ объект из буфера обмена? – alsafoo
Нет, память не связана с тем, что вы не используете буфер обмена. Я хочу придерживаться стандартных API-интерфейсов, предоставляемых Interop Word, а не обходного пути к буферу. –
Вы указываете «... и сохраняете их в одном файле слова». Если вы действительно хотите перенести изображения непосредственно на другой документ Word, вы должны использовать TargetRange.FormattedText = shape.Range.FormattedText –