Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi PDF ohne weitere Funktionen Anzeigen (https://www.delphipraxis.net/164096-pdf-ohne-weitere-funktionen-anzeigen.html)

Freiwilderer 28. Okt 2011 12:33


PDF ohne weitere Funktionen Anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo alle miteinander,

ich hab momentan ne kleine Sache an der Backe, die etwas ausartet und zwar soll eine Tabelle angelegt werden, in der man PDFs ablegen und später rechte gesteuert entweder downloaden, drucken oder anzeigen kann.
Die PDFs müssen in der DB liegen (MSSQL) und das Ganze läuft als remote App.

Ich bin jetzt so weit, dass ich über die Zwischenablage PDFs in ein NVARBinary(Max) feld hochladen kann, runterladen in die Zwischenablage funktioniert auch. Jetzt kommt das Problem:
Für die Vorschau habe ich versucht ein TWebBrowser objekt zu verwenden.
1. weiß ich nich, wie ich dieses objekt mit dem Stream aus dem DB Felf füllen kann (vielleicht geht das auch gar nicht und ich muss ggf auf eine Temp datei zurück greifen) für einen Tip hierzu wäre ich trotzdem sehr dankbar.
2. Wenn ich das PDF dort anzeigen lasse, werden die Funktionen für abspeichern und drucken angezeigt. Da es aber User gibt, die die PDFs nur sehen, aber nicht speichern oder drucken dürfen (ich weiß, totaler quatsch eigentlich ...) kann ich mit der Anzeige über den Webbrowser so nicht so viel anfangen.

lösungsansatz für 2.
Ich hab mir überlegt, ich lade die Datei in den Webbroser, der aber invisible ist.
Wenn ich Drucken will löse ich über
Delphi-Quellcode:
   WebBrowser.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER);
direkt den Druck aus.
Das funktioniert super.

Überlegung 2, wenn ich dort drucken kann, kann ich auch eine Vorschau anzeigen, versucht über:
Delphi-Quellcode:
   WebBrowser.ExecWB(OLECMDID_PRINTPREVIEW, OLECMDEXECOPT_PROMPTUSER);
das löst allerdings diese Fehlermeldung aus:
Es wurde versucht, ein Drop-Ziel zu widerrufen, das nicht registriert wurde.
(siehe Bild)


EDIT:
ich hab grad nochmal etwas rumgetestet, ... diese Fehlermeldung kommt, weil im Webbrowser ein PDF angezeigt wird, bei TXT dateien gehts. Allerdings kann man von da direkt auch drucken :(...

Jumpy 28. Okt 2011 12:54

AW: PDF ohne weitere Funktionen Anzeigen
 
Ein etwas anderer Gedanke. Beim erzeugen von PDFs kann man doch normalerweise festlegen, was man damit machen kann. Vllt. wäre es ja möglich jeweils 3 rechtlich unterschiedliche Versionen des PDFs zu speichern und je nach User das erlaubte aus der DB laden.

Freiwilderer 28. Okt 2011 13:02

AW: PDF ohne weitere Funktionen Anzeigen
 
hi,
danke schonmal für den gedanken, da war ich noch nicht drauf gekommen.

leider hilft das aber auch nix, da ich die PDFs nicht anlege, sondern user...

stahli 28. Okt 2011 13:18

AW: PDF ohne weitere Funktionen Anzeigen
 
Ich bezweifle etwas, dass der Webbrowser + PDF-Reader auf sichere Weise derart konfigurierbar ist. Vielleicht solltest Du Dich doch nach einer speziellen PDF-Komponente umsehen (ich kenne selbst keine).

Alternativ könnte man den Webbrowser vielleicht mit einer transparenten Form überlagern (so dass man ihn nicht per Maus erreicht) oder den Focus per Timer auf ein bestimmtes Control setzen. Das würde ich aber auch nur als unschöne Notlösung in Erwägung ziehen.

Freiwilderer 28. Okt 2011 13:20

AW: PDF ohne weitere Funktionen Anzeigen
 
hi,

ich versuch gerade ne den aloaha saver pdfviewer zu installieren, ....... aber der zickt rum wie sau...

über eine transparente form über dem webbrowser hab ich auch schon nachgedacht, aber habs nicht hinbekommen ...... wie mach ich denn ne form transparent? ... problem is sicher auch, dass man dann vermutlich probleme mit dem scrollen bekommt

EDIT:
eine Alternative wäre natürlich die PDFs direkt beim speichern zusätzlich als bild abzuspeichern, welches man dann anders anzeigen lassen kann.
Aber ich habe noch keine Möglichkeit gefunden ein PDF, das in meiner zwischenablage ist, in ein Bild umzuwandeln, das könnte auch zu komplikationen führen, nehme ich an...

Jumpy 28. Okt 2011 13:47

AW: PDF ohne weitere Funktionen Anzeigen
 
Nochmal zu den PDFs mit verschiedenen Rechten. Irgendwo übergibt ein User ja einen Pfad zu einer PDF-Datei, damit dieser der DB hinzugefügt wird. Dann kann man doch automatisch zunächst temporär weitere Versionen mit untersch. Rechtestufen erzeugen. Alle 3 Versionen in die DB laden und dann die temporären Dateien wieder löschen. Ein Tool, das das glaub ich könnte wäre pdftk.

Freiwilderer 28. Okt 2011 13:51

AW: PDF ohne weitere Funktionen Anzeigen
 
Der upload läuft über die Zwischenablage, weil es sich, wie gesagt um eine Remoteapp handelt und die lokalen resourcen nicht erreichbar sind. Abgesehen davon weiß ich ehrlich gesagt nicht, wie ich das automatisch machen kann :D
ich müsste dafür ja die pdf datei quasi öffnen, verändern und neu abspeichern, oder?

Jumpy 28. Okt 2011 13:59

AW: PDF ohne weitere Funktionen Anzeigen
 
Dafür hatte ich ja z.B. das Tool pdftk erwähnt. Das ist ein Kommandozeilenprogramm, das kriegt ein paar Parameter und das war es dann. Wenn dir auf dem Server natürlich niemals das PDF als Datei vorliegt, sondern nur als Binärer Datenstrom o.ä., weil du das über die Ablage bekommst, wird das natürlich nicht gehen, hast recht.

Freiwilderer 28. Okt 2011 14:02

AW: PDF ohne weitere Funktionen Anzeigen
 
ich behalte das mal im Hinterkopf,
wenns gar nicht anders geht, könnte ich die Datei vom stream natürlich wieder in eine Datei auf dem server schreiben und dann verändern, ... wirklich gefallen tut mir das allerdings nicht.

stahli 28. Okt 2011 14:37

AW: PDF ohne weitere Funktionen Anzeigen
 
Zitat:

Zitat von Freiwilderer (Beitrag 1133178)
wie mach ich denn ne form transparent? ... problem is sicher auch, dass man dann vermutlich probleme mit dem scrollen bekommt

Wie gesagt: Notlösung, aber

AlphaBlend gibt es schon in D7. Ich denke, das sollte so lösbar sein (wenn nix besseres geht). Das TranspForm müsste man allerdings mitführen, wenn das MainForm bewegt wird.

Zum Scrollen: Man könnte die Strollbars evtl. unverdeckt lassen (wobei der WebBrowser dann vielleicht direkt den Focus erhält!?) oder auf dem TranspForm Buttons für Scrollaktionen anbieten und Ereignisse an den Webbrowser senden.
Keine Ahnung, ob das ohne Probleme zu realisieren ist aber andere Ideen habe ich dazu nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:48 Uhr.
Seite 1 von 2  1 2      

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