AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Gibt es einen pdf viewer für D12?

Ein Thema von softtouch · begonnen am 18. Mai 2024 · letzter Beitrag vom 20. Mai 2024
Antwort Antwort
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#1

Gibt es einen pdf viewer für D12?

  Alt 18. Mai 2024, 14:04
Ich suche seit geraumer Zeit nach einem pdf viewer für D12, einen der OHNE BROWSER oder externe dll's ein pdf anzeigen kann, nur unter Windows. Opensource sollte schon sein, nichts kommerzielles.
Alles was ich bisher gefunden habe, kostet entweder Geld/subscription oder kann pdf erzeugen, aber nicht anzeigen.

Geändert von softtouch (18. Mai 2024 um 16:13 Uhr)
  Mit Zitat antworten Zitat
DaCoda

Registriert seit: 21. Jul 2006
Ort: Hamburg
143 Beiträge
 
Delphi 12 Athens
 
#2

AW: Gibt es einen pdf viewer für D12?

  Alt 18. Mai 2024, 14:49
Schau dir mal https://github.com/tothpaul/PDFiumReader an.

Das sollte eventuell das sein, was du suchst.
Debuggers don’t remove bugs, they only show them in slow-motion.
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.603 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Gibt es einen pdf viewer für D12?

  Alt 18. Mai 2024, 15:00
Schau dir mal https://github.com/tothpaul/PDFiumReader an.

Das sollte eventuell das sein, was du suchst.
GPL ? Vermutlich eher nicht.
Thomas Mueller
  Mit Zitat antworten Zitat
Benutzerbild von softtouch
softtouch

Registriert seit: 13. Feb 2015
Ort: Kerpen
235 Beiträge
 
Delphi 12 Athens
 
#4

AW: Gibt es einen pdf viewer für D12?

  Alt 18. Mai 2024, 16:13
Schau dir mal https://github.com/tothpaul/PDFiumReader an.

Das sollte eventuell das sein, was du suchst.
Danke, aber das ist abhängig von einer dll, das wollte ich vermeiden.
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
339 Beiträge
 
Delphi 12 Athens
 
#5

AW: Gibt es einen pdf viewer für D12?

  Alt 18. Mai 2024, 17:09
