![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX
PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Hallo,
ich würde gern ein PDF-Dokument in ein BLOB-Feld in der Datenbank einlesen und anschließend in einem Programmfenster wieder anzeigen können. Jetzt meine Fragen: Ist das irgendwie machbar (keine Kaufkomponenten da es sich um ein gemeinnütziges Projekt handelt.) und leidet evtl. darunter die Performanz, da sich die DB doch stark aufbläht. Das PDF-Dokument separat abspeichern hat halt den Nachteil, dass bei einer Sicherung wieder mehr Fehlerquellen vorhanden sind. Gruß Frank |
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Datei in Temp-Ordner auslagern und dann Aufrufen
|
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Hallo Markus,
danke für die schnelle Antwort. Mit JPG-Dateien funktioniert es, aber bei PDF-Dateien erhalte ich beim temporären Zwischenspeichern eine Datei, die der Reader nicht mehr lesen kann. Und die Frage nach der Performanz, weißt Du da eine Antwort drauf? Gruß Frank |
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Ich mache das auch so. Bei mir funktioniert es?
Blobs werden getrennt von den restlichen Daten gespeichert. Diese bremsen den ugriff deshalb nicht aus. natürlich dauert das Auslagern und anschliessende Löschen jedesmal etwas Zeit. |
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Gerade Firebird hat (im Gegensatz zu z.B. mySQL) eine sehr gute BLOB-Performance.
In manchen Blogs wird sogar behauptet, Firebird sei in manchen Fällen sogar schneller als das Dateisystem. Warum der Reader deine PDFs nicht mehr lesen kann, verstehe ich nicht so ganz. BLOBS sind rein binäre Daten, die Datei-Endung oder was für einen MimeTyp man darin speichert ist völlig egal. Was rein geht, wird nicht verändert, binär halt. Evtl. ein Fehler beim Speichern der PDF in den BLOB in deiner Applikation? |
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Ich vermute auch, dass entweder beim Speichern oder beim Auslesen etwas nicht stimmt.
|
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Zitat:
|
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
gegf. eine eigenen Unterordner anlegen, dessen Inhalt bei Start und Ende des Programmes versucht wird aufzuräumen...
|
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Oder Programm starten und auf dessen Ende warten. Anschließend versuchen, die Datei wieder zu löschen (das muss beim Adobe Reader nicht unbedingt funktionieren, deshalb Betonung auf versuchen). Oder AFAIK gab es eine Art FileMode, der bestimmt, dass diese Datei nach einem Reboot automatisch gelöscht wird, finde ich nur gerade nicht.
|
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
1) Beim Beenden des Programms versuchen, die Temp-Dateien zu löschen.
2) Wenn eine Datei im Zugriff ist (kann man ja feststellen), die Datei überspringen. 3) Beim nächsten Start des Programms oder jedesmal, bevor eine neue Datei vom Programm im Temp-Ordner angelegt wird, nach alten Dateien des Programms im Temp-Ordner suchen (gute Namenskonventionen vorausgesetzt) und versuchen, diese zu löschen. Der von DeddyH angegebene "FileMode" ist soviel ich weiss eine ![]()
Delphi-Quellcode:
// ungetestet, vorher nochmal nachlesen!! :-D
MoveFileEx('C:\Windows\temp\gesperrte.pdf','',MOVEFILE_DELAY_UNTIL_REBOOT); // kann auch sein, dass statt '' NULL oder nil stehen muss.. |
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Ich glaub, das war es, aber ich lese da gerade:
Zitat:
|
AW: PDF-Dokument aus Blob-Feld in einem Programfenster anzeigen?
Ich bau mir für solche Zwecke immer ein Formular mit der TWebBrowser-Komponente, dass ich modal anzeige. Sobald das Formular geschlossen wird, lösche ich die temporäre Datei wieder. Der Parameter aUrl im Konstruktor enthält Dateinamen inkl. Pfadangabe der temporären PDF-Datei.
Die Formular-Implementation sieht dann so aus:
Delphi-Quellcode:
type
TfrmBrowser = class(TForm) webBrowser: TWebBrowser; procedure FormShow(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private-Deklarationen } FUrl : string; public { Public-Deklarationen } constructor Create (aOwner: TComponent; const aUrl: string); end; var frmBrowser: TfrmBrowser; implementation {$R *.dfm} { TfrmBrowser } constructor TfrmBrowser.Create(aOwner: TComponent; const aUrl: string); begin inherited Create (aOwner); FUrl := aUrl; end; procedure TfrmBrowser.FormClose(Sender: TObject; var Action: TCloseAction); begin // Hier wird der Browser vom PDF-Dokument getrennt!!! Ansonsten kann die // Webbrowser-Komponente ggf. hängen. Hide; webBrowser.Navigate('about:blank'); while webBrowser.Busy do Application.ProcessMessages; end; procedure TfrmBrowser.FormShow(Sender: TObject); begin webBrowser.Navigate (FUrl); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 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-2025 by Thomas Breitkreuz