Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
DbChart Pdf Aktarma
#1
Merhaba arkadaşlar

Programımda kullandığım Dbchart ta grafik olarak değerleri gösteriyorum. Bu chartı pdf'e nasıl aktarabilirim acaba? İnternette araştırdım fakat bulamadım. Yardımcı olabilir misiniz? Teşekkürler.
Cevapla
#2
Kabaca mantık yürütecek olursak o xhartı pdf e yazdirmak yerine fastreport da bi form tasarlayip ordaki frxcharta atmaniz oradan pdf export etmenizi öneririm.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#3
Evet hocam. O da aklıma geldi ona uğraşıyorum şimdi. Fastreport daki chartı veri tabanındaki tabloya bağlamaya çalışıyorum Smile Sizin bilginiz var ise yol gösterebilir misiniz? henüz bağlayamadım da
Cevapla
#4
Yok hocam. Hiç fırsatim yada deneyimim olmadi konuda ama emin olun ayni mantikdir. Frxreporta bir db baglayip tun islemleri ordannyapabilirsiniz veya o dbchartin screenahotunu bi memoryatreamna alip pdf icine reain basabilirsiniz diye gelsi aklima ilk fikirler.. ama hic yapmadim.
// Bilgi paylaştıkça çoğalır.. 

Cevapla
#5
Şu şekilde yaptım. FastReport'da sol kısımda Data bölümü var. oradan adoConnection ile veri tabanı bağlantısı yapıp query ile verileri çekebiliyorsunuz. şimdiki takıldığım yer Smile fastreport'a eklediğim querye parametre atayamadım. Bir önceki formda Tarih aralığı seçtirip sorgulama yapıyorum ama fastreportsdaki querye atayamadım Smile ona bakıyorum.
Cevapla
#6
(17-09-2021, Saat: 15:15)gonulali Adlı Kullanıcıdan Alıntı: Şu şekilde yaptım. FastReport'da sol kısımda Data bölümü var. oradan adoConnection ile veri tabanı bağlantısı yapıp query ile verileri çekebiliyorsunuz. şimdiki takıldığım yer Smile fastreport'a eklediğim querye parametre atayamadım. Bir önceki formda Tarih aralığı seçtirip sorgulama yapıyorum ama fastreportsdaki querye atayamadım Smile ona bakıyorum.

Merhaba,
Sıralamayı şöyle yapın
1- ADOQuery1 nesnenizde sorgunuz dursun;
2- FrxReport Nesnenizin yanına birde FrxDBDataset ekleyin
3- FrxDataset'in Dataset kısmını ADOQuery eşitletin
4- FrxDataset çift tıkladığınızda Field ların geldiğini görürsünüz bağlantınız açık ise(Yeni alan ekler yada çıkartırsanız buradan update demeniz gerekir.)
5- FrxReport açtığınızda Report Menüsünden Data'yı seçin.
6- Gelen ekranda FrxDataset(isimlendirme yapmadıysanız) olacak onu seçin.
7- Ekranın Sağ kısmında Data Tree bölümünde istediğiniz alanları göreceksiniz.
ADOQuery1 her sorgu çektiğinizde güncel veriler gelecektir.

İyi Çalışmalar.
Cevapla
#7
Kendi Kullandığım Yöntemlerden
kısa yoldan => BMP,EMF,TEE,WMF export için Export Dialogu
//Uses Teexport;

 with TTeeExportForm.Create(Self) do
 try
   ExportPanel:=Chart1;
   ShowModal();
 finally
   Free();
 end;
Bu Şekilde Kodu bir butona atayın BMP,WMF,EMF ,TEE - Gibi Formatlara Çevirebirlisiniz.


veya Gife Çevirmek İçin
//-------------------bu kısım gife çeviriyor---------------------------

Form Üzerine Bir Butona da alttaki Kodu yerleşitirin
Useste 
TeeProcs, TeEngine, Chart,Series, TeeFunci, gifimage,TeePrevi,Teexport;

var GIF        : TGIFImage;
   tmpBMP,
   ReducedBMP : TBitmap;
begin
SaveDialog.FileName:='GRAFIK_001.GIF';
  IF SaveDialog.Execute THEN BEGIN
       GIF := TGIFImage.Create;
       try
          tmpBMP := Chart1.TeeCreateBitmap(clWhite,Rect(0,0,Chart1.Width,Chart1.Height));
               ReducedBMP := nil;
               ReducedBMP := ReduceColors(tmpBMP, rmNetscape, dmFloydSteinberg , 0, 0);
               GIF.Assign(ReducedBMP);
               GIF.SaveToFile(SaveDialog.FileName);
          finally
               ReducedBMP.Free;
               tmpBMP.Free;
          GIF.Free;
       end;
end;
END;
//---------------------------------------------------
bmp to pdf ye çevimek için synopsenin SYNPDF  kütüphanesi işe yarayabilir, Synopse de bir iki deneme yaptım sadece bmp yi pdf e çeviriyor, Gif or Jpg to bmp dönüşümü yapmalısınız




//----------------------------------------------------
Evet geldik BMP to PDF dönüşümüne Bu Unit BMP2PDF.PAS

unit bmp2pdf;

interface
uses
   Windows,Classes, Graphics, SysUtils;

   procedure BMPtoPDF(BMP:TBitmap;SaveName:String);

implementation

type
pRGBArray = ^TRGBArray;
TRGBArray = array[0..32768-1] of TRGBTriple;
                                        
procedure Write_CrossReferenceTable(AStream: TStream;PosArray : array of Dword;Count:Integer);
Var
  i :Integer;
begin
 With TStringStream(AStream) do
 begin
   WriteString('xref'#10);
   WriteString(Format('0 %d'#10,[Count+1]));
   WriteString('0000000000 65535 f '#10);
   for i:= 0 to Count-1 do
   begin
    WriteString(Format('%0.10d',[PosArray[i]])+' 00000 n '#10);
   end;
 end;
end;

procedure Write_ContentsObject(AStream: TStream;Index : Dword; Width,Height : Integer);
Var
  MemoryStream : TMemoryStream;
begin
 MemoryStream:=TMemoryStream.Create;
 Try
    // Stream
    With TStringStream(MemoryStream) do
    begin
      WriteString('q'#10);
        WriteString(Format('%d 0 0 %d 0 0 cm'#10,[Width,Height]));
        WriteString('/Im0 Do'#10);
      WriteString('Q'#10);
    end;

    MemoryStream.Position:=0;

    // Object
    With TStringStream(AStream) do
    begin
      WriteString(Format('%d 0 obj'#10,[Index]));
      WriteString(Format('<< /Length %d >>'#10,[MemoryStream.Size]));
      WriteString('stream'#10);
      AStream.CopyFrom(MemoryStream,MemoryStream.Size) ;
      WriteString('endstream'#10);
      WriteString('endobj'#10);
    end;
 finally
   MemoryStream.Free;
 end;
end;

procedure GetBitmapData(AStream :TStream;BMP:TBitmap);
var
tmp :TBitmap;
Buffer  : Pointer;
SrcRow,DestRow  : pRGBArray;
Row,Col,DestCnt : Integer;
begin

DestCnt:=0;

tmp := TBitmap.Create;
tmp.Assign(BMP);
tmp.PixelFormat:=pf24bit;

GetMem(Buffer,tmp.Width*tmp.height*3);
DestRow :=Buffer;

try   
  for Row:=0 to tmp.Height-1 do
  begin
    SrcRow :=tmp.ScanLine[Row];
    for Col:=0 to tmp.Width-1 do
    begin
      DestRow[DestCnt].rgbtBlue  := SrcRow[Col].rgbtRed;
      DestRow[DestCnt].rgbtGreen := SrcRow[Col].rgbtGreen;
      DestRow[DestCnt].rgbtRed   := SrcRow[Col].rgbtBlue;
      Inc(DestCnt);
    end;
  end;

  AStream.Write(DestRow^,tmp.Width*tmp.Height*3);

 finally
    tmp.Free;
    FreeMem(Buffer);
 end;
end;

procedure BMPtoPDF(BMP:TBitmap;SaveName:String);
Var
 AStream,BitsData  : TStream;
 ObjectIndex  : Integer;
 ObjectPosArray  : array [0..10] of Dword;
begin

 if BMP=nil then
  raise  Exception.Create('Bitmap is nil');

 if SaveName='' then
  raise  Exception.Create('SaveName is nil');

 ObjectIndex :=0;

 AStream  :=TFileStream.Create(SaveName,fmCreate)  ;
 BitsData :=TMemorySTream.Create;
 Try          
    GetBitmapData(BitsData,BMP);
    BitsData.Position:=0;

    // PDF version
    TStringStream(AStream).WriteString('%PDF-1.2'#10);

    // Catalog
    ObjectPosArray[ObjectIndex] :=AStream.Position;
    With TStringStream(AStream) do
    begin
         WriteString(Format('%d 0 obj'#10,[ObjectIndex+1]));
         WriteString('<<'#10);
         WriteString('/Type /Catalog'#10);
         WriteString('/Pages 2 0 R'#10);
         // View Option (100%) 
         WriteString('/OpenAction [3 0 R /XYZ -32768 -32768 1 ]'#10);       
         WriteString('>>'#10);
         WriteString('endobj'#10);
    end;
    Inc(ObjectIndex);
  
    // Parent Pages
    ObjectPosArray[ObjectIndex] :=AStream.Position;
    With TStringStream(AStream) do
    begin
         WriteString(Format('%d 0 obj'#10,[ObjectIndex+1]));
         WriteString('<<'#10);
         WriteString('/Type /Pages'#10);
         WriteString('/Kids [ 3 0 R ]'#10);
         WriteString('/Count 1'#10);
         WriteString('>>'#10);         
         WriteString('endobj'#10);
    end;
    Inc(ObjectIndex);

    // Kids Page
    ObjectPosArray[ObjectIndex] :=AStream.Position;
    With TStringStream(AStream) do
    begin
         WriteString(Format('%d 0 obj'#10,[ObjectIndex+1]));
         WriteString('<<'#10);
         WriteString('/Type /Page'#10);
         WriteString('/Parent 2 0 R'#10);
         WriteString('/Resources'#10);
         WriteString('<<'#10);
         WriteString('/XObject << /Im0 4 0 R >>'#10);
         WriteString('/ProcSet [ /PDF /ImageC ]'#10);
         WriteString('>>'#10);
         WriteString(Format('/MediaBox [ 0 0 %d %d ]'#10, [BMP.Width,BMP.Height]));
         WriteString('/Contents 5 0 R'#10);
         WriteString('>>'#10);
         WriteString('endobj'#10);
    end;
    Inc(ObjectIndex);

    // XObject Resource
    ObjectPosArray[ObjectIndex] :=AStream.Position;   
    With TStringStream(AStream) do
    begin
         WriteString(Format('%d 0 obj'#10,[ObjectIndex+1]));
         WriteString('<<'#10);
         WriteString('/Type /XObject'#10);
         WriteString('/Subtype /Image'#10);
         WriteString('/Name /Im0'#10);
         WriteString(Format('/Width %d'#10,[BMP.Width]));
         WriteString(Format('/Height %d'#10,[BMP.Height]));
         WriteString('/BitsPerComponent 8'#10);
         WriteString('/Filter []'#10);
         WriteString('/ColorSpace /DeviceRGB'#10);
         WriteString(Format('/Length %d >>'#10,[BitsData.Size]));
         WriteString('stream'#10);
         AStream.CopyFrom(BitsData,BitsData.Size);
         WriteString('endstream'#10);
         WriteString('endobj'#10);
    end;
    Inc(ObjectIndex);

    // Contents Stream & Object
    ObjectPosArray[ObjectIndex] :=AStream.Position;
    With TStringStream(AStream) do
    begin
       Write_ContentsObject(AStream,ObjectIndex+1,BMP.Width,BMP.Height);
    end;
    Inc(ObjectIndex);

    // CrossReferenceTable
    ObjectPosArray[ObjectIndex] :=AStream.Position;
    Write_CrossReferenceTable(AStream,ObjectPosArray,ObjectIndex);

    // trailer
    With TStringStream(AStream) do
    begin
        WriteString('trailer'#10);
        WriteString('<<'#10);
        WriteString(Format('/Size %d'#10,[ObjectIndex+1]));
        WriteString('/Root 1 0 R'#10);
        WriteString('>>'#10);
        WriteString('startxref'#10);
        WriteString(Format('%d'#10,[ObjectPosArray[ObjectIndex]]));
        WriteString('%%EOF');
    end;

 finally
   AStream.Free;
   BitsData.Free;
 end;
end;

end.

BMP yi PDF ye çeviriyor
Form üzerine bir adet TIMAGE, TSAVEDIALOG nesnesi koyun
Kullanımı
procedure TForm1.Button2Click(Sender: TObject);
begin
IF SaveDialog1.Execute THEN BEGIN
BMPtoPDF(Image1.Picture.Bitmap,SaveDialog1.FileName);
END;
end;
Cevapla
#8
@COMMANDX Hocam Çok teşekkürler. İşimi gördü.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi 7 Excel'e Veri Aktarma mahone 6 1.174 02-05-2023, Saat: 08:34
Son Yorum: COMMANDX
  Tarayıcıda Taranan Textleri Excele Aktarma bünyamin68 1 559 08-12-2022, Saat: 00:28
Son Yorum: engerex
  DBGrid1'deki Verileri Tabloya Aktarma OZCANK 11 5.176 28-09-2022, Saat: 15:49
Son Yorum: OZCANK
  Stringgrid seçili sütunları aktarma cvheneburi 0 427 23-09-2022, Saat: 00:03
Son Yorum: cvheneburi
  Excel Veri Aktarma Hatası MosCom 5 1.742 22-06-2022, Saat: 09:10
Son Yorum: MosCom



Konuyu Okuyanlar: 1 Ziyaretçi