Podgląd pliku pdf w aplikacji.

0

Witam
W jaki sposób umożliwić podgląd pliku pdf w programie napisanym w Lazarusie? Dla Delphi jest coś takiego jak Acrobat ActiveX, w Lazarusie chyba (?) nie da się tego zainstalować. Wszelkie wskazówki mile widziane.

3

Witam,
w załączniku masz projekt, powinno Ci trochę pomóc. Program odnosi się bezpośredniu do pliku C:\a.pdf

0

Witam
Wielkie dzięki, rewelacja :). Program korzysta jedynie z zawartej w nim biblioteki AcroPDF czy też w systemie musi być dodatkowo zainstalowany Adobe Reader ? Jakie są możliwości wykorzystania tej biblioteki i kodu w komercyjnych programach?

0

wszystko jest darmowe, jedynie musi być zainstalowany acrobat reader w wersji co najmniej 7.

0

Pozwolę sobie wznowić jeszcze ten temat. Przykład Pawła Dmitruka umożliwia załadowanie pliku pdf i pokazanie podglądu na panelu. W jaki sposób zresetować program z odłączeniem pliku (tj powrót do stanu pierwotnego)?

 

procedure TForm1.Button6Click(Sender: TObject);
var
  aaa: TGUID = '{CA8A9780-280D-11CF-A24D-444553540000}';
  atl:hmodule;
  AtlAxAttachControl:TAtlAxAttachControl;
  z: olevariant;
  zzz: string;

begin
  if OpenDialog1.Execute then

  begin
  zzz:=UTF8Decode(form1.opendialog1.FileName);
  atl:=LoadLibrary('atl.dll');
  AtlAxAttachControl:=TAtlAxAttachControl(GetProcAddress(atl, 'AtlAxAttachControl'));
  EvenSink1:= TEvenSink.Create(Self);
  WebBrower:=CreateOleObject(ClassIDToProgID(aaa));
  //ShowMessage(ClassIDToProgID(aaa));
  //EventSink1.Connect(WebBrower, IAcroAXDocShimDisp);
  AtlAxAttachControl(WebBrower,panel4.Handle,nil);
  //WebBrower.LoadFile(form1.opendialog1.FileName); //(opendialog1.FileName)
  z:=zzz;
  WebBrower.LoadFile('');
  WebBrower.LoadFile(z);
  label4.Caption:=zzz;
  WebBrower.setPageMode('none');
  WebBrower.SetShowScrollbars(0);
  WebBrower.setShowToolbar(0);
  WebBrower.setLayoutMode('SinglePage');
  Webbrower.setView('Fit');
  panel1.SetFocus;
  end;


end;             
0

jeżeli chcesz zwolnić plik, tak żeby podgląd był pusty, to:

WebBrower.LoadFile('  ');
0

Niestety, ale po zastosowaniu tego sposobu w sposób jak poniżej (przy otwieraniu kolejnego pliku powinien się "zerować" poprzedni) nadal w panelu widać poprzedni plik. Nie działa oczywiście także próba samego "wyzerowania" panelu - plik nadal jest tam widoczny....

 procedure TForm1.Button6Click(Sender: TObject);
var
  aaa: TGUID = '{CA8A9780-280D-11CF-A24D-444553540000}';
  atl:hmodule;
  AtlAxAttachControl:TAtlAxAttachControl;
  z: olevariant;
  zzz: string;
 
begin
  if OpenDialog1.Execute then
 
  begin
  zzz:=UTF8Decode(form1.opendialog1.FileName);
  atl:=LoadLibrary('atl.dll');
  AtlAxAttachControl:=TAtlAxAttachControl(GetProcAddress(atl, 'AtlAxAttachControl'));
  EvenSink1:= TEvenSink.Create(Self);
  WebBrower:=CreateOleObject(ClassIDToProgID(aaa));
  AtlAxAttachControl(WebBrower,panel4.Handle,nil);
  z:=zzz;

  WebBrower.LoadFile('  '); // tu powinien się zerować poprzedni plik?
  WebBrower.LoadFile(z);

  WebBrower.setPageMode('none');
  WebBrower.SetShowScrollbars(0);
  WebBrower.setShowToolbar(0);
  WebBrower.setLayoutMode('SinglePage');
  Webbrower.setView('Fit');
  panel1.SetFocus;
  end;
 
 
end;
3

przykładowa aplikacja w załączniku.

0

Działa, wielkie dzięki :)

0

Podpinam się, z tym że proszę o podpowiedź czym mogę podgląd pdfów w winapi

1 użytkowników online, w tym zalogowanych: 0, gości: 1