MuPDF/SumatraPDF - PDF-Viewer-Komponente
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
MuPDF/SumatraPDF - PDF-Viewer-Komponente
Hat jemand hier Erfahrung im Einbinden von MuPDF (http://www.mupdf.com/) zum Anzeigen von PDF-Dateien innerhalb einer Lazarus-Applikation?
Diesen oder einen anderen Viewer extern über TProcess oder irgendein ShellExecute aufzurufen, ist trivial. Es genügt in meinen Anwendungsfall jedoch nicht. Ich suche einen PDF-Viewer, der das PDF auf einem Panel (o.ä.) direkt in der Lazarus-Applikation anzeigt und damit kontrollierbar bleibt.
Das smarte an MuPDF ist die Multiplatformfähigkeit und die GNU General Public License.
Diesen oder einen anderen Viewer extern über TProcess oder irgendein ShellExecute aufzurufen, ist trivial. Es genügt in meinen Anwendungsfall jedoch nicht. Ich suche einen PDF-Viewer, der das PDF auf einem Panel (o.ä.) direkt in der Lazarus-Applikation anzeigt und damit kontrollierbar bleibt.
Das smarte an MuPDF ist die Multiplatformfähigkeit und die GNU General Public License.
Zuletzt geändert von df.id am Mo 6. Jun 2011, 20:44, insgesamt 1-mal geändert.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: MuPDF - PDF-Viewer-Komponente
Wo ist denn das Problem? Ich lese von dieser Komponente zum ersten mal in diesem Forum.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
Re: MuPDF - PDF-Viewer-Komponente
Diese "Komponente" hat nichts mit Lazarus/Freepascal gemein. Das ist ein C-Projekt, welches eine autonome Applikation erzeugt. Technisch nutzt zum Beispiel SumatraPDF (http://blog.kowalczyk.info/software/sum ... eader.html) MuPDF als Rendering-Engine. Bei mir sind bisher alle Versuche gescheitert, irgendeine PDF-Viewer-Komponente, die inside(!) läuft, zu erstellen.
Ich verwende von Lazarus aus verschiedene externe Tools - so wie es üblich ist. Jedoch bisher nie mit der Option, visuelle Ausgaben umzuleiten.
Technisch möglich muß das sein, da MuPDF via SumatraPDF als Plugin in Firefox läuft.
Meine Frage zielt in die Richtung, ob das jemand "zufällig" bereits probiert oder realisiert hat.
Btw.: Ist eine extrem schnelle und leichtgewichtige PDF-Viewer-Implementierung.
Ich verwende von Lazarus aus verschiedene externe Tools - so wie es üblich ist. Jedoch bisher nie mit der Option, visuelle Ausgaben umzuleiten.
Technisch möglich muß das sein, da MuPDF via SumatraPDF als Plugin in Firefox läuft.
Meine Frage zielt in die Richtung, ob das jemand "zufällig" bereits probiert oder realisiert hat.
Btw.: Ist eine extrem schnelle und leichtgewichtige PDF-Viewer-Implementierung.
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: MuPDF - PDF-Viewer-Komponente
Technisch gesehen werden auch keine "visuellen Ausgaben" umgeleitet; die entsprechenden Bibliotheken bieten Funktionen an, um die Ausgabe beliebig einzubetten bzw. auch andersherum Firefox biete eine API an um andere Programme einzubetten.df.id hat geschrieben:Ich verwende von Lazarus aus verschiedene externe Tools - so wie es üblich ist. Jedoch bisher nie mit der Option, visuelle Ausgaben umzuleiten.
Ich hab mir gerade den SourceCode des SumatraPDF-Plugins angeschaut. Wenn ich die richtige Datei gefunden hab, scheint das nicht all zu aufwändig zu sein; C bzw. C++ Kenntnisse müssen aber vorhanden sein.df.id hat geschrieben:Technisch möglich muß das sein, da MuPDF via SumatraPDF als Plugin in Firefox läuft.
Meine Frage zielt in die Richtung, ob das jemand "zufällig" bereits probiert oder realisiert hat.
Als Alternative: PDF-Datei als rastern und das Bild anzeigen. Dabei geht natürlich jegliche Interaktion und jegliche Vorteile von PDF (Schrift, Vektoren, usw.) verloren.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: MuPDF - PDF-Viewer-Komponente
Sorry, aber das kann nun wirklich gar keine Alternative sein. Ich kenne keine Software-Firma, die dass so machen würde.Socke hat geschrieben: (...)
Als Alternative: PDF-Datei als rastern und das Bild anzeigen. Dabei geht natürlich jegliche Interaktion und jegliche Vorteile von PDF (Schrift, Vektoren, usw.) verloren.
Gruß
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: MuPDF - PDF-Viewer-Komponente
Die sauberste Lösung wäre, eine NSPlugin-Komponente für Lazarus zu entwickeln und dann den offiziellen PDF Reader von Adobe einzubinden. Dann hat man mit der Klappe alle Fliegen aka Flash, Java, Unity geschlagen.
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
Re: MuPDF - PDF-Viewer-Komponente
Ich schreibe mal über meine Zwischenergebnisse:
Zum guten Stichwort NSPlugin-Komponente habe ich hier
http://www.lazarusforum.de/viewtopic.ph ... 5&start=19" onclick="window.open(this.href);return false;
den coolen Tipp gefunden, einen fremden Prozess auf einem TPanel laufen zu lassen.
Im Quellcode von SumatraPDF habe ich noch was besseres gefunden: Die Option -plugin <hwnd>. Damit kann man den PDF-Viewer starten und direkt das Handle eines TPanel übergeben. Klappt soweit unter Windows.
Beispielaufruf um PdfFileName in Panel1 anzuzeigen, wenn SumatraPDF.exe im aktuellen Verzeichnis liegt:
Sieht so aus:

Jetzt muss ich nur noch mit dem Prozess "reden" für den Dokumentenwechsel, Schließen und Resize. Das sollte aber möglich sein.
Zum guten Stichwort NSPlugin-Komponente habe ich hier
http://www.lazarusforum.de/viewtopic.ph ... 5&start=19" onclick="window.open(this.href);return false;
den coolen Tipp gefunden, einen fremden Prozess auf einem TPanel laufen zu lassen.
Im Quellcode von SumatraPDF habe ich noch was besseres gefunden: Die Option -plugin <hwnd>. Damit kann man den PDF-Viewer starten und direkt das Handle eines TPanel übergeben. Klappt soweit unter Windows.
Beispielaufruf um PdfFileName in Panel1 anzuzeigen, wenn SumatraPDF.exe im aktuellen Verzeichnis liegt:
Code: Alles auswählen
PID:=Windows.ShellExecute(
0,
nil,
pChar('SumatraPDF.exe'),
pChar('-plugin '+IntToStr(Panel1.Handle)+' '+PdfFileName),
nil,
SW_MAXIMIZE);
Jetzt muss ich nur noch mit dem Prozess "reden" für den Dokumentenwechsel, Schließen und Resize. Das sollte aber möglich sein.
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
Sag mal, warum genau möchtest du unbedingt PDF einbinden? Vielleicht gibt es bessere Möglichkeiten ohne PDF.
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
Es handelt sich um eine Patientenakte, als Teil einer Arztsoftware, in der gescannte oder elektronisch generierte Dokumente eingebunden sind (Briefe, Scans, eMail, Medizintechnik). Bisher kann man ein Dokument bei Bedarf über eine Benutzeraktion öffnen. Ich rufe dann den passenden Viewer auf. Bei den aktuellen großen Bildschirmen ist genug Platz, Akte und Dokumenteninhalte (PDF) gleichzeitig darzustellen: Das Dokument, auf dem man mit dem Cursor steht, wird automatisch auf einer Hälfte der Software dargestellt. So bei bei eMail-Clients die eMail-Inhalt oft direkt dargestellt werden. PDF wird aufgrund seiner vielfältigen Möglichkeiten (z.B. elektronische Signaturen) zunehmendst verwenden. Bei TIFF, PNG und JPG habe ich Viewer, nur PDF kann Lazarus nicht nativ darstellen.pluto hat geschrieben:Sag mal, warum genau möchtest du unbedingt PDF einbinden? Vielleicht gibt es bessere Möglichkeiten ohne PDF.
Ansonsten bevorzuge ich flach, Fensterlose Designs, bei dem sich alles auf dem Applikationsframe abspielt. So kann man die Applikation in jeder Situation verschieben oder verkleinern, ohne dass ein modaler Dialog blockert oder separate Fenster stehenbleiben. Mit dem Docking Manager geht Lazarus auch in diese Richtung.
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
Hallo df.id,
erzählst Du uns auch noch, wie Du mit dem Prozess "redest"?
Es würde mich brennend interessieren.
Dokumentenwechsel, Panel schließen, Application schließen...
Muss eigentlich der Aufruf unbedingt mit Shellexecute sein?
Ich dachte mir TProcess wäre der elegantere Weg.
Viele Grüße von der PDF-Viewe-Komponenten-Front.
Fritz Kirch
erzählst Du uns auch noch, wie Du mit dem Prozess "redest"?
Es würde mich brennend interessieren.
Dokumentenwechsel, Panel schließen, Application schließen...
Muss eigentlich der Aufruf unbedingt mit Shellexecute sein?
Ich dachte mir TProcess wäre der elegantere Weg.
Viele Grüße von der PDF-Viewe-Komponenten-Front.
Fritz Kirch
-
- Beiträge: 20
- Registriert: Fr 23. Mai 2008, 00:29
- OS, Lazarus, FPC: Windows|Linux (L 3.8.0 FPC 3.2.2)
- CPU-Target: Intel
- Wohnort: Münster
- Kontaktdaten:
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
ShellExec war der quick and dirty way.kirchfritz hat geschrieben:erzählst Du uns auch noch, wie Du mit dem Prozess "redest"?
Natürlich werde ich im Projekt TProcess (mit Pipes) verwenden.
Mir ging es hier erstmal über die Machbarkeit überhaupt.
Mit SumatraPDF kann ich dann kommunizieren (Das ist bisher nur Theorie und Planung, aber daher rede ich hier ja VORHER mal darüber)
- Windows-Messages (für Layout und Position sollte das Standard sein und die App unterstützen)
- StdIn/StdOut, dazu müsste SumatraPDF geändert werden (aber auch das wäre möglich, da der Source verfügbar ist).
- Prozess killen und neu initialiseren für jedes neue Dokument. Im Normaleinsatz erzeugt SumatraPDF auch eine neue Instanz pro Dokument. Im Gegensatz zum AcrobatReader ist die App auch sofort da.
Nachdem ich rausgefunden habe, das man ein fremden Prozess im eigenen Panel darstellen kann (wusste nicht, das sowas geht), bieten sich noch weitere Möglichkeiten. Zum Beispiel einen Viewer in Java, der dann genau das Interface bekommt, das man benötigt.
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
Ich habe ShellExecute ersetzt mit
und es funktioniert wunderbar!
Code: Alles auswählen
with TProcess.Create(nil) do
begin
CommandLine := 'SumatraPDF.exe ' +
'-reuse-instance -plugin '+
IntToStr(Panel1.Handle)+
pdfFilename;
Execute;
free;
end;
-
- Beiträge: 216
- Registriert: Mo 3. Jan 2011, 13:34
- OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
- CPU-Target: 64Bit
- Wohnort: Nürnberg
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
und Process killen ist wegen dem Parameter
auch nicht mehr nötig!
Code: Alles auswählen
-reuse-instance
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
Das sind aber Funktionen, die die Anwendung mitbringen muss. Z.B. mplayer hat ebenfalls so was. Aber leider haben nicht alle Anwendungen sowas oder?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 657
- Registriert: Sa 9. Jan 2010, 17:32
- OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
- CPU-Target: 64Bit
Re: MuPDF/SumatraPDF - PDF-Viewer-Komponente
Nö, davon kann man nicht wirklich ausgehenpluto hat geschrieben:Das sind aber Funktionen, die die Anwendung mitbringen muss. Z.B. mplayer hat ebenfalls so was. Aber leider haben nicht alle Anwendungen sowas oder?
