Como criar um pdf com rave em tempo de execução?
Já li diversos tópicos sobre criação de pdf com rave, porém todos partem do princípio que pré existe um relatório rave.
Eu estou querendo criar um relatório 100¬ em tempo de execução para transformá-lo em um pdf!
Alguém conhece o caminho das pedras?
Eu estou querendo criar um relatório 100¬ em tempo de execução para transformá-lo em um pdf!
Alguém conhece o caminho das pedras?
Edilcimar
Curtidas 0
Respostas
Futuro
08/12/2007
Também estou interessado em saber como!!!! (pode ser com qualquer gerenciador de relatório, QReport, Rave, etc....)
GOSTEI 0
Joaoshi
08/12/2007
Colegas, no site do Rave:
http://www.nevrona.com/Default.aspx?tabid=87
Vale a pena dar uma olhada nos outros itens.
Espero ter ajudado.
http://www.nevrona.com/Default.aspx?tabid=87
Vale a pena dar uma olhada nos outros itens.
Espero ter ajudado.
GOSTEI 0
Edilcimar
08/12/2007
João, este exemplo eu conheço, mas ele só cria um pdf em branco, eu estou querendo colocar dados dentro do rave (que tem que ser criado em tempo de execução), antes de utilizar este procedimento que você indicou
GOSTEI 0
Joaoshi
08/12/2007
Edilcimar, no projeto de teste inclua no evento onPrint do RvSystem1:
RvSystem1.BaseReport.Print(´Coisas´);
A magica toda acontece no evento onPrint do RvSystem.
Espero ter ajudado.
RvSystem1.BaseReport.Print(´Coisas´);
A magica toda acontece no evento onPrint do RvSystem.
Espero ter ajudado.
GOSTEI 0
Edilcimar
08/12/2007
Veja bem, o meu problema é o criar o relatório para transformar em pdf, por exemplo:
Query1 -> aqui eu pego a posição de linhas e colunas do cabeçalho (eu sei quantas coisas tem lá, mas não sei quantas colunas nem linhas, pois é configurado pelo cliente, tanto a posição da linha quanto da coluna).
With Query2 do while not eof
begin
...aqui eu pego somente uma linha, onde a posição dela e a posição da coluna são configuradas pelo cliente
...with Query3 do while not eof
...begin
......aqui eu pego não sei quantas linhas, nem quantas colunas, pois a posição da linha e da coluna também são configuradas pelo cliente
......whith Query4 do while not eof
......begin
.........aqui eu pego entre zero e 6 linhas, onde não sei a posição nem da linha nem da coluna que também são configuráveis pelo cliente
.........next -> Query4
......end;
......next -> Query3
...end;
...next -> Query2
...end
...next - Query1
end;
Quando mando imprimir, eu pego estes valores e envio para printer.canvas.textout() e sai tudo certinho, agora preciso transformar isto em pdf, portanto preciso criar o rave totalmente em tempo de execução para depois transformá-lo em pdf, todos os exemplos que vi, inclusive da nevrona não funcionaram.
Grato
Query1 -> aqui eu pego a posição de linhas e colunas do cabeçalho (eu sei quantas coisas tem lá, mas não sei quantas colunas nem linhas, pois é configurado pelo cliente, tanto a posição da linha quanto da coluna).
With Query2 do while not eof
begin
...aqui eu pego somente uma linha, onde a posição dela e a posição da coluna são configuradas pelo cliente
...with Query3 do while not eof
...begin
......aqui eu pego não sei quantas linhas, nem quantas colunas, pois a posição da linha e da coluna também são configuradas pelo cliente
......whith Query4 do while not eof
......begin
.........aqui eu pego entre zero e 6 linhas, onde não sei a posição nem da linha nem da coluna que também são configuráveis pelo cliente
.........next -> Query4
......end;
......next -> Query3
...end;
...next -> Query2
...end
...next - Query1
end;
Quando mando imprimir, eu pego estes valores e envio para printer.canvas.textout() e sai tudo certinho, agora preciso transformar isto em pdf, portanto preciso criar o rave totalmente em tempo de execução para depois transformá-lo em pdf, todos os exemplos que vi, inclusive da nevrona não funcionaram.
Grato
GOSTEI 0
Joaoshi
08/12/2007
Você montaria seu relatório no evento onPrint do RvSystem, usando os [b:8137593839]comandos do Rave programado[/b:8137593839].
Deve utilizar [b:8137593839]PrintXY[/b:8137593839] ao invés de [b:8137593839]printer.canvas.textout().[/b:8137593839]
Lamento não poder ajudar mais.
Deve utilizar [b:8137593839]PrintXY[/b:8137593839] ao invés de [b:8137593839]printer.canvas.textout().[/b:8137593839]
Lamento não poder ajudar mais.
GOSTEI 0
Edilcimar
08/12/2007
João, eis o código que acrescentei:
Try
...RVSystem1.DefaultDest := rdFile;
...RVSystem1.DoNativeOutput := false;
...RVSystem1.RenderObject := RvRenderPDF1;
...RVSystem1.OutputFileName := ´.\\´ + IntToStr(NumeroLaudo) + ´.pdf´;
...RVSystem1.BaseReport.PrintLeft(´xxx´,1); -> se eu incluir esta linha dá um erro de violação de memória, se tirar passa mas não cria nada
...RVSystem1.SystemSetups := RVSystem1.SystemSetups - [ssAllowSetup];
...RVSystem1.Execute;
Finally
...RvRenderPDF1.Free;
End;
No onPrint do RvSystem1 eu coloquei
RvNDRWriter1.PrintXY( 1.0, 2.0, ´Texto´); -> aqui ele dá o erro ´invalid method call.ReportPrinter is not printing´, ou seja diz que não está imprimindo, se eu retirar o RvNDRWriter1 ele não reconhece o comando PrintXY()!
Try
...RVSystem1.DefaultDest := rdFile;
...RVSystem1.DoNativeOutput := false;
...RVSystem1.RenderObject := RvRenderPDF1;
...RVSystem1.OutputFileName := ´.\\´ + IntToStr(NumeroLaudo) + ´.pdf´;
...RVSystem1.BaseReport.PrintLeft(´xxx´,1); -> se eu incluir esta linha dá um erro de violação de memória, se tirar passa mas não cria nada
...RVSystem1.SystemSetups := RVSystem1.SystemSetups - [ssAllowSetup];
...RVSystem1.Execute;
Finally
...RvRenderPDF1.Free;
End;
No onPrint do RvSystem1 eu coloquei
RvNDRWriter1.PrintXY( 1.0, 2.0, ´Texto´); -> aqui ele dá o erro ´invalid method call.ReportPrinter is not printing´, ou seja diz que não está imprimindo, se eu retirar o RvNDRWriter1 ele não reconhece o comando PrintXY()!
GOSTEI 0
Joaoshi
08/12/2007
Colega,
substitua:
-- RvNDRWriter1.PrintXY( 1.0, 2.0, ´Texto´);
por:
-- RvSystem1.BaseReport.PrintXY( 1.0, 2.0, ´Texto´);
A linha abaixo com *** deve estar no evento onPrint do RvSystem1.
Try
...RVSystem1.DefaultDest := rdFile;
...RVSystem1.DoNativeOutput := false;
...RVSystem1.RenderObject := RvRenderPDF1;
...RVSystem1.OutputFileName := ´.\\´ + IntToStr(NumeroLaudo) + ´.pdf´;
***...[b:109bdc8741]RVSystem1.BaseReport.PrintLeft(´xxx´,1); [/b:109bdc8741]-> se eu incluir esta linha dá um erro de violação de memória, se tirar passa mas não cria nada -> esta linha deve estar no onPrint do RvSystem1.
...RVSystem1.SystemSetups := RVSystem1.SystemSetups - [ssAllowSetup];
...RVSystem1.Execute;
Finally
...RvRenderPDF1.Free;
End;
Espero ter ajudado.
substitua:
-- RvNDRWriter1.PrintXY( 1.0, 2.0, ´Texto´);
por:
-- RvSystem1.BaseReport.PrintXY( 1.0, 2.0, ´Texto´);
A linha abaixo com *** deve estar no evento onPrint do RvSystem1.
Try
...RVSystem1.DefaultDest := rdFile;
...RVSystem1.DoNativeOutput := false;
...RVSystem1.RenderObject := RvRenderPDF1;
...RVSystem1.OutputFileName := ´.\\´ + IntToStr(NumeroLaudo) + ´.pdf´;
***...[b:109bdc8741]RVSystem1.BaseReport.PrintLeft(´xxx´,1); [/b:109bdc8741]-> se eu incluir esta linha dá um erro de violação de memória, se tirar passa mas não cria nada -> esta linha deve estar no onPrint do RvSystem1.
...RVSystem1.SystemSetups := RVSystem1.SystemSetups - [ssAllowSetup];
...RVSystem1.Execute;
Finally
...RvRenderPDF1.Free;
End;
Espero ter ajudado.
GOSTEI 0
Edilcimar
08/12/2007
Ok agora funcionou, só que com o comando RVSystem1.BaseReport.PrintLeft(´xxx´,1);
determino a posição da coluna (número 1), e como faço para determinar a posição da linha?
determino a posição da coluna (número 1), e como faço para determinar a posição da linha?
GOSTEI 0
Edilcimar
08/12/2007
Descobri mais uma coisa, este documento que foi criado pode ser modificado pelo usuário final, como colocá-lo para que este usuário só possa imprimir?
GOSTEI 0
Joaoshi
08/12/2007
Da forma como você esta fazendo:
-- RVSystem1.BaseReport.PrintLeft(´xxx´,1);
Para definir a linha utilize:
-- RVSystem1.BaseReport.[b:04176ec079]yPos[/b:04176ec079] = 2
Se precisar definir a coluna utilize:
-- RVSystem1.BaseReport.[b:04176ec079]xPos[/b:04176ec079] = 2
Se quiser mandar direto coluna e linha utilize:
-- RVSystem1.BaseReport.[b:04176ec079]PrintXY[/b:04176ec079](1,1,´xxx´);
Espero ter ajudado.
-- RVSystem1.BaseReport.PrintLeft(´xxx´,1);
Para definir a linha utilize:
-- RVSystem1.BaseReport.[b:04176ec079]yPos[/b:04176ec079] = 2
Se precisar definir a coluna utilize:
-- RVSystem1.BaseReport.[b:04176ec079]xPos[/b:04176ec079] = 2
Se quiser mandar direto coluna e linha utilize:
-- RVSystem1.BaseReport.[b:04176ec079]PrintXY[/b:04176ec079](1,1,´xxx´);
Espero ter ajudado.
GOSTEI 0
Edilcimar
08/12/2007
Ok, beleza, agora só preciso aprender a colocar o attributo de readonly ao arquivo para evitarque o usuário modifique o texto, sabe fazer isto?
GOSTEI 0
Edilcimar
08/12/2007
Será possível que ninguém sabe como colocar senha num pdf criado pelo rave, para evitar que o mesmo seja modificado?
GOSTEI 0
Edilcimar
08/12/2007
sobe
GOSTEI 0
Edilcimar
08/12/2007
sobe
GOSTEI 0
Edilcimar
08/12/2007
sobe pela última vez
GOSTEI 0
Edilcimar
08/12/2007
Resposta recebida hoje da nevrona sobre como criar um pdf readonly.
Hi,
You might want to look at a third party tool called Gnostice which offers
enhanced PDF features.
We apologize for the long delay. Our server has been down since 12/12. We were not able to receive email until today.
If you own Rave BE, free version that shipped with Delphi and C++Builder, you have the option of upgrading your Rave BE to BEX for $199. With the upgrade, you will receive source code, access to the latest builds within this version release and priority tech support.
Ou seja, rave não cria pdf readonly!
Hi,
You might want to look at a third party tool called Gnostice which offers
enhanced PDF features.
We apologize for the long delay. Our server has been down since 12/12. We were not able to receive email until today.
If you own Rave BE, free version that shipped with Delphi and C++Builder, you have the option of upgrading your Rave BE to BEX for $199. With the upgrade, you will receive source code, access to the latest builds within this version release and priority tech support.
Ou seja, rave não cria pdf readonly!
GOSTEI 0