c++实现word文档转换

stund 2011-08-29 04:35:48
rt

课题作业被选择了这个题目,
具体来说就是用 C++ 实现容易的两个不同类型文件之间的转换,
比如 从pdf 转换为 word .

完全没有思路,跪求各种资料与思路
...全文
452 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
stund 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 bokutake 的回复:]

因为COM一般使用的是Unicode,所以建议都用L""
PDF解析可以用GhostScript,建议用AFPL许可证的:
http://pages.cs.wisc.edu/~ghost/
ghostscript.com上的是GPL许可证的,要求你的程序也得开放源代码。
[/Quote]

GhostScript 得安装单独的GhostScript包,有些麻烦;
能直接 vs2005 搞定的方便一点
辰岡墨竹 2011-09-03
  • 打赏
  • 举报
回复
因为COM一般使用的是Unicode,所以建议都用L""
PDF解析可以用GhostScript,建议用AFPL许可证的:
http://pages.cs.wisc.edu/~ghost/
ghostscript.com上的是GPL许可证的,要求你的程序也得开放源代码。
limang89 2011-09-03
  • 打赏
  • 举报
回复
顶下 学习
stund 2011-09-02
  • 打赏
  • 举报
回复

[Quote=引用 2 楼 zhao4zhong1 的回复:]

1.在VC中新建一控制台程序,选支持MFC(当然,你也可以不选择支持MFC的,不过会很麻烦)
2.按CTRL+W调出MFC ClassWizard,Add Class->From a type library,选择你的word的类型库
(例如我的是word2003,安装在e盘,我的路径是"e:\edittools\microsoft office\office11\msword.olb"……
[/Quote]

to zhao4zhong1: 按你的代码,另外从上网搜了些相关的代码,跑了程序。发现每次运行到 doc=docs.Open(....) 处就抱 内存错误:
Microsoft C++ 异常: 内存位置 0x0012fb0c 处的 COleDispatchException。

这是什么原因?
W170532934 2011-08-29
  • 打赏
  • 举报
回复
要了解pdf文件结构的哇
zch82624392 2011-08-29
  • 打赏
  • 举报
回复
很好奇PDF的数据怎么拿
赵4老师 2011-08-29
  • 打赏
  • 举报
回复
1.在VC中新建一控制台程序,选支持MFC(当然,你也可以不选择支持MFC的,不过会很麻烦)
2.按CTRL+W调出MFC ClassWizard,Add Class->From a type library,选择你的word的类型库
(例如我的是word2003,安装在e盘,我的路径是"e:\edittools\microsoft office\office11\msword.olb"),
选择完毕后,在弹出的窗口中选择要让classwizard生成的包装类,在本例中要用到
_Application,
Documents,
_Document,
Range
这四个类,选中他们后按OK
3.进入你的main函数所在的cpp文件,加入头文件引用
#include "msword.h" //引用刚才classwizard生成的idispatch包装类
4.加入代码
// console_word.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "console_word.h"
#include "msword.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// The one and only application object

CWinApp theApp;

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;

// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: change error code to suit your needs
printf(_T("Fatal Error: MFC initialization failed!\n"));
nRetCode = 1;
}
else
{
// TODO: code your application's behavior here.
if (CoInitialize(NULL) != S_OK)
{
AfxMessageBox("初始化COM支持库失败!");
return -1;
}

_Application wordApp;
Documents docs;
_Document doc;
Range aRange;
COleVariant vTrue((short)TRUE), vFalse((short)FALSE), vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
CString txt;

wordApp.CreateDispatch("Word.Application",NULL);
wordApp.SetVisible(FALSE);
docs=wordApp.GetDocuments();
doc=docs.Open(COleVariant("c:\\new\\测试.doc"),vFalse,vTrue,vFalse,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt,vOpt);
aRange=doc.Range(vOpt,vOpt);
txt=aRange.GetText();
AfxMessageBox(txt);//这里GetText得到的就是word文件的纯文本了,你可以将其写到txt文件中
printf("[%s]\n",txt.GetBuffer(txt.GetLength()));//里面的换行不是\r\n而是\r,所以需要输出重定向到文本文件看结果。
aRange.ReleaseDispatch();
doc.Close(vOpt,vOpt,vOpt);
doc.ReleaseDispatch();
docs.ReleaseDispatch();
wordApp.Quit(vOpt,vOpt,vOpt);
wordApp.ReleaseDispatch();

CoUninitialize();
}

return nRetCode;
}



在Word里开始记录宏,手动完成所需功能,结束记录宏,按Alt+F11键,查看刚才记录的宏对应的VBA代码。
luciferisnotsatan 2011-08-29
  • 打赏
  • 举报
回复
了解下pdf的结构。word可以用COM组件来做。

15,447

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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