![]() |
PDF/XPS/Papierformat-Viewer für Delphi
Hallo zusammen,
ich bin Mediziner und habe für mein Arbeitsfeld (Pathologie) ein umfangreicheres Programm geschrieben, dass schon seit mehreren Jahren bei uns im Institut im Einsatz ist und von den Kollegen auch gerne benutzt wird. Es geht da um Klassifikation/Kodierung von Krankheiten, Dokument- und Bilddaten, die den Arzt bei der diagnostischen Tätigkeit unterstützen sollen. Zur optisch "schönen" Darstellung von Dokumenten benutze ich derzeit die Adobe ActiveX, die jedoch beim Beenden der Anwendung sehr häufig zu nervigen Access Violations führt,u.a. wohl weil die Instanzen nicht zuverlässig zerstört werden, sondern fortbestehen. Die Kapselung im TWebBrowser bringt da auch nichts. Das Adobe-Teil ist auch nicht gerade ressourcenschonend, vom Handling irgendwie "klobig" und zwingt einem das Adobe-Layout auf, das nicht unbedingt zum Rest der Anwendung passt. Ich hatte schon vor längerer Zeit hier mal die Frage nach einer brauchbaren Komponente/ActiveX zur Einbindung eines Papierformats in eine Delphi-Anwendung gestellt, bin leider nach wie vor auf der Suche. Es gibt natürlich eine Reihe professioneller Lösungen, die aber alle preislich bei mehreren 100 bis über 1000 Dollar oder Euro liegen, was für mich nicht in Frage kommt, da ich mit meinem Programm nichts verdiene. Hat sich da mittlerweile irgendwas getan? Um was für ein Format es sich genau handelt, ist mir prinzipiell egal, es sollte nur eine optisch schöne Darstellung von selbst erstellten Dokumenten (antialiased wie in PDF) erlauben. Möglichst nicht mit einem riesigen Overhead und schön schnell wäre natürlich optimal. Meine eigene - ausführliche - Suche war bislang erfolglos, deshalb hier nochmal meine Anfrage..! Vielen Dank, Bernhard |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Chromium hat einen eigenen Renderer eingebaut. Den könntest du verwenden (entweder mit dem Chromium Embedded Framework oder aber direkt das JavaScript-Projekt das das Rendering übernimmt). Oder: Nimm direkt HTML5 und CSS für die Darstellung.
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Hallo TReader,
Danke für den Tipp. Ich war bei meiner Suche auch schon mal drauf gestoßen...die Einbettung eines Browsers klingt allerdings nach viel "overhead". Es wäre schön wenn es eine simplere und schlankere Lösung gäbe. Möglichst so einfach in der Anwendung wie das Acrobat-Teil, ohne die Bugs allerdings. Gruß, Bernhard |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Adobe an sich ist ein riesiger Overhead - OK, die meisten dürften Adobe bereits installiert haben, aber was, wenn nicht? Chromium kannst du direkt in die Anwendung einbinden, gibt noch die eine oder andere DLL im Programmverzeichnis mit und die Sache ist unabhängig von Drittkomponenten. Von der Anwendung her ist Chromium sehr einfach. Mich begeistert vor allem die Kommunikation zwischen dem Programm (Delphi) und dem Browser (JavaScript). Einen weiteren Vorteil sehe ich beim Verlinken. Wenn aus einem deiner Dokumente ein Link ins weite Internet geht, kannst du die Inhalte in deiner Anwendung anzeigen, was dir mit Adobe nicht möglich ist.
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Chromium behalte ich mal im Hinterkopf, für den Fall das keine "kleinere" Lösung finde. Eigentlich brauche ich aber nur einen ganz simplen PDF Viewer für ziemlich einfach gestrickte Dokumente, hauptsächlich Text.
Hab da jetzt so ein Projekt namens pdf4ax ( ![]() |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Gibt es bei dir die Application.Initialize() in der .dpr schon? (Delphi-Version ist möglicherweise zu alt..)
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Ja, Application.Initialize gibt's.
Hier noch eine ActiveX für halbwegs erträgliche $110: ![]() Die rendert das PDF jedoch nur 1x und behandelt es dann wie ein Bild, was beim Vergrößern unschön ist. |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Resümee nach Installation oder versuchter Installation praktisch aller verfügbarer PDF-Komponenten:
Es gibt keine vernünftige Komponente. Mindestens einen Haken haben Sie alle! :( - Adobe Acrobat OCX: schöne Renderingqualität, Layout nicht voll anpassbar, etwas träge, fehlerhaft, dafür kostenlos - Foxit ActiveX: schöne Renderingqualität, Layout gut anpassbar, recht schnell, $1200 - Radaee ActiveX: schöne Renderingqualität, schnell, Installation hat bei mir nicht funktioniert, $399 - Sorax ActiveX: mäßige Renderingqualität, weniger schnell, umständliches Handling, Darstellung nur begrenzt anpassbar, 96 Euro - Haihaisoft ActiveX: mäßige Renderingqualität, ok schnell, Layout nicht anpassbar, nervige Updateaufforderungen, kostenlos, wohl nicht mehr verfügbar - VeryPDF ActiveX: mäßige Renderingqualität, ok schnell, $1200 - WPViewPDF ActiveX: rendert viele PDFs nicht so ganz dem Standard entsprechend, ok schnell, 295 Euro u.v.m. Bleibt zu hoffen, dass sich irgendwann mal ein Idealist aufrafft und auf Basis von MuPDF/Poppler o.ä. was entwickelt. Ist leider jenseits meines programmiertechnischen Erkenntnishorizonts. |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Würde dir eine Ansicht wie beim Explorer (Preview) reichen?
Dann kannst du nämlich einfach diesen PreviewHandler für die Anzeige benutzen und dein Programm kann alles anzeigen, was der Explorer anzeigen kann ;) |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Das Preview nutzt wohl den Acrobat Reader, in angepasster Form. Wäre zu prüfen, ob da beim Beenden der Anwendung ähnliche Probleme wie bei der OCX entstehen (häufige Access Violations).
Allerdings läuft mein Programm in der EDV-Umgebung einer Uniklinik auf WinXP...ich nehme mal an ein derartiges Preview gab es zu XP-Zeiten noch nicht. Aber ich schaue mir das mal an. Danke für den Tipp! |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Doch, ab Windows XP ist
Delphi-Quellcode:
bekannt
IPreviewHandler
![]() |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Hallo
Zitat:
Diese Antwort interessiert mich (allerdings unabhängig vom PDF Thema). Was ich bei Chromium hinbekommen habe sind Alerts im Javascript die ich in Delphi dann abfange. Geht, aber besonders schön finde ich das nicht ==> Geht das besser? wenn ja würde ich mich über eine Antwort mit einem kleinen Beispiel freuen. Danke Reinhold |
AW: PDF/XPS/Papierformat-Viewer für Delphi
schau mal ob du das hier für Delphi gebrauchen kannst
![]() ![]() ![]() |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Zitat:
![]() |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Zitat:
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Zitat:
Hallo Ich habe versucht den Beispielquellcode nachzuvollziehen, leider ohne Erfog. Ich bekomme es zwar durch den Compiler aber dann klappt es leider nicht (ohne Fehlermeldung). Ich habe einfach meine Unit drangehängt, vielleicht sieht ja jemand auf die schnelle meinen Fehler. mfg Reinhold
Delphi-Quellcode:
unit utestCallBack;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, cefvcl,ceflib; type TForm19 = class(TForm) crm: TChromium; Panel1: TPanel; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private procedure RegisterExtension; { Private-Deklarationen } public { Public-Deklarationen } end; TMyHandler = class(TCefv8HandlerOwn) protected function Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean; override; end; var Form19: TForm19; implementation {$R *.dfm} procedure TForm19.RegisterExtension; var Code:string; begin // Register a V8 extension with the below JavaScript code that calls native // methods implemented in ClientV8ExtensionHandler. Code := 'var cef;'+ 'if (!cef)'+ ' cef = {};'+ 'if (!cef.test)'+ ' cef.test = {};'+ '(function() {'+ ' cef.test.__defineGetter__(''test_param'', function() {'+ ' native function GetTestParam();'+ ' return GetTestParam();'+ ' });'+ ' cef.test.__defineSetter__(''test_param'', function(b) {'+ ' native function SetTestParam();'+ ' if(b) SetTestParam(b);'+ ' });'+ ' cef.test.test_object = function() {'+ ' native function GetTestObject();'+ ' return GetTestObject();'+ ' };'+ '})();'; CefRegisterExtension('example/v8', Code, TMyHandler.Create as ICefv8Handler); end; procedure TForm19.Button1Click(Sender: TObject); begin //Test ob Javascript Aufgruf geht // if crm.Browser <> nil then // crm.Browser.MainFrame.ExecuteJavaScript( // 'alert("teste javascript");', 'about:blank', 0); crm.Browser.MainFrame.ExecuteJavaScript('cef.test.test_object().GetMessage();', 'about:blank', 0); // if crm.Browser <> nil then // crm.Browser.MainFrame.LoadUrl('www.google.de'); end; procedure TForm19.FormCreate(Sender: TObject); begin RegisterExtension; end; { TMyHandler } function TMyHandler.Execute(const name: ustring; const obj: ICefv8Value; const arguments: TCefv8ValueArray; var retval: ICefv8Value; var exception: ustring): Boolean; begin ShowMessage('Execute!'); end; end. |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Bekommst du das obere Beispiel denn zum Laufen? (das, welches ohne Extensions funktioniert)?
Wir verwenden Delphi<->JavaScript<->Delphi eigentlich nur für Dateizugriffe. Alles andere lösen wir direkt mittels JavaScript. |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Hallo Bernhard,
mit der PDF Anzeige ist das so ein Problem. Die Activex-Komponente von Foxit ist nicht schlecht, leider haben die sehr komische Preisvorstellungen. Ich verwenden von Gnostice das PDFtoolkit ( ![]() Gruß moonwalk55 |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Zitat:
Ja geht ohne Fehlermeldung und ohne Exception, nur leider auch ohne die erhoffte Messagebox. Mir ist klar das ich mich selber nochmals durch die Beispiele kämpfen muss, und das ich nicht erwarten das mir jemand meine Aufgaben auf dem Silbertablet löst. Ich werde mir das ganze am Montag nochmals genauer ansehen vielleicht finde ich ja noch was, mein Problem ist das ich kein logisches Problem habe welches ich debuggen kann, sondern das ich über Try und Error versuche die Sache zu verstehen. (und Chromium ist ja nun wirklich kein kleines Projekt) mfg Reinhold |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Am besten machst du dazu ein neues Thema auf. Werde mir, wenn möglich, morgen auch mal ein paar Minuten Zeit nehmen, dir ein funktionierendes Beispiel zusammenzustellen.
Edit: Mir fällt gerade auf, dass du versuchst im FormCreate die Extension zu binden. Möglicherweise liegt da der Hund begraben. |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Hallo moonwalk55,
Gnostice kannte ich schon, hatte es aber nicht getestet, aufgrund älterer Erfahrungsberichte, die die Komponente als etwas unausgereift beschrieben. Ich versuch's jetzt dann doch mal. Soweit ich sehen kann, ist der minimale Preis für das Paket ohne Source $199, was immer noch ziemlich happig ist, bedenkt man dass mein Programm rein institutsintern verwendet wird und ich keinerlei Gewinn hieraus erziele. Aber das wäre noch im erträglichen Rahmen. Die Activex von Foxit hat mit ebenfalls so ziemlich am besten gefallen, da sie voll anpassbar ist und hinsichtlich Qualität, Schnelligkeit und Handling überzeugt. Der PDF-Viewer von Chrome basiert wohl auf Foxit-Software. Bei den Preisen kann kann sich das auch nur Google leisten! Gruß, Bernhard Zitat:
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Kann das Gnostice-Teil leider nicht installieren. Arbeite mit Delphi7 PE und da fehlt wohl so manche .dcu, die hier notwendig wäre.
Aber zumindest ein Hoffnungsschimmer: Ich habe mir dann nochmal den PDF Reader von Haihaisoft angeschaut. Eine alte Version enthielt eine ActiveX, die mit Delphi funktionierte. Die Titelleiste war eher unschön, ließ sich aber mit Top:=-39 aus dem sichtbaren Bereich entfernen. Problematisch war für mich damals, dass der Reader den Anwender mit Updateaufforderungen nervte. Die Versionsnummer weiß ich nicht mehr, die ganz alten Versionen sind scheinbar auch nicht mehr verfügbar. Aktuell ist Version 1.4.5, die ich mit Delphi nicht zum laufen bringe. Version 1.4.3 enthält aber eine ActiveX, die verwendbar sein könnte. Eigentlich ist das Teil wohl zur Einbettung des Readers in Webpages gedacht, funkioniert ansatzweise auch auf einer Delphi-Form. Ansatzweise heißt hierbei, das ich es nur in FormCreate schaffe, ein PDF anzuzeigen. Die gleiche Operation (z.B. PDFReaderOCX1.URL:='C:\test.pdf') an anderer Stelle führt zwar zu keiner Fehlermeldung, es wird aber auch nichts angezeigt. Hat jemand vielleicht eine Idee, woran dieses seltsame Verhalten liegen könnte? Die Qualität und Geschwindigkeit stimmen an sich, ich habe den Verdacht, dass die ActiveX auf Sumatra basiert. Gruß, Bernhard |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Zitat:
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Ich hab irgendwo noch die ALTE Version 1.1 des Haihaisoft PDF Readers (Freeware) gefunden. Dessen ActiveX ermöglicht definitiv das Einbetten von PDFs in einer Delphi-Anwendung. Ich hoffe nun, das es sich nicht wieder um eine Version handelt, die einen ständig zum Updaten auffordert. Ein Update URL-Property wie in der Version, die ich vor Jahren schonmal erfolgreich getestet hatte, gibt's zumindest mal nicht.
Ist natürlich keine Lösung für Leute, die Ihre Software verkaufen wollen - das dürfte so ohne weiteres nicht erlaubt sein. Eine Lizenz kann man für die ActiveX scheinbar nicht erwerben, es gab das File aber eine Zeit lang kostenlos zum Download bei Haihaisoft selbst. Die verdienen ihr Geld wohl mehr mit DRM, der Reader und ein paar andere angebotene Programme dienen wohl Werbezwecken. Gruß, Bernhard |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Wäre
![]() Man müsste nur schauen, ob die GPL es erlaubt, das Plugin mit einer eigenen Anwendung weiterzugeben, das weiß ich grad nicht. |
AW: PDF/XPS/Papierformat-Viewer für Delphi
Hallo Philip,
danke für den Tipp, werde mir das mal ansehen. Diese ActiveX von Haihaisoft entspricht aber wohl bereits zu 99.9% Sumatra, wobei die nur noch DRM-Zeugs ergänzt haben. Funktioniert bestens mit Delphi. Allerdings gibt's natürlich keine Beschreibung zu den zur Verfügung stehenden Properties, das muss ich mir irgendwie selbst zusammenreimen. PDF anzeigen, zoomen und drucken geht bereits. Gruß, Bernhard Zitat:
|
AW: PDF/XPS/Papierformat-Viewer für Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
Ich nochmal,
nach einigem Testen muss ich sagen, die Lösung mittels der Haihaisoft ActiveX funktioniert für mich ganz gut. Aus dem Quellcode geht eindeutig hervor, das die Implementation praktisch Sumatra/MuPDF entspricht und nur gering modifiziert wurde. Das Skinnen der Scrollbars (mittels AlphaSkins) habe ich bisher noch nicht geschaft, aber das ist ein kleineres kosmetisches Problem. Noch was - gehört hier zugegebenermaßen nicht mehr so ganz rein - aber da den Thread sicherlich Leute lesen, die sich mit PDF beschäftigt haben: Beim Erstellen von PDFs auf dem üblichen Weg (über diese Druckeremulationen) z.B. aus Word heraus entstehen bei farbigen Tabellen häufig Artefakte, z.B. Blockbildung um farbig hinterlegten Text (siehe Anhang). Muss man sich damit abfinden, ober gibt's da Wege das zu verhindern? Gruß, Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz