.net 下word 中的图片与文字分离
最近在做一个项目要求word 中的图片与文字分离 ,找了好久终于找到一个完美的方法
c#实现word中的图文分离
part 1: class define
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->publicclass WordSeparator:IDisposable
{
#region Constructor
public WordSeparator()
{
WordApp =new Microsoft.Office.Interop.Word.Application();
}
#endregion
#region Fields
private Microsoft.Office.Interop.Word.Application WordApp;
privateobject missing = System.Reflection.Missing.Value;
privateobject yes =true;
privateobject no =false;
private Microsoft.Office.Interop.Word.Document d;
privateobject filename =@"C:\example.rtf";
#endregion
#region Methods
publicvoid UpdateDoc()
{
d = WordApp.Documents.Open(ref filename, ref missing, ref no, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref yes, ref missing, ref missing, ref missing, ref missing);
List<Microsoft.Office.Interop.Word.Range> ranges =
new List<Microsoft.Office.Interop.Word.Range>();
foreach (Microsoft.Office.Interop.Word.InlineShape s in d.InlineShapes)
{
if (s.Type ==
Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture)
{
ranges.Add(s.Range);
s.Delete();
}
}
foreach (Microsoft.Office.Interop.Word.Range r in ranges)
{
r.InlineShapes.AddPicture(
@"c:\PathToNewImage\Image.jpg", ref missing, ref missing, ref missing);
}
WordApp.Quit(ref yes, ref missing, ref missing);
}
publicvoid SeparateImageText()
{
//初始化程序
d = WordApp.Documents.Open(ref filename, ref missing, ref no, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref yes, ref missing, ref missing, ref missing, ref missing);
List<Microsoft.Office.Interop.Word.Range> ranges =
new List<Microsoft.Office.Interop.Word.Range>();
List<string> files =new List<string>();
foreach (Microsoft.Office.Interop.Word.InlineShape s in d.InlineShapes)
{
if (s.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture
|| s.Type ==
Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapeEmbeddedOLEObject)
{
//获取图片数据
byte[] imgData = (byte[])s.Range.EnhMetaFileBits;
string file =string.Concat(Guid.NewGuid().ToString(), ".gif");
files.Add(file);
//构造图形
MemoryStream mStream =new MemoryStream(imgData);
Bitmap bmp =new Bitmap(mStream);
//保存到磁盘
bmp.Save(file);
mStream.Dispose();
bmp.Dispose();
ranges.Add(s.Range);
s.Delete();
}
}
; i < ranges.Count; i ++ )
{
Microsoft.Office.Interop.Word.Range r = ranges[i];
//替换图片
r.InsertBefore("<img src='"+ files[i] +"'>");
r.InsertAfter("</img>");
}
//退出程序
WordApp.Quit(ref yes, ref missing, ref missing);
}
///<summary>
/// 替换word中的图片
///</summary>
///<param name="serverPath">图片文件的存储物理路径</param>
///<param name="virtualPath">图片文件的标签虚拟路径</param>
publicvoid SeparateImageText(string serverPath, string virtualPath)
{
//初始化程序
d = WordApp.Documents.Open(ref filename, ref missing, ref no, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref yes, ref missing, ref missing, ref missing, ref missing);
List<Microsoft.Office.Interop.Word.Range> ranges =new List<Microsoft.Office.Interop.Word.Range>();
List<string> files =new List<string>();
foreach (Microsoft.Office.Interop.Word.InlineShape s in d.InlineShapes)
{
if (s.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture
|| s.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapeEmbeddedOLEObject)
{
//获取图片数据
byte[] imgData = (byte[])s.Range.EnhMetaFileBits;
string file =string.Concat(Guid.NewGuid().ToString(), ".gif");
files.Add(file);
//构造图形
MemoryStream mStream =new MemoryStream(imgData);
Bitmap bmp =new Bitmap(mStream);
//保存到磁盘
bmp.Save(string.Concat(serverPath, "\\", file));
mStream.Dispose();
bmp.Dispose();
ranges.Add(s.Range);
s.Delete();
}
}
; i < ranges.Count; i++)
{
Microsoft.Office.Interop.Word.Range r = ranges[i];
//替换图片
r.InsertBefore("<img src='"+string.Concat(virtualPath,"//",files[i]) +"'>");
r.InsertAfter("</img>");
}
//退出程序
WordApp.Quit(ref yes, ref missing, ref missing);
}
///<summary>
/// 替换word中的图片
///</summary>
///<param name="targetFile">目标文件</param>
///<param name="serverPath">图片文件的存储物理路径</param>
///<param name="virtualPath">图片文件的标签虚拟路径</param>
publicvoid SeparateImageText(string targetFile,string serverPath, string virtualPath)
{
filename = targetFile;
//初始化程序
d = WordApp.Documents.Open(ref filename, ref missing, ref no, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref yes, ref missing, ref missing, ref missing, ref missing);
List<Microsoft.Office.Interop.Word.Range> ranges =new List<Microsoft.Office.Interop.Word.Range>();
List<string> files =new List<string>();
foreach (Microsoft.Office.Interop.Word.InlineShape s in d.InlineShapes)
{
if (s.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapePicture
|| s.Type == Microsoft.Office.Interop.Word.WdInlineShapeType.wdInlineShapeEmbeddedOLEObject)
{
//获取图片数据
byte[] imgData = (byte[])s.Range.EnhMetaFileBits;
string file =string.Concat(Guid.NewGuid().ToString(), ".gif");
files.Add(file);
//构造图形
MemoryStream mStream =new MemoryStream(imgData);
Bitmap bmp =new Bitmap(mStream);
//保存到磁盘
bmp.Save(string.Concat(serverPath, "\\", file));
mStream.Dispose();
bmp.Dispose();
ranges.Add(s.Range);
s.Delete();
}
}
; i < ranges.Count; i++)
{
Microsoft.Office.Interop.Word.Range r = ranges[i];
//替换图片
r.InsertBefore("<img src='"+string.Concat(virtualPath, "//", files[i]) +"'>");
r.InsertAfter("</img>");
}
//退出程序
WordApp.Quit(ref yes, ref missing, ref missing);
}
#endregion
#region IDisposable 成员
publicvoid Dispose()
{
if (d !=null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(d);
d =null;
}
if (WordApp !=null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(WordApp);
WordApp =null;
}
}
#endregion
}
part 2: usage code:
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->WordSeparator w =new WordSeparator();
w.SeparateImageText();
.net 下word 中的图片与文字分离的更多相关文章
- 如何将word中的图片和文字导入自己的博客中
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- 怎样将word中的图片插入到CSDN博客中
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- 在RichTextBox控件中添加图片和文字
public void SetText(RichTextBox rtb) { rtb.Text = "在RichTextBox控件中添加图片和文字" + Environment.N ...
- 如何把word中的图片怎么导出来呢?
在办公使用word的过程中你可能经常会遇到这个问题:插入到word中的图片找不到导出来的方法,是不是很郁闷呢,别急,今天咱们研究一下把word中的图片导出来的方法(把"我的"变成你 ...
- Java 添加、删除、格式化Word中的图片
本文介绍使用Spire.Cloud.SDK for Java提供的ImagesApi接口来操作Word中的图片.具体可通过addImage()方法添加图片.deleteImage()方法删除图片.up ...
- iOS开发小技巧--即时通讯项目:使用富文本在UILabel中显示图片和文字;使用富文本占位显示图片
Label借助富文本显示图片 1.即时通讯项目中语音消息UI的实现,样式如图: 借助富文本在UILabel中显示图片和文字 // 1.创建一个可变的富文本 NSMutableAttributedStr ...
- 写带有清晰图片的博客:如何将word中的图片复制到windows live writer保持大小不变--清晰度不变
写blog的习惯,先在word写了,复制到windows live writer,再发布到博客园.word中的文章,图片有缩放比例,复制到windows live writer后图片变得不清晰.除了一 ...
- word中更改图片和标题之间的垂直距离
word中插入图片后.往往须要给图片加上标题. 你插入图片和给图片插入标题时,word用的是默认的格式给你插入的图片和标题. 假如原来的paragraph是2倍行距.你的图片和标题之间的距离也是2倍行 ...
- 利用POI抽取word中的图片并保存在文件中
利用POI抽取word中的图片并保存在文件中 poi.apache.org/hwpf/quick-guide.html 1.抽取word doc中的图片 package parse; import j ...
随机推荐
- lambda Expression的使用方法
Expression<Func<your class, bool>> whereExp = f => true;//类似1=1,初始化条件 if (!string.IsN ...
- 使用navigate导出表数据
以下内容不算技术贴,只能算是技巧贴,要做的一个操作,从数据库A中把元素A1表,导入到数据库B中B1表,且,A1表的数据是部分导出,那么有两种方法进行导出 方法1: 选择数据表,右键,选择“转存储sql ...
- Java访问重定向接口
背景:开发做了一个免登陆的接口,方便我后续给管理后台做一些小工具,问题来了,给的免登陆接口是个302如图的test_login,在重定向一个200的接口(eload_admin), 原本开始这样做:0 ...
- 2017.9.14 HTML学习总结---超链接标签图片标签
2.4 超链接标签 定义:它是指从一个对象指向另一个对象的指针,它可以是网页中的一段文字 也可以是一张图片,以实现从一个页面到另一个页面的跳转. 格式:<a href="url&qu ...
- Entity Framework的扩展库
https://github.com/jcachat/EntityFramework.DynamicFilters Provides global & scoped filters for E ...
- hadoop中compare函数
在看hadoop 的二次排序的时候,改写了下, 加了第三个参数, 本来以为是在 public int compareTo(IntPair o) { System.out.println(" ...
- React后台管理系统-品类选择器二级联动组件
1.页面大致是这个样子 2.页面结构 <div className="col-md-10"> <select name="&quo ...
- Mybatis查询报错:There is no getter for property named '*' in 'class java.lang.String
问题: 执行查询时报错:There is no getter for property named '*' in 'class java.lang.String 原因: 传过去的参数为识别.本例为 p ...
- Percona-Tookit工具包之pt-stalk
Preface We have a lot of methods to diagnose problems in our system such as strace,pstack,gs ...
- Linux 个人服务搭建脱坑实录
环境:VMware.Centos7 64位.jdk1.7.Tomcat 7 说明:本是个人的爬坑经历所总结出来的,记录一下心得.也给有需要的人提供一些帮助.引用了一些大神的笔记,非常感谢,希望大神们不 ...