Geração de PDF com Fortes Reports

Delphi

16/01/2009

Boa tarde pessoal,
estou utilizando o Delphi 7 com o Fortes Reports. Sei que o fortes possui a opção de gerar o relatório em PDF mas existe alguma forma de fazer isso sem utilizar o preview. Preciso gerar diversos arquivos a partir de uma lista então não preciso realizar o preview dos relatórios. Alguém pode me ajudar? Ah! só mais uma coisa...qual o componente que uso para gerar um relatório com duas páginas?
Muito obrigado.


Zooropa

Zooropa

Curtidas 0

Respostas

Sremulador

Sremulador

16/01/2009

amigo utilize primeiramente o prepare, depois salve o relatório, vc podera achar mais detalhes no forum oficial ou no [url]www.produsys.com.br/forum[/url]


GOSTEI 0
Zooropa

Zooropa

16/01/2009

amigo utilize primeiramente o prepare, depois salve o relatório, vc podera achar mais detalhes no forum oficial ou no [url]www.produsys.com.br/forum[/url]


Amigo, agradeço a dica. O fórum está com a maioria dos links fora do ar mas eu dei uma lida na documentação existente no site e consegui tirar minhas dúvidas. Minha única dificuldade é a seguinte: o arquivo .pdf gerado pelo fortes tem 40MB enquanto que o arquivo original não chega a 1MB. Existe uma forma de enxugar este arquivo? Detalhe: o arquivo possui três imagens .jpg mas a maior delas ocupa apenas 240Kb. Agradeço pela ajuda.


GOSTEI 0
Zooropa

Zooropa

16/01/2009

Boa tarde Pessoal,
será que alguém pode me ajudar na dúvida acima? Muito obrigado.


GOSTEI 0
Zooropa

Zooropa

16/01/2009

Olá pessoal, postarei aqui o código que estou utilizando para gerar o PDF...infelizmente ele está gerando um arquivo com mais de 40MB e o arquivo original tem menos de 1MB.

FrmRelatorio.RLReport1.Prepare;
FrmRelatorio.RLPDFFilter1.FilterPages(FrmRelatorio.RLReport1.Pages);
FrmRelatorio.RLReport1.SaveToFile(Destino);


Ainda estou precisando de ajuda neste caso...se alguém souber como devo proceder, agradeço


GOSTEI 0
Sremulador

Sremulador

16/01/2009

amigo, seu relatório tem umagens, o problema pode esta ae, se não me engano ele não indexa alguns itens.


GOSTEI 0
Steve_narancic

Steve_narancic

16/01/2009

E ai amigo, conseguiste resolver o problema com o tamanho dos arquivos pdf gerados?


GOSTEI 0
Ivanh

Ivanh

16/01/2009

FrmRelatorio.RLReport1.Prepare;
FrmRelatorio.RLReport1.DefaultFilter  := RLPDFFilter1;
FrmRelatorio.RLReport1.SaveToFile(Destino);


Tenta isso


GOSTEI 0
Steve_narancic

Steve_narancic

16/01/2009

FrmRelatorio.RLReport1.Prepare;
FrmRelatorio.RLReport1.DefaultFilter  := RLPDFFilter1;
FrmRelatorio.RLReport1.SaveToFile(Destino);
Tenta isso



este código não seria para salvar o relatorio sem dar o preview?


GOSTEI 0
Ivanh

Ivanh

16/01/2009

[quote:204c30c171=´ivanh´]
FrmRelatorio.RLReport1.Prepare;
FrmRelatorio.RLReport1.DefaultFilter  := RLPDFFilter1;
FrmRelatorio.RLReport1.SaveToFile(Destino);
Tenta isso



este código não seria para salvar o relatorio sem dar o preview?[/quote:204c30c171]

[b:204c30c171]Exatamente[/b:204c30c171], naum foi essa a pergunta????


GOSTEI 0
Sremulador

Sremulador

16/01/2009

amigo o problema maior e que o filtro não trata imagens redundantes.

function TRLPDFFilter.WriteBitmap(aBitmap:TBitmap):integer;
var
  begstm:integer;
  endstm:integer;
  lenat :integer;
begin
  lenat:=AddObj;
  Inc(fImageCount);
  if fImageCount>Length(fImages) then
    SetLength(fImages,Length(fImages)*2+ImagesInc);
  fImages[fImageCount-1].ImageObjAt:=BeginObj;
  Result:=fImageCount;
  WriteLn(´/Type/XObject´);
  WriteLn(´/Subtype/Image´);
  WriteLn(´/Width ´+IntToStr(aBitmap.Width));
  WriteLn(´/Height ´+IntToStr(aBitmap.Height));
  WriteLn(´/ColorSpace/DeviceRGB´);
  WriteLn(´/BitsPerComponent 8´);
  WriteLn(´/Length ´+PDF_IndirectObjStr(lenat));
  WriteLn(´/Filter [/ASCIIHexDecode]´);
  begstm:=BeginStream;
  WriteBitmapData(aBitmap);
  WriteLn(´>´);
  endstm:=EndStream;
  BeginShortObj(lenat);
  WriteLn(IntToStr(endstm-begstm));
  EndShortObj;
end;


  function CreateImageObj(aObj:TRLImageObject):integer;
  var
    grp:TGraphic;
    bmp:TBitmap;
    crc:cardinal;
    imf:TRLImageFile;
    i  :integer;
  begin
    crc:=CRC32(aObj.Data);
    i:=0;
    while (i<fImageFiles.Count) and (TRLImageFile(fImageFiles[i]).ImageCRC<>crc) do
      Inc(i);
    if i<fImageFiles.Count then
      Result:=TRLImageFile(fImageFiles[i]).ImageId
    else
    begin
      bmp:=nil;
      grp:=FromMetaGraphic(aObj.Data);
      try
        if grp is TBitmap then
          bmp:=TBitmap(grp)
        else
        begin
          bmp:=NewBitmap(grp.Width,grp.Height);
          bmp.Canvas.Draw(0,0,grp);
        end;
        // retorna o indice da imagem
        Result:=WriteBitmap(bmp);
        imf:=TRLImageFile.Create;
        imf.ImageId :=Result;
        imf.ImageCRC:=crc;
        fImageFiles.Add(imf);
      finally
        if (bmp<>nil) and (bmp<>grp) then
          bmp.free;                
        grp.free;
      end;
    end;  
  end;


se você puder dar uma contribuilçao será muito bem vinda


GOSTEI 0
POSTAR