C#打开WORD文件时如何连水印一起打开

Sniper 2014-03-14 10:00:34
有一个带水印的WORD文档,用WORD打开时会弹出个对话框“这张网页的某些文件不在预期的位置,是否仍要将其加载?……“,
选择是时水印会被加载,选择否时水印将不被加载。
现在尝试用C#及Microsoft.Office.Interop.Word编程处理该WORD文档,但文档加载后没有水印。
请问:如何控制文档加载后有水印?谢谢!

关键代码是:
doc = wordApp.Documents.Open(@"test.doc")
我没有查到如何控制连水印一起加载,或者控制上述那个选择是选“是”。
...全文
634 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
m01ly 2015-02-10
  • 打赏
  • 举报
回复
来学习的~顺便问下哪位大神会用代码判断上传的word文档是否含有水印??求大神
Sniper 2014-04-14
  • 打赏
  • 举报
回复
有大侠能帮忙吗?谢谢!
Sniper 2014-03-24
  • 打赏
  • 举报
回复
没有大侠遇到过这种情况吗?
Sniper 2014-03-20
  • 打赏
  • 举报
回复
并不是程序报错,而是用WORD直接打开时会有个对话框进行选择,选择“是”时水印图片加载是成功的。但是用C#调用WORD打开这个文档时,没有办法进行选择,水印图片就加载不出来了。不知道如何进行控制。 谢谢!
threenewbee 2014-03-18
  • 打赏
  • 举报
回复
这个错误是说,水印图片是外部文件加载来的,并且它和那个文档的相对路径关系不对,或者它不存在。是你文档的问题,不是你程序的问题。
Sniper 2014-03-18
  • 打赏
  • 举报
回复
是我没有问清楚: 1. 我不是要向一个WORD文件中加载水印,而是有一个有水印的WORD文件,但是我写代码加载时没有水印(水印没有加载进来) 2. 我写的是Windows窗体程序,不是WEB程序 谢谢!
风一样的大叔 2014-03-14
  • 打赏
  • 举报
回复
using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using System.Drawing; 
namespace Chen 
{ 
/// <summary> 
/// HandlerImageOpener 的摘要说明 
/// </summary> 
public class HandlerImageOpener : IHttpHandler 
{ 
public HandlerImageOpener() 
{ 
// 
// TODO: 在此处添加构造函数逻辑 
// 
} 
private string _path = ""; 
/// <summary> 
/// 水印图片路径 
/// </summary> 
public string PngPath 
{ 
get 
{ 
if (_path == "") 
{ 
_path = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["WatermarkedImagePath"]);
} 
return _path; 
} 
} 
/// <summary> 
/// 为图片加水印并写入到Response.OutputStream 
/// </summary> 
/// <param name="hc">上下文对象</param> 
public void GetNewBitMap(HttpContext hc) 
{ 
// 加载原图片 
//System.Web.HttpContext.Current.Response.Write(System.Drawing.Image.FromFile(hc.Request.PhysicalPath));
//System.Web.HttpContext.Current.Response.End(); 
Bitmap oldBmp = new Bitmap(System.Drawing.Image.FromFile(hc.Request.PhysicalPath)); 
int newWidth = oldBmp.Width; 
int newHeight = oldBmp.Height; 
if (oldBmp != null) 
{ 
// 绑定画板 
Graphics grap = Graphics.FromImage(oldBmp); 
// 加载水印图片 
Bitmap bt = new Bitmap(PngPath); 
// 水印位置控制 
int pH = GetNewPoint(newHeight, bt.Height, true); 
int pW = GetNewPoint(newWidth, bt.Width, false); 
if (newHeight < pH * 8) 
pH = pH / 2; 
if (newWidth < pW) 
pW = pW / 2 / 2; 
int pX = newHeight - pH; 
int pY = newWidth - pW - 3; 
// 添加水印 
grap.DrawImage(bt, pY, pX, pW, pH); 
// 写入到输出流 
oldBmp.Save(hc.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); 
} 
} 
// 控制宽高 
private int GetNewPoint(int oldP, int newP, bool isW) 
{ 
int p = 4; 
if (isW) 
{ 
p = 16; 
} 
if (oldP < (newP * p)) 
{ 
newP /= 2; 
if (oldP < (newP * p)) 
{ 
GetNewPoint(oldP, newP, isW); 
} 
} 
return newP; 
} 
#region IHttpHandler 成员 
bool IHttpHandler.IsReusable 
{ 
get { return true; } 
} 
void IHttpHandler.ProcessRequest(HttpContext context) 
{ 
GetNewBitMap(context); 
} 
#endregion 
} 
} 
生成.dll文件后在web.config 中配置 <!--水印图片路径--> <appSettings> <add key="WatermarkedImagePath" value="~/logo.gif"/> </appSettings> <!--引用处理函数 path为需要加水印图片的目录--> <httpHandlers> <add type="Chen.HandlerImageOpener, Chen" verb="*" path="image/*.jpg,image/*.gif,image/*.png,image/*.bmp" /> </httpHandlers> 这是是加载水印的代码,因为没有看到楼主的代码,所以其他的不好说啊

110,477

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