不通过虚拟打印机word转tif
2008-03-25 08:37
381 查看
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Office.Interop.Word;
using System.IO;
using System.Reflection;
using oWord = Microsoft.Office.Interop.Word;
using System.Drawing.Imaging;
using System.Runtime.Serialization.Formatters.Binary;
/**//// <summary>
/// 不通过虚拟打印程序WordToTif
/// </summary>
/// <param name="wordPath">word全路径</param>
/// <param name="outputFilePath">保存文件路径</param>
/// <param name="handle">Handle</param>
public static void PrintWortWithClipBoard(string wordPath, string outputFilePath,IntPtr handle)
...{
oWord.ApplicationClass word = new oWord.ApplicationClass();
Type wordType = word.GetType();
//打开WORD文档
oWord.Documents docs = word.Documents;
Type docsType = docs.GetType();
object objDocName = wordPath;
oWord.Document doc = (oWord.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] ...{ objDocName, true, true });
Microsoft.Office.Interop.Word.Range mg = doc.Content;
mg.Select();
mg.CopyAsPicture();
System.Windows.Forms.IDataObject data = System.Windows.Forms.Clipboard.GetDataObject();
Object obj = null;
if (data.GetDataPresent(DataFormats.MetafilePict))
...{
obj = data.GetData(DataFormats.MetafilePict);
Metafile mf = ClipboardMetafileHelper.GetEnhMetafileOnClipboard(handle);
Image img = mf;
img.Save(@outputFilePath, ImageFormat.Tiff);
}
//退出WORD
wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
...{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
...{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing.Imaging;
using System.Runtime.InteropServices;
namespace ThreadStudy
...{
class ClipboardMetafileHelper
...{
[DllImport("user32.dll")]
static extern bool OpenClipboard(IntPtr hWndNewOwner);
[DllImport("user32.dll")]
static extern bool EmptyClipboard();
[DllImport("user32.dll")]
static extern IntPtr SetClipboardData(uint uFormat, IntPtr hMem);
[DllImport("user32.dll")]
static extern bool CloseClipboard();
[DllImport("gdi32.dll")]
static extern IntPtr CopyEnhMetaFile(IntPtr hemfSrc, IntPtr hNULL);
[DllImport("gdi32.dll")]
static extern bool DeleteEnhMetaFile(IntPtr hemf);
// Metafile mf is set to an invalid state inside this function
static public bool PutEnhMetafileOnClipboard(IntPtr hWnd, Metafile mf)
...{
bool bResult = false;
IntPtr hEMF, hEMF2;
hEMF = mf.GetHenhmetafile(); // invalidates mf
if (!hEMF.Equals(new IntPtr(0)))
...{
hEMF2 = CopyEnhMetaFile(hEMF, new IntPtr(0));
if (!hEMF2.Equals(new IntPtr(0)))
...{
if (OpenClipboard(hWnd))
...{
if (EmptyClipboard())
...{
IntPtr hRes = SetClipboardData(14 /**//**//**//*CF_ENHMETAFILE*/, hEMF2);
bResult = hRes.Equals(hEMF2);
CloseClipboard();
}
}
}
DeleteEnhMetaFile(hEMF);
}
return bResult;
}
private const int CF_ENHMETAFILE = 14;
[DllImport("user32.dll")]
private static extern int IsClipboardFormatAvailable(int wFormat);
[DllImport("user32.dll")]
private static extern IntPtr GetClipboardData(int wFormat);
static public Metafile GetEnhMetafileOnClipboard(IntPtr hWnd)
...{
Metafile meta = null;
if (OpenClipboard(hWnd))
...{
try
...{
if (IsClipboardFormatAvailable(CF_ENHMETAFILE) != 0)
...{
IntPtr hEMF = GetClipboardData(CF_ENHMETAFILE);
meta = new Metafile(hEMF, true);
}
}
finally
...{
CloseClipboard();
}
}
return meta;
}
}
}
相关文章推荐
- 一次导出Word中的所有图形,可以是JPG,BMP,PNG,GIF,EMF,TIF格式
- java通过Freemarker生成word的应用
- 用PageOffice通过Js编程实现在Word中插入书签
- 通过url在webview中加载显示word和pdf的在线预览
- Hadoop 2.2.0新API的WordCount例子(运行通过)
- 通过VBA将excel数据导入至word文档
- 卡巴2009与word冲突完美解决方案,经测试几十台计算机全部通过
- 通过外接程序将Outlook邮件导出成Word文档
- 如何通过Word 2010发布文章到博客
- [VB.NET]如何象在word中一样,通过工具栏中的组合框,选择字体/字号/颜色/大小等(详细点比较好)
- 通过代码将Word 2007 template (dotx)文档转换Word 2007 (docx)文档(续)
- java通过jacob来读取word转换为htm格式
- PageOffice+C#+SqlServer+Aspose.Word+Aspose.Cells实现上传word模板,通过标签保存填写的数据到数据库中
- php通过baihui网API实现读取word文档并展示
- Word add-in 通过ConfigurationManager读取configuration文件的方法
- C#程序通过模板自动创建Word文档.doc
- 开源Word读写组件DocX,通过word模板,导出用户简历使用示例
- 乌克兰BlackEnergy新动向:通过Word文档进行APT攻击
- C#程序通过模板自动创建Word文档
- 通过VBA打印WORD的绝对页码