Du kannst mit GetPreviewHandlerCLSID auch einen PreviewHandler einbauen (siehe Bsp. in FFExpert auf meiner Seite https://www.screensoft.de).

Geändert von tomkupitz (18. Mai 2024 um 19:55 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Gibt es einen pdf viewer für D12?

  Alt 20. Mai 2024, 10:20
Schau dir mal https://github.com/tothpaul/PDFiumReader an.

Das sollte eventuell das sein, was du suchst.
Danke, aber das ist abhängig von einer dll, das wollte ich vermeiden.
Keine DLL? Kein Browser?
Alles in Delphi-Code?
Vergiss es. Dazu ist der Delphi-Markt zu klein, um so ein komplexes Format dauerhaft auf Basis von freiwilligen zu stemmen.
Wir hatten mal vor Jahren das PDF Toolkit im Einsatz (https://www.gnostice.com/PDFtoolkit_VCL.asp).
haben es aber mittlerweile wieder entfernt, da die Probleme damit mit Real-Life-PDF viel zu groß waren.

Wenn es nur Windows ist, dann nimmt man dafür den EdgeBrowser, welche das überall installierte Edge WebView Control nutzt.
Funktioniert, Gibt regelmäßig Updates/Fixes und ist mit einer 100 KB DLL im Anwendungsverzeichnis mit sehr kleinen Footprint verbunden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Gibt es einen pdf viewer für D12?

  Alt 20. Mai 2024, 14:52
Du kannst mit GetPreviewHandlerCLSID auch einen PreviewHandler einbauen (siehe Bsp. in FFExpert auf meiner Seite https://www.screensoft.de).
Hast Du dafür einen Beispielcode?

Und womit hast Du Deine Hilfe (https://www.screensoft.de/help/Willkommen.html) erstellt? Das sieht übersichtlich und schön schlicht aus. Danke!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#8

AW: Gibt es einen pdf viewer für D12?

  Alt 20. Mai 2024, 14:58
Zitat:
<meta name="generator" content="HelpNDoc Standard Edition 7.4.0.390">
Bezüglich IPreviewHandler findet sich auch was im Forum.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
tomkupitz

Registriert seit: 26. Jan 2011
339 Beiträge
 
Delphi 12 Athens
 
#9

AW: Gibt es einen pdf viewer für D12?

  Alt 20. Mai 2024, 15:59
Hilfe ist mit HelpNDoc erstellt.

Hier ein Stück Code:

Code:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Winapi.ShlObj, System.Win.ComObj, Winapi.ActiveX, Winapi.PropSys, System.Win.Registry;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private

  public

  end;

  TDefaultPreview=class
  private
    FFileStream: TFileStream;
    FPreviewHandler: IPreviewHandler;
  public
    constructor Create;
    destructor Destroy; override;

    function LoadPreview(ParentControl: TWinControl; FileName: string): Boolean;
    procedure PaintPreview(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function GetPreviewHandlerCLSID(const AFileName: string): string;
var
  LRegistry: TRegistry;
  LKey: String;
begin
  LRegistry:=TRegistry.Create();
  Result:=EmptyStr;
  try
    LRegistry.RootKey:=HKEY_CLASSES_ROOT;
    LKey:=ExtractFileExt(AFileName) + '\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}';
    if LRegistry.OpenKeyReadOnly(LKey) then begin
      Result:=LRegistry.ReadString('');
      LRegistry.CloseKey;
    end else begin
      LKey:='SystemFileAssociations\' + ExtractFileExt(AFileName) + '\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}';
      if LRegistry.OpenKeyReadOnly(LKey) then begin
        Result:=LRegistry.ReadString('');
        LRegistry.CloseKey;
      end else begin
        LRegistry.RootKey:=HKEY_LOCAL_MACHINE;
        LKey:='\Software\Classes\' + ExtractFileExt(AFileName) + '\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}';
        if LRegistry.OpenKeyReadOnly(LKey) then begin
          Result:=LRegistry.ReadString('');
          LRegistry.CloseKey;
        end else begin
          LKey:='\Software\Classes\SystemFileAssociations\' + ExtractFileExt(AFileName) +
            '\shellex\{8895b1c6-b41f-4c1c-a562-0d564250836f}';
          if LRegistry.OpenKeyReadOnly(LKey) then begin
            Result:=LRegistry.ReadString('');
            LRegistry.CloseKey;
          end;
        end;
      end;
    end;
  finally
    LRegistry.Free;
  end;
end;

//

constructor TDefaultPreview.Create;
begin
  inherited Create;

  FFileStream:=nil;
  FPreviewHandler:=nil;
end;

destructor TDefaultPreview.Destroy;
begin
  if Assigned(FPreviewHandler) then
  begin
    FPreviewHandler.Unload;
    FPreviewHandler:=nil;
  end;

  inherited Destroy;
end;

//

function TDefaultPreview.LoadPreview(ParentControl: TWinControl; FileName: string): Boolean;
const
  GUID_ISHELLITEM='{43826d1e-e718-42ee-bc55-a1e261c37bfe}';

var
  re: TRect;

  GUID: TGUID;
  GUIDStr: string;

 InitializeWithFile: IInitializeWithFile;
 InitializeWithStream: IInitializeWithStream;
 InitializeWithItem: IInitializeWithItem;
 PreviewHandlerVisuals: IPreviewHandlerVisuals;

  Stream: IStream;

  ShellItem: IShellItem;

  res: HRESULT;

begin
  result:=False;

  //

  if Assigned(FPreviewHandler) then
  begin
    FPreviewHandler.Unload;
    FPreviewHandler:=nil;
  end;

  //

  CoInitializeEx(nil, COINIT_APARTMENTTHREADED or COINIT_DISABLE_OLE1DDE);

  //

  GUIDStr:=GetPreviewHandlerCLSID(FileName);

  if GUIDStr='' then
    Exit;

  GUID:=StringToGUID(GUIDStr);

  CoCreateInstance(GUID, nil, CLSCTX_LOCAL_SERVER, IPreviewHandler, FPreviewHandler);

  if FPreviewHandler=nil then
  begin
    CoUninitialize;
    Exit;
  end;

  result:=True;

  if FPreviewHandler.QueryInterface(IInitializeWithStream, InitializeWithStream)=S_OK then
  begin
    FFileStream:=TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
    Stream:=TStreamAdapter.Create(FFileStream, soOwned) as IStream;

    res:=InitializeWithStream.Initialize(Stream, STGM_READ or STGM_FAILIFTHERE or STGM_DIRECT);

    if (Succeeded(res)) then
    begin
      re:=Form1.ClientRect;

      FPreviewHandler.SetWindow(Form1.Handle, re);

      FPreviewHandler.SetRect(re);
      FPreviewHandler.DoPreview;
      FPreviewHandler.SetFocus;

      CoUninitialize;
      Exit;
    end;
  end;

  if Assigned(FPreviewHandler) then
  begin
    FPreviewHandler.Unload;
    FPreviewHandler:=nil;
  end;

  CoUninitialize;
end;

//

procedure TDefaultPreview.PaintPreview(Sender: TObject);
var re: TRect;

begin
  if Assigned(FPreviewHandler) then
  begin
    re:=Form1.ClientRect;

    FPreviewHandler.SetRect(re);
    FPreviewHandler.DoPreview;
    FPreviewHandler.SetFocus;
  end;
end;

//

var
  dp: TDefaultPreview;

procedure TForm1.FormCreate(Sender: TObject);
begin
  dp:=TDefaultPreview.Create;
  dp.LoadPreview(Self, 'demo.pdf');
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  dp.Free;
end;

procedure TForm1.FormResize(Sender: TObject);
begin
  dp.PaintPreview(Sender);
end;

end.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz