操作Word把Doc文件中的每一页都导出一张矢量图。谁能做到。有代码另开贴送200分。 ( 积分: 200 )

  • 主题发起人 主题发起人 xuegaoyili
  • 开始时间 开始时间
X

xuegaoyili

Unregistered / Unconfirmed
GUEST, unregistred user!
我想实现的是把一个word文件中,有几页,就生成几张对应的图片出来。要求是矢量图或可控制大小的jpg清晰图。现在还没思路。有提供可行方法的。本贴分送上。
有提供代码的。再开贴送200分。。。

例一doc文件中有4页,第一页是排好版的文字和图片,第二页是表格等等这类的文档。
程序一导出就能生成4张图片,图片上就像是看到word中的打印预览一样的版式。
 
打印到文件
 
直接搞成失量不太容易吧?搞成位图的。如果原图清晰,再用插值算法放大试试~
 
操作位图好些.搞失量不好弄.
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=24821
这个里面你进去看看.能不能帮助你一些...
 
给你一个思路.可将word打印到FAX,可得TIF图像,以下是我用VC写的
word 转 fax文件
系统下必须有传真打印机(windows 2000安装)

以在是window 2000/office 2000/vc6.0中测试成功
void CTest1Dlg::OnButton1()
{
// TODO: Add your control notification handler code here
CoInitialize(NULL);

_Application oWord ;
Documents oDocs;
_Document oDoc;
COleDispatchDriver oWordBasic;
COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR); //For optional args

COleVariant vFalse(short(false));
COleVariant vTrue(short(true));

//Start Word
if(!(oWord.CreateDispatch("Word.Application", NULL)))

{
AfxMessageBox("Error starting Word.", MB_SETFOREGROUND);
return;
}

//Open a document
oDocs = oWord.GetDocuments();

oDoc = oDocs.Open(COleVariant("d://temp//test1//t.doc"),vFalse,vFalse,vFalse,
vOpt, vOpt,vOpt, vOpt, vOpt, vOpt,vOpt,vOpt);

oWordBasic = oWord.GetWordBasic();

HRESULT hr;
OLECHAR FAR* szMethod[3];
DISPID dispid[3];

//Retrieve the DISPIDs for the function as well as two of its named
//arguments, Printer and DoNotSetAsSysDefault
szMethod[0]=OLESTR("FilePrintSetup"); //method name

szMethod[1]=OLESTR("Printer"); //argument name
szMethod[2]=OLESTR("DoNotSetAsSysDefault"); //argument name

hr = oWordBasic.m_lpDispatch->GetIDsOfNames(IID_NULL, szMethod, 3,
LOCALE_USER_DEFAULT, dispid);

//Invoke the FilePrintSetup function using named arguments.
VARIANT vArgs[2];
DISPPARAMS dp;
dp.cArgs = 2;

dp.cNamedArgs = 2;
dp.rgvarg = vArgs;
dp.rgdispidNamedArgs=&(dispid[1]);

vArgs[1].vt = VT_I2;
vArgs[1].iVal = 1; //DoNotSetAsSysDefault = 1
vArgs[0].vt = VT_BSTR;
vArgs[0].bstrVal = ::SysAllocString(OLESTR("传真"));
//NOTE: You should replace "Generic / Text Only" in the line
//above with the name of a printer installed on your system.

hr = oWordBasic.m_lpDispatch->Invoke(dispid[0], IID_NULL,
LOCALE_USER_DEFAULT,DISPATCH_METHOD, &dp, NULL, NULL, NULL);

::SysFreeString(vArgs[0].bstrVal);

//Print the document


oDoc.PrintOut(COleVariant((short)false), vOpt, vOpt, COleVariant("d://temp//test1//t.tif"),
vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vTrue,
vOpt, vOpt, vOpt, vOpt, vOpt, vOpt, vOpt);

// oDoc.PrintOut(1,2,3,4,5,6,7,8,9,10,11

oDoc.Close(COleVariant((short)false), vOpt, vOpt);

//Clean-up
oDoc.ReleaseDispatch();
oDocs.ReleaseDispatch();
// oWordBasic.ReleaseDispatch();

//Quit Word
oWord.Quit(COleVariant((short)false), vOpt, vOpt);


}

参考文档
http://support.microsoft.com/?kbid=252719

当然,这种方法也可得到彩色的图像,在系统是设一HP 彩打(支持PS)的,如HP Color LaserJet 5/5M PS,并设打印到文件,同样用上面的程序,可将文件打印到一PS文件,然后用gsview将它转成你要的图像格式

最简的方法,安装一VirtualPrinter,可直接将word打印成图像
 
楼主呢。问题解决了没。。。
 
周末没上来。我这就去试试。回头分一定会给的。呵
 
哥们,上面的代码还要引入一些单元吧。要引哪些呀
 
保存成位图(bitmap)也成。谁有不需要用户设置假打印机驱动的解决方案(也可以程序去创建一个打印机驱动,只要不用让用户做这工作就成)。。

也可以打印成tiff文件。现在这样的要求能实现不
 
后退
顶部