# Native Code > برنامه نویسی در Delphi > بانک های اطلاعاتی در Delphi >  نمایش فایل pdf  ذخیره شده در دیتابیس

## sam3610

با سلام خدمت دوستان گرامی:
من یک فایل 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

اساتید ، دوستان کسی تجربه ای در این خصوص نداره>؟

----------


## hp1361

> با سلام خدمت دوستان گرامی:
> من یک فایل pdf رو که در ابزار gtPDFViewer1 کامپوننت pdftoolkit نمایش داده شده بود با کد :
> 
> 
> procedure TForm1.Button2Click(Sender: TObject); var
>    blob: TBlobField;
>    TempStrm: TStream;
> begin
>       ADOTable1.Open;
> ...


سلام

فیلد رو باید در قالب Stream بخونید(و مثلا درون یک متغیر از جنس Stream بریزید)

با استفاده از TgtCustomPDFDocument.LoadFromStream Method نمایشش بدید

مثالش در آدرس زیر هست:

https://www.gnostice.com/docs/pdftoo...am@String.html

----------


## sam3610

> سلام
> 
> فیلد رو باید در قالب Stream بخونید(و مثلا درون یک متغیر از جنس Stream بریزید)
> 
> با استفاده از TgtCustomPDFDocument.LoadFromStream Method نمایشش بدید
> 
> مثالش در آدرس زیر هست:
> 
> https://www.gnostice.com/docs/pdftoo...am@String.html


ممنون از شما بررسی میکنم نتیجه رو همینجا اعلام میکنم

----------


## sam3610

دوست عزیز من کد رو به این نحو نوشتم :
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;
این ارور رو میده :
Untitled.png

----------


## hp1361

> دوست عزیز من کد رو به این نحو نوشتم :
> procedure TForm1.Button3Click(Sender: TObject);var
>   gtPDFDocument1: TgtPDFDocument;
>   MemoryStream1: TMemoryStream;
> begin
>      MemoryStream1 := TMemoryStream.Create;
>      MemoryStream1.LoadFromFile(ADOQuery1.FieldValues['p']);
>      gtPDFDocument1 := TgtPDFDocument.Create(Nil);
>      try
> ...


سلام

تابع 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;

----------

