Я являюсь основным разработчиком проекта с открытым исходным кодом (http://nbcgib.uesc.br/lec/software/editores/tinn-r/en).Delphi: Откройте файл PDF (Sumatra, Foxit и Adobe) программно в названии адресата в формате PDF
Теперь руководство пользователя по проекту находится в формате PDF (под LaTeX).
Я пытаюсь сделать процедуру, чтобы открыть руководство пользователя программно в названном пункте назначения/разделе в PDF.
Поскольку я не знаю стандартного просмотра PDF-файлов пользователей, я разрабатываю процедуру поддержки майора: Sumatra, Foxit и Adobe.
Процедура отлично работает для Суматры, но не для Foxit и Adobe.
Ниже код:
function GetAssociation(const DocFileName: string): string;
var
FileClass: string;
Reg: TRegistry;
begin
Result:= '';
Reg:= TRegistry.Create(KEY_EXECUTE);
Reg.RootKey:= HKEY_CLASSES_ROOT;
FileClass:= '';
if Reg.OpenKeyReadOnly(ExtractFileExt(DocFileName)) then
begin
FileClass:= Reg.ReadString('');
Reg.CloseKey;
end;
if FileClass <> '' then begin
if Reg.OpenKeyReadOnly(FileClass +
'\Shell\Open\Command') then
begin
Result:= Reg.ReadString('');
Reg.CloseKey;
end;
end;
Reg.Free;
end;
procedure TfrmTinnMain.OpenUserGuidePDF(sWhere: string);
var
sFile,
sViewerDefault,
sParameter: string;
begin
sViewerDefault:= GetAssociation('.pdf');
if pos('Sumatra', // Sumatra: OK
sViewerDefault) > 0 then
sParameter:= '-reuse-instance ' +
'-named-dest ' +
sWhere
else if pos('Foxit', // Foxit: opens the file, but not at the named destination
sViewerDefault) > 0 then
sParameter:= '/A ' +
'page=100'
else if pos('Adobe', // Adobe: opens the file, but not at the named destination
sViewerDefault) > 0 then begin
sWhere:= StringReplace(sWhere,
'"',
'',
[rfReplaceAll]);
sParameter:= '/A ' +
'"' +
'nameddest=' +
sWhere +
'"';
end
else
sParameter:= '';
sFile:= sPathTinnR +
'\doc\User guide.pdf';
try
// Open PDF viewer
ShellExecute(0,
'open',
Pchar(sFile),
Pchar(sParameter),
nil,
sw_shownormal);
except
MessageDlg('PDF viewer is not accessible!',
mtInformation,
[mbOk],
0);
end;
end;
procedure TfrmTinnMain.menHelUserGuideClick(Sender: TObject);
begin
OpenUserGuidePDF('"Contents"');
end;
Что ваш вопрос? –
Каким образом это не «работает нормально»? Что вы ожидаете от программы, и что происходит вместо этого? Что вы узнали из отладчика? –
PDF - очень плохой выбор для онлайн-справочной службы. –