RTF (quebras de páginas)?
11/01/2005
0
Já tentei com TPrinter (a forma como o RichEdit e RxRichEdit fazem no método print dos mesmos) e não teve o efeito desejado, funciona em alguns casos mas em outros não funciona. Também já tentei a seqüência ´\page´ dentro do rtf mas nem sempre esta sequência está presente, pois o arquivo rtf pode ter várias páginas sem esta seqüência.
O que preciso realmente é saber onde será a quebra de página do rtf.
abraços,
Gilson.
Gilsonmv
Post mais votado
13/01/2005
Unit1.pas:
unit Unit1; interface uses SysUtils, Classes, Controls, Forms, Dialogs, Db, DBClient, QuickRpt, Qrctrls, ExtCtrls; type TForm1 = class(TForm) QuickRep1: TQuickRep; DetailBand1: TQRBand; QRDBRichText1: TQRDBRichText; ClientDataSet1: TClientDataSet; ClientDataSet1TEXTO_RTF: TMemoField; PageFooterBand1: TQRBand; QRSysData1: TQRSysData; procedure FormShow(Sender: TObject); end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormShow(Sender: TObject); begin ClientDataSet1.CreateDataSet; ClientDataSet1.Insert; ClientDataSet1TEXTO_RTF.LoadFromFile(´C:\teste.rtf´); ClientDataSet1.Post; QuickRep1.Prepare; ShowMessage(´Total de páginas: ´ + IntToStr(QuickRep1.PageNumber)); QuickRep1.PreviewModal; ClientDataSet1.Close; Application.Terminate; end; end.
Unit1.dfm:
object Form1: TForm1 Left = 192 Top = 107 Width = 544 Height = 375 Caption = ´Form1´ Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = ´MS Sans Serif´ Font.Style = [] OldCreateOrder = False Scaled = False OnShow = FormShow PixelsPerInch = 96 TextHeight = 13 object QuickRep1: TQuickRep Left = 0 Top = 0 Width = 794 Height = 1123 Frame.Color = clBlack Frame.DrawTop = False Frame.DrawBottom = False Frame.DrawLeft = False Frame.DrawRight = False DataSet = ClientDataSet1 Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -13 Font.Name = ´Arial´ Font.Style = [] Functions.Strings = ( ´PAGENUMBER´ ´COLUMNNUMBER´ ´REPORTTITLE´) Functions.DATA = ( ´0´ ´0´ 3939) Options = [FirstPageHeader, LastPageFooter] Page.Columns = 1 Page.Orientation = poPortrait Page.PaperSize = A4 Page.Values = ( 100 2970 100 2100 100 100 0) PrinterSettings.Copies = 1 PrinterSettings.Duplex = False PrinterSettings.FirstPage = 0 PrinterSettings.LastPage = 0 PrinterSettings.OutputBin = Auto PrintIfEmpty = True SnapToGrid = True Units = MM Zoom = 100 object DetailBand1: TQRBand Left = 38 Top = 38 Width = 718 Height = 147 Frame.Color = clBlack Frame.DrawTop = False Frame.DrawBottom = False Frame.DrawLeft = False Frame.DrawRight = False AlignToBottom = False Color = clWhite ForceNewColumn = False ForceNewPage = False Size.Values = ( 388.9375 1899.70833333333) BandType = rbDetail object QRDBRichText1: TQRDBRichText Left = 1 Top = 1 Width = 716 Height = 145 Frame.Color = clBlack Frame.DrawTop = False Frame.DrawBottom = False Frame.DrawLeft = False Frame.DrawRight = False Size.Values = ( 383.645833333333 2.64583333333333 2.64583333333333 1894.41666666667) Alignment = taLeftJustify AutoStretch = True Color = clWindow Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -13 Font.Name = ´Arial´ Font.Style = [] DataField = ´TEXTO_RTF´ DataSet = ClientDataSet1 end end object PageFooterBand1: TQRBand Left = 38 Top = 185 Width = 718 Height = 24 Frame.Color = clBlack Frame.DrawTop = False Frame.DrawBottom = False Frame.DrawLeft = False Frame.DrawRight = False AlignToBottom = False Color = clWhite ForceNewColumn = False ForceNewPage = False Size.Values = ( 63.5 1899.70833333333) BandType = rbPageFooter object QRSysData1: TQRSysData Left = 670 Top = 3 Width = 46 Height = 17 Frame.Color = clBlack Frame.DrawTop = False Frame.DrawBottom = False Frame.DrawLeft = False Frame.DrawRight = False Size.Values = ( 44.9791666666667 1772.70833333333 7.9375 121.708333333333) Alignment = taLeftJustify AlignToBand = False AutoSize = True Color = clWhite Data = qrsPageNumber Transparent = False FontSize = 10 end end end object ClientDataSet1: TClientDataSet Aggregates = <> Params = <> Left = 38 Top = 6 object ClientDataSet1TEXTO_RTF: TMemoField FieldName = ´TEXTO_RTF´ BlobType = ftMemo end end end
Observe que o QRDBMemo deverá estar com a propriedade AutoStretch = True.
Bon Jovi
Mais Posts
12/01/2005
Bon Jovi
12/01/2005
Gilsonmv
obrigado pela dica, gostaria que vc me especificasse melho como se faz?
abraços,
Gilson.
13/01/2005
Gilsonmv
é que caí em outro problema.
Quebrou_pagina := False;
RichEdit.Lines.LoadFromFile(´C:\teste.rtf´);
While not Quebrou_pagina then
begin
RichEdit.Lines.Add(´´);
qrRichEdit.Lines.Assign(RichEdit.Lines);
QuickRep1.Prepare;
ShowMessage(´Total de páginas: ´ + IntToStr(QuickRep1.PageNumber));
Quebrou_pagina := QuickRep1.PageNumber > 1;
end;
quando passa a primeira vez no loop dá certo me retorna 1, a partir da segunda vez retorna sempre 0 (zero).
tem como retornar sempre o valor correto de páginas do relatório?
abraços,
Gilson.
13/01/2005
Bon Jovi
14/01/2005
Gilsonmv
Por isso pensei em um Loop para saber quando vai quebrar a página. Se vc tiver outra dica será bem vinda.
abraços,
Gilson.
15/01/2005
Bon Jovi
Clique aqui para fazer login e interagir na Comunidade :)