图像(非内嵌形状)从 Word 到剪贴板再到文件
本文关键字:Word 剪贴板 文件 图像 | 更新日期: 2023-09-27 18:35:18
我有一个Word文档(在下面的代码中称为"doc")带有一堆.jpg图像。其中一些有环绕的文本(= 形状),其中一些没有(= 内联形状)。我能够像这样保存内联形状:
InlineShape ils = doc.InlineShapes[1];
ils.Select();
application.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Bitmap)) {
Image image = (Image)data.GetData(DataFormats.Bitmap, true);
image.Save("c:''image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
但是,如果我尝试通过用这些替换前两行来获得其他的——
Shape s = doc.Shapes[1];
s.Select();
– 它行不通。如果我用"数据"检查格式。GetFormats()" 我注意到位图没有列出,这解释了为什么它不起作用。相反,它列出了"办公室绘图形状格式"。我想我应该尝试以某种方式将形状转换为内联形状,但我无法使其工作。当我尝试这样做时——
s.ConvertToInlineShape();
– 我收到"无效参数"异常。
好的,问题似乎是我试图在错误的时间转换它。如果我遍历所有形状并在尝试执行其他任何操作之前转换它们,它工作正常。
int number = doc.InlineShapes.Count;
MessageBox.Show(number.ToString()); // 0 to begin with
foreach (Microsoft.Office.Interop.Word.Shape s in doc.Shapes) {
MessageBox.Show(s.Type.ToString());
if (s.Type.ToString() == "msoTextBox") {
MessageBox.Show(s.TextFrame.TextRange.Text);
} else if (s.Type.ToString() == "msoPicture") {
s.ConvertToInlineShape();
}
}
number = doc.InlineShapes.Count;
MessageBox.Show(number.ToString()); // Now it's 1 as it should be
InlineShape ils = doc.InlineShapes[1];
ils.Select();
application.Selection.Copy();
IDataObject data = Clipboard.GetDataObject();
if (data.GetDataPresent(DataFormats.Bitmap)) {
Image image = (Image)data.GetData(DataFormats.Bitmap, true);
image.Save("c:''image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}