我有这段代码需要一个ppt文档并将其转换为我想要集成到我的Qt应用程序中的一系列图像。
#include "stdafx.h"
#include "msword.h"
#include "ExcelToPic.h"
#include "ppttopic.h"
#include "WordToPic.h"
......
void Widget::on_transformButton_clicked()
{
//DO THE BULK OF YOUR TRANSFORMATIONS HERE
QString filepath=ui->chooseDocLineEdit->text();
QString outDir=ui->outputLocationLineEdit->text();
QFileInfo mFile(filepath);
QString filename=mFile.baseName();
QString fileExt=mFile.suffix();
//TRANSFORM THOSE INTO CSTRINGS.
QByteArray destBa1 = filepath.toLocal8Bit();
const char *filepathCString1 = destBa1.data();
CString strFilePath(filepathCString1,destBa1.size());
QByteArray destBa4 = outDir.toLocal8Bit();
const char *outDirCString1 = destBa4.data();
CString szOutDir(outDirCString1,destBa4.size());
PowerPointToPic(strFilePath, szOutDir,outDir);
QMessageBox message;
message.setText("Transformtion successful");
message.exec();
}
PowerPointToPic功能实现如下:
void PowerPointToPic(CString szDocName, CString szOutDir,QString outDir)
{
CPPTApplication m_powerpointApp;
CPPTPresentations m_powerpointPres;
CPPTPresentation m_powerpointPre;
CPPTSlide slide;
CPPTSlides slides;
m_powerpointPres.ReleaseDispatch();
m_powerpointPre.ReleaseDispatch();
try{
CoInitialize(NULL);
if(!m_powerpointApp.CreateDispatch(_T("PowerPoint.Application"), NULL))
{
//AfxMessageBox(_T("创建PowerPoint服务失败!"));
return;
}
}
catch(...)
{
return;
}
m_powerpointApp.m_bAutoRelease=true;
m_powerpointApp.put_Visible(long(1));
m_powerpointApp.put_WindowState(long(2));
m_powerpointPres.AttachDispatch(m_powerpointApp.get_Presentations());
m_powerpointPres.Open(szDocName,TRUE, 1, 1);
m_powerpointPre.AttachDispatch(m_powerpointApp.get_ActivePresentation(),TRUE);
slides = m_powerpointPre.get_Slides();
int pageCount = slides.get_Count();
for( int i = 1; i <= pageCount; i++ )
{
slide = slides.Range(COleVariant((long)i));
slide.Copy();
//_T("c:\\test-%d.bmp")
//CString temp;
//QString sohokafile="sohokaImage"+QString::number(i);
QString sohokafile=outDir+"/sohokaImage"+QString::number(i)+".png";
QByteArray destBa4 = sohokafile.toLocal8Bit();
const char *outDirCString1 = destBa4.data();
CString temp(outDirCString1,destBa4.size());
//slide.Export(_T("c:\\amaImages\\slide1.png"), _T("png"),900,900 );
slide.Export(temp, _T("png"),900,900 );
}
m_powerpointPre.Close();
m_powerpointApp.Quit();
m_powerpointPre.ReleaseDispatch();
m_powerpointPres.ReleaseDispatch();
slides.ReleaseDispatch();
slide.ReleaseDispatch();
m_powerpointApp.ReleaseDispatch();
CoUninitialize();
}
当我将其包装到测试窗口小部件应用程序中以查看是否所有工作都按预期工作时,代码将ppt文档转换为win7和winxp上的png图像而没有问题。但是当我将它集成到我的Qt应用程序中时,它只能在win7上运行而没有问题并且抛出[应用程序名称]遇到问题并需要关闭。对于给您带来的不便,我们深表歉意。
从我的搜索[superuser.com]这可能是由于我无法弄清楚的不兼容性。我也更新了我的虚拟机xp系统无济于事。应用程序链接到正常的Qt 4 dll和其他一些第三方库。
如果有人帮忙的话,我将不胜感激。谢谢你的时间。