.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 ...
随机推荐
- ASP.NET Core - 初期准备
微软在前不久发布了.NET Core1.0(以下简称Core),由于项目需要开始对其进行研究,希望将自己踩过的坑和见解分享给大家. Core和Framework4.6是属于并行产品,前者侧重于跨平台的 ...
- Linux下安装部署RabbitMQ
在写正文之前先啰嗦几句,RabbitMQ(消息队列)的安装让我费了半天劲啊!足足折腾了2天,最后写下这篇文章总结下,其实很简单,但是你找不到错在哪个环节就会费很多无用功,如果你也遇到了安装erl后 怎 ...
- bootstrap中模态框、模态框的属性
工作中有需要用到模态框的可以看看 <div class="modal fade" id="userModal" tabindex="-1&quo ...
- 第22章 常用存储器介绍—零死角玩转STM32-F429系列
第22章 常用存储器介绍 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/firege ...
- SpringBoot学习12:springboot异常处理方式2(使用@ExceptionHandle注解)
1.编写controller package com.bjsxt.controller; import org.springframework.stereotype.Controller; impor ...
- JSP页面字符集设置
错误提示: HTTP Status 500 - /test1.jsp (line: 2, column: 1) Page directive must not have multiple occurr ...
- 微信 php 获取token 第二次失败解决办法
第一次成功了,第二次总是失败,很简单,session问题 clearstatcache(); $_SESSION = ''; $_COOKIE = ''; //获得参数 signature nonce ...
- Spring MVC 接收前端参数的方式
方式一: 普通方式接收 1 @RequestMapping("/index") 2 public String getUserName(String username) { 3 S ...
- Liunx 配置sshd服务
简介 SSH(Secure Shell)是一种能够提供安全远程登录会话的协议,也是目前远程管理Linux系统最首选的方式,因为传统的ftp或telnet服务是不安全的,它们会把帐号口令和数据资料等数据 ...
- 46个Linux面试常见问题
问题一: 绝对路径用什么符号表示?当前目录.上层目录用什么表示?主目录用什么表示? 切换目录用什么命令? 答案:绝对路径: 如/etc/init.d当前目录和上层目录: ./ ../主目录: ~/切 ...