妖哥老师你好,我已经发邮件给你了,可能你没有看到吧
老师,我是前几天发word转换为图片的那个人 。已经发送了邮件。
非常抱歉,以帖子的形式呼唤你,项目催的紧。我始终找不到原因所在。
如果有打扰的地方,望见谅。
[解决办法]
OLE专业户来也!!!
COleVariant ovTrue((short)TRUE);
COleVariant ovFalse((short)FALSE);
COleVariant ovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
// 创建Word对象
CApplication objWordApp;
if (!objWordApp.CreateDispatch("Word.Application"))
{
::MessageBoxA(NULL, "Couldn't get Word object.", NULL, MB_OK);
return;
}
// 隐藏WORD界面
objWordApp.put_Visible(false);
// 屏蔽异常对话框
objWordApp.put_DisplayAlerts(false);
CDocuments objDocs;
objDocs.AttachDispatch(objWordApp.get_Documents());
// 打开指定的Word文档
CDocument0 objDoc;
COleVariant ovFileName("D:\\ccrun\\123.doc");
objDoc.AttachDispatch(objDocs.Open(
ovFileName,
ovFalse,
ovFalse,
ovFalse,
ovOptional,
ovOptional,
ovFalse,
ovOptional,
ovOptional,
COleVariant((short)0),
ovTrue,
ovTrue,
ovOptional,
ovOptional,
ovOptional,
ovOptional
));
// 重新分页
objDoc.Repaginate();
// 操作这个文档
objDoc.Activate();
CSelection objSelect = objWordApp.get_Selection();
COleVariant ovWhat((long)1);
COleVariant ovWhich((long)2);
COleVariant ovCount((long)1);
COleVariant ovName((long)2);
// 定位到第2页
objSelect.GoTo(ovWhat, ovWhich, ovCount, ovName);
COleVariant ovUnit((long)6);
COleVariant ovExtend((long)1);
// 选中第2页并复制
objSelect.EndKey(ovUnit, ovExtend);
objSelect.Copy();
// 创建一个新页面
CDocument0 objNewDoc;
objNewDoc.AttachDispatch(objDocs.Add(ovOptional, ovOptional, ovOptional, ovOptional));
objNewDoc.Activate();
COleVariant ovPlacement(long(0), VT_I4);
COleVariant ovMetafile(long(9), VT_I4);//wdPasteEnhancedMetafile
// 选择性粘贴为图像
objSelect = objWordApp.get_Selection();
objSelect.PasteSpecial(ovOptional, ovFalse, ovPlacement, ovFalse, ovMetafile, ovOptional, ovOptional);
// 选中这个图像并复制
CinlineShapes objShapes = objNewDoc.get_InlineShapes();
CinlineShape objhape = objShapes.Item(1);
objhape.Select();
objSelect.AttachDispatch(objWordApp.get_Selection());
objSelect.Copy();
// 打开剪贴板
::OpenClipboard(0);
// 获取剪贴板中的EMF数据
HANDLE hEmf = ::GetClipboardData(CF_ENHMETAFILE);
if (hEmf)
{
// 保存EMF文件
char szEmfFile[MAX_PATH] = "E:\\temp\\123.emf";
HENHMETAFILE h = ::CopyEnhMetaFile((HENHMETAFILE)hEmf, szEmfFile);
// 在下面添加EMF文件转BMP文件的代码就行了
if (h > 0)
{
::DeleteEnhMetaFile(h);
// ...
// EMF转BMP代码略去
// ...
// ::DeleteFile(szEmfFile);
}
}
else
{
::MessageBoxA(NULL, "剪贴板错误", NULL, MB_OK);
}
::CloseClipboard();
objNewDoc.ReleaseDispatch();
objDoc.ReleaseDispatch();
objDocs.ReleaseDispatch();
objWordApp.Quit(
ovFalse, // 保存修改
ovTrue, // 原始格式
ovFalse // RouteDocument.
);
objWordApp.ReleaseDispatch();
::MessageBoxA(NULL, "结束!", NULL, MB_OK);