以pdf格式移至书签或特定页面

时间:2015-05-18 12:02:58

标签: c++ qt pdf

我想打开一个pdf文件并转到C ++和qt程序中的特定书签。根据我的研究,我们可以使用URL和命令提示符转到书签。使用URL具有特殊格式,如:fileName.pdf #page = 3 它在命令提示符下工作,但不能在C ++程序中使用system()函数。

第二种方法需要确定acrobat.exe安装目录,但每次查找目录都很复杂。

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

2 个答案:

答案 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;
}