C++ 移动到pdf中的书签或特定页面

C++ 移动到pdf中的书签或特定页面,c++,qt,pdf,C++,Qt,Pdf,我想打开一个PDF文件,并在C++和QT程序中移动到一个特定的书签。根据我的研究,我们可以使用URL和命令提示符访问书签。使用URL有特殊的格式,如:fileName.pdf#page=3 它在命令提示符中工作,但不使用C++程序中的系统()/函数。 第二种方法需要确定acrobat.exe安装目录,但每次查找目录都很复杂 有更简单的方法吗?为什么第一个解决方案不起作用?我使用: CString params; params.Format(_T("/A \"page=%d\" \"%s\"")

我想打开一个PDF文件,并在C++和QT程序中移动到一个特定的书签。根据我的研究,我们可以使用URL和命令提示符访问书签。使用URL有特殊的格式,如:fileName.pdf#page=3 它在命令提示符中工作,但不使用C++程序中的<代码>系统()/<代码>函数。 第二种方法需要确定acrobat.exe安装目录,但每次查找目录都很复杂

有更简单的方法吗?为什么第一个解决方案不起作用?

我使用:

CString params;
params.Format(_T("/A \"page=%d\" \"%s\"")
    , page
    , (LPCTSTR)pdf
    );
::ShellExecute(AfxGetMainWnd()->GetSafeHwnd(), _T("open"), pdf_reader, params, NULL, SW_SHOW);
“pdf_阅读器”是指向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;
}
看看

它是一个文档丰富的pdf呈现库,支持Qt4/5平台。
转到特定页面并移动书签是通过调用成员函数完成的。

请格式化代码,这不是Yahoo!回答。@KungPhoo谢谢您的快速回复。但什么是pdf_阅读器?如果它是pdf阅读器应用程序的目录,那么每次在不同的系统中查找目录正是我的问题。我现在有另一个问题。如果之前打开过pdf文件,我无法使用此命令转到特定页面。事实上,打开的文件中的页面并没有改变。我阅读了文档。这并不是我想要的。无论如何谢谢你