2015-05-18 3 views
1

Я хочу открыть pdf-файл и перейти к определенной закладке в программе на C++ и qt. Согласно моим исследованиям, мы можем перейти к закладке с помощью URL-адресов и командной строки. Использование URL имеет специальный формат: fileName.pdf # page = 3 Он работает в командной строке, но не работает с функцией system() в программе на C++.Перейти к закладке или определенной странице в pdf

Второй способ должен определить каталог установки acrobat.exe, но сложно найти каталог каждый раз.

Простой способ? И почему первое решение не работает?

ответ

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

Пожалуйста, отформатируйте код, это не Yahoo! Ответы. – LogicStuff

+0

@KungPhoo благодарит за ваш быстрый ответ. Но что такое pdf_reader? если это каталог приложения для чтения PDF, то именно моя проблема заключается в том, чтобы каждый раз находить каталог в разных системах. – maryamT

+1

У меня есть еще одна проблема. Если файл PDF был открыт ранее, я не могу перейти на определенную страницу с помощью этой команды. Фактически, страница в открывшемся файле не изменяется. – maryamT

1

Посмотрите на Poppler

Это хорошо документированы библиотека для рендеринга PDF, который поддерживает платформу Qt 4/5. Переход на определенную страницу и перемещение по закладкам осуществляется путем вызова функций-членов.

+0

Я читал документацию. Это не совсем то, что я хочу. Спасибо, в любом случае – maryamT