В общем, есть много Word'ов, которые я обрабатываю через interop и пытаюсь вытянуть картинки, что бы их сохранить отдельно.
До сего момента я просто брал InlineShapes и сохранял их.
Однако, попался хитрый Word, где кол-во InlineShapes=0 и есть просто обычный Shape, который имеет Id=17(Т.е текстовый) и в него вписана картинка.
Я копался в свойствах этого Shape, но не нашел каких-либо свойств в которых могла бы хранится картинка.
Как я могу достать картинку из этого Shape и сохранить ее?
Да, есть вариант конвертировать все в docx, а потом открыть zip'ом и все такое..., но это крайний случай.
P.S Тег VBA так как работа с interop+- похожа на VBA=> VBAшное решение на 99% мне подойдет.
Собственно у вас получается, что inlineShape вставлен в Shape. Если преобразовать Shape в InlineShape, то получим рисунок с рамкой, а это не совсем то, что нужно.
Есть вариант с использованием OpenXML
Надо поставить референс на NugetPackage DocumentFormat.OpenXml
using DocumentFormat.OpenXml.Packaging;
Далее мы проходим по всем внедренным изображениям и сохраняем
string document = @"D:\ttt.docx";
using (WordprocessingDocument wordprocessingDocument =
WordprocessingDocument.Open(document, false))
{
var imageParts = wordprocessingDocument.MainDocumentPart.ImageParts;
foreach (var imagePart in imageParts)
{
var uri = imagePart.Uri;
var filename = uri.ToString().Split('/').Last();
var stream = wordprocessingDocument.Package.GetPart(uri).GetStream();
Bitmap b = new Bitmap(stream);
b.Save(@"D:\" + filename);
}
}
В данном способе мы сохраняем любые внедренные изображения независимо от места внедрения.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости