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;
}
}
}
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;
}
}
}