繁体   English   中英

移至PDF的书签或特定页面

[英]Move to a bookmark or specific page in pdf

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

第二种方法需要确定acrobat.exe安装目录,但是每次都很难找到该目录。

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

看看Poppler

这是一个文档齐全的库,用于渲染支持Qt 4/5平台的pdf。 转到特定页面并继续移动书签是通过调用成员函数来完成的。

我用:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM