View Full Version : نمایش فایل pdf  ذخیره شده در دیتابیس
  
sam3610
جمعه 13 مهر 1397, 22:28 عصر
با سلام خدمت دوستان گرامی:
من یک فایل pdf رو که در ابزار gtPDFViewer1 کامپوننت pdftoolkit نمایش داده شده بود با کد :
procedure TForm1.Button2Click(Sender: TObject); var
   blob: TBlobField;
   TempStrm: TStream;
begin
      ADOTable1.Open;
      ADOTable1.Last;
      ADOTable1.Insert;
      blob := TBlobField(ADOTable1.FieldByName('P')); // ensure it ís a blob
      TempStrm := ADOTable1.CreateBlobStream(blob, bmWrite);
      try
          gtPDFDocument1.SaveToStream(TempStrm);
      finally
          TempStrm.Free;
          ADOTable1.Post;
          ADOTable1.Close;
          ShowMessage('ok');
          gtPDFDocument1:=nil;
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('select * from table1');
          ADOQuery1.Open;
      end;
end;
در دیتا بیس ذخیره کردم
حالا چجور می تونم مجددا این فایل رو نمایش در gtPDFViewer1  بدم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
ممنون میشم اگه راهنمایی بفرمایید.
sam3610
شنبه 14 مهر 1397, 15:43 عصر
اساتید ، دوستان کسی تجربه ای در این خصوص نداره>؟
hp1361
جمعه 20 مهر 1397, 02:54 صبح
با سلام خدمت دوستان گرامی:
من یک فایل pdf رو که در ابزار gtPDFViewer1 کامپوننت pdftoolkit نمایش داده شده بود با کد :
procedure TForm1.Button2Click(Sender: TObject); var
   blob: TBlobField;
   TempStrm: TStream;
begin
      ADOTable1.Open;
      ADOTable1.Last;
      ADOTable1.Insert;
      blob := TBlobField(ADOTable1.FieldByName('P')); // ensure it ís a blob
      TempStrm := ADOTable1.CreateBlobStream(blob, bmWrite);
      try
          gtPDFDocument1.SaveToStream(TempStrm);
      finally
          TempStrm.Free;
          ADOTable1.Post;
          ADOTable1.Close;
          ShowMessage('ok');
          gtPDFDocument1:=nil;
          ADOQuery1.Close;
          ADOQuery1.SQL.Clear;
          ADOQuery1.SQL.Add('select * from table1');
          ADOQuery1.Open;
      end;
end;
در دیتا بیس ذخیره کردم
حالا چجور می تونم مجددا این فایل رو نمایش در gtPDFViewer1  بدم؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
ممنون میشم اگه راهنمایی بفرمایید.
سلام
فیلد رو باید در قالب Stream بخونید(و مثلا درون یک متغیر از جنس Stream بریزید)
با استفاده از TgtCustomPDFDocument.LoadFromStream Method نمایشش بدید
مثالش در آدرس زیر هست:
https://www.gnostice.com/docs/pdftoolkit_vcl/frames.html?frmname=topic&frmfile=gtCstPDFDoc_TgtCustomPDFDocument_LoadFromS tream@TStream@String.html
sam3610
شنبه 21 مهر 1397, 18:08 عصر
سلام
فیلد رو باید در قالب Stream بخونید(و مثلا درون یک متغیر از جنس Stream بریزید)
با استفاده از TgtCustomPDFDocument.LoadFromStream Method نمایشش بدید
مثالش در آدرس زیر هست:
https://www.gnostice.com/docs/pdftoolkit_vcl/frames.html?frmname=topic&frmfile=gtCstPDFDoc_TgtCustomPDFDocument_LoadFromS tream@TStream@String.html
ممنون از شما بررسی میکنم نتیجه رو همینجا اعلام میکنم
sam3610
شنبه 21 مهر 1397, 18:45 عصر
دوست عزیز من کد رو به این نحو نوشتم :
procedure TForm1.Button3Click(Sender: TObject);var
  gtPDFDocument1: TgtPDFDocument;
  MemoryStream1: TMemoryStream;
begin
     MemoryStream1 := TMemoryStream.Create;
     MemoryStream1.LoadFromFile(ADOQuery1.FieldValues['p']);
     gtPDFDocument1 := TgtPDFDocument.Create(Nil);
     try
          gtPDFDocument1.LoadFromStream(MemoryStream1);
     finally
            ShowMessage('ok');
            if gtPDFDocument1.IsLoaded then
            begin
                 gtPDFViewer1.Active := True;
            end;
            MemoryStream1.Free;
     end;
end;
این ارور رو میده :
149076
hp1361
چهارشنبه 25 مهر 1397, 19:57 عصر
دوست عزیز من کد رو به این نحو نوشتم :
procedure TForm1.Button3Click(Sender: TObject);var
  gtPDFDocument1: TgtPDFDocument;
  MemoryStream1: TMemoryStream;
begin
     MemoryStream1 := TMemoryStream.Create;
     MemoryStream1.LoadFromFile(ADOQuery1.FieldValues['p']);
     gtPDFDocument1 := TgtPDFDocument.Create(Nil);
     try
          gtPDFDocument1.LoadFromStream(MemoryStream1);
     finally
            ShowMessage('ok');
            if gtPDFDocument1.IsLoaded then
            begin
                 gtPDFViewer1.Active := True;
            end;
            MemoryStream1.Free;
     end;
end;
این ارور رو میده :
149076
سلام
تابع LoadFromFile یک فایل موجود بر روی دیسک رو لود میکنه. شما نیاز دارید که از Memory لود کنید
به این شکل باید بنویسید
var
  BlobStream: TStream;
begin
  if (not ADOQuery1.FieldByName('p').IsNull) then
  begin
    BlobStream := TStream.Create;
    BlobStream := ADOQuery1.CreateBlobStream(ADOQuery1.FieldByName(' p'), bmRead);
    try
      gtPDFDocument1 := TgtPDFDocument.Create(Nil);
      gtPDFDocument1.LoadFromStream(BlobStream);
    finally
      ShowMessage('ok');
      if gtPDFDocument1.IsLoaded then
      begin
        gtPDFViewer1.Active := True;
      end;
      BlobStream.Free;
    end;
  end;
end;
 
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.