AGB  ·  Datenschutz  ·  Impressum  







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

PDF in Datenbank speichern

Ein Thema von HolgerCW · begonnen am 19. Aug 2013 · letzter Beitrag vom 21. Aug 2013
 
Perlsau
(Gast)

n/a Beiträge
 
#3

AW: PDF in Datenbank speichern

  Alt 19. Aug 2013, 12:15
Also ich speichere meine Dokumente in einem Firebird-Blob so:
Delphi-Quellcode:
Function TDatMod.DateiToBlob(Datei: String; Blobfeld: TField): Boolean;
VAR
   S : TStream;
   FileS : TFileStream;

begin
   Result := FALSE;
   S := BlobFeld.DataSet.CreateBlobStream(BlobFeld, bmReadWrite);

   TRY
      FileS := TFileStream.Create(Datei, fmOpenRead);
      S.CopyFrom(FileS, FileS.Size);
      Result := TRUE;
   FINALLY
      FileS.Free;
      S.Free;
   END;
end;
Übergeben wird einfach der Dateiname und das Blobfeld. Zuvor wird natürlich der Datensatz zum Editieren vorbereitet, und auch das Post erfolgt nicht in der Funktion. Die erledigt nur das reine Einlesen einer Datei in ein Blobfeld.

Um eine im Blob gespeicherte PDF- oder HTML-Datei im Embedded WebBrowser anzuzeigen, gehe ich z.B. so vor:
Delphi-Quellcode:
procedure TFormDoku.DokumentLaden;
Var
  PersistStreamInit : IPersistStreamInit;
  StreamAdapter : IStream;
  MemoryStream : TMemoryStream;
  Stream : TStream;
  Blobfeld : TField;

begin
   Blobfeld := DatMod.Qset_NewsLink.FieldByName('INHALT');
   Stream := BlobFeld.DataSet.CreateBlobStream(BlobFeld, bmRead);

   EmbWeb.Navigate('about:blank'); // Leeres HTML-Dokument in Browser laden um ein valites HTML-Dokument zu erzeugen

   // wait until finished loading
   Repeat
    Application.ProcessMessages;
    Sleep(0);
   Until EmbWeb.ReadyState = READYSTATE_COMPLETE;

   // Get IPersistStreamInit - Interface
   IF EmbWeb.Document.QueryInterface(IPersistStreamInit, PersistStreamInit) = S_OK THEN
   BEGIN
      IF PersistStreamInit.InitNew = S_OK THEN // Clear document
      BEGIN
         // Make local copy of the contents of Stream if you want to use Stream directly, you have to
         // consider, that StreamAdapter will destroy it automatically
         MemoryStream:= TMemoryStream.Create;
         Try
           MemoryStream.CopyFrom(Stream, 0);
           MemoryStream.Position:= 0;
         Except
           FreeAndNil(MemoryStream);
           Raise;
         End;
         StreamAdapter:= TStreamAdapter.Create(MemoryStream, soOwned); // Use Stream-Adapter to get IStream Interface to our stream
         PersistStreamInit.Load(StreamAdapter); // Load data from Stream into WebBrowser
      END;
   END;

   IF Assigned(Stream) THEN FreeAndNil(Stream);
   IF Assigned(Blobfeld) THEN FreeAndNil(Blobfeld);
end;
  Mit Zitat antworten Zitat
 


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 07:40 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