我想打开一个pdf文件并转到C ++和qt程序中的特定书签。根据我的研究,我们可以使用URL和命令提示符转到书签。使用URL具有特殊格式,如:fileName.pdf #page = 3
它在命令提示符下工作,但不能在C ++程序中使用system()
函数。
第二种方法需要确定acrobat.exe安装目录,但每次查找目录都很复杂。
有更简单的方法吗?为什么第一个解决方案不起作用?
答案 0 :(得分:1)
查看Poppler
它是一个记录良好的库,用于呈现支持Qt 4/5平台的pdf。 通过调用成员函数来转到特定页面并移动书签。
答案 1 :(得分:0)
我用:
CString params;
params.Format(_T("/A \"page=%d\" \"%s\"")
, page
, (LPCTSTR)pdf
);
::ShellExecute(AfxGetMainWnd()->GetSafeHwnd(), _T("open"), pdf_reader, params, NULL, SW_SHOW);
'pdf_reader'是Acrobat.exe的路径。我觉得这样:
CString pdf_reader;
int hinst = (int)(::FindExecutable(pdf, NULL, pdf_reader.GetBuffer(1024)));
pdf_reader.ReleaseBuffer();
if(hinst > 32){
}
else{
CString csmess = _T("Error encountered while trying to load the helpfile:");
if(hinst == 0){
csmess += _T("\nThe system is out of memory or resources.");
}
else if(hinst == 31){
csmess += _T("\nThere is no association for pdf - file type.");
csmess += _T("\nInstall Adobe Reader (R) first.");
}
else if(hinst == ERROR_FILE_NOT_FOUND){
csmess += _T("\nThe specified file was not found:");
csmess += _T("\n") ;
csmess += pdf;
}
else if(hinst == ERROR_PATH_NOT_FOUND){
csmess += _T("\nThe specified path was not found.");
}
else if(hinst == ERROR_BAD_FORMAT){
csmess += _T("\nThe .exe file is invalid (non-Win32 .exe or error in .exe image).");
}
else{
csmess += _T("\nError encountered in FindExecutable.");
}
AfxMessageBox(csmess);
return FALSE;
}