LazReport PDF-Export Einzelseiten

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

LazReport PDF-Export Einzelseiten

Beitrag von ErnstVolker »

Hallo,

ich habe einen gruppierten Bericht erstellt. Diesen kann ich auch als PDF exportieren. Dieses PDF hat dann mehrere Seiten. Nämlich soviel Seiten wie der Bericht Gruppenkopfzeilen.

Wie bekommt man es hin, dass jede Seite für sich eine PDF-Datei gibt?

UND: Es kann passieren, dass der Inhalt des Masterbandes so viel wird, dass eine weitere Seite her muß. Dann gehören diese beiden Seiten natürlich zusammen und sollten nicht getrennt werden.

Wie stellt man das sinnvollerweise an? Muß das fertige PDF nochmal geladen (mit PowerPDF o.ä.) und zerpflückt werden?

Gute Nacht!

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: LazReport PDF-Export Einzelseiten

Beitrag von fliegermichl »

Der PDF Exportfilter hat ja die virtuellen Methoden OnBeginpage und OnEndpage. Ich könnte mir vorstellen, daß man hier den Inhalt in ein weiteres PDF Dokument schreiben und separat speichern kann. Getestet habe ich es aber nicht.

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport PDF-Export Einzelseiten

Beitrag von ErnstVolker »

Hallo fliegermichel,

zunächst erstmal vielen Dank für den Hinweis. Ich bin erst gestern dazu gekommen mal wieder ein wenig herum zu probieren.

Leider bekomme ich es noch nicht hin. Ich habe allerdings auch mit den Ereignissen des Report experimentiert. Hier gibt es auch "OnBeginPage" etc.

Nachdem das hier

Code: Alles auswählen

frReport1.LoadFromFile('report1.lrf');
aufgerufen und
frReport1.PrepareReport;
ausgeführt wurden, müsste doch der fertige Bericht in "frReport1" enthalten sein. Mit allen seinen Seitenzahlen etc.

Jetzt fällt mir gerade ein: Ich muß mal NACH ".PrepareReport" versuchen auf ".Pages[0].Count" zuzugreifen die Seitenzahlen zu bekommen. Bei meinem Test sollten es 16 sein.

Dann in einer Schleife jede einzelne Seite an den Exportfilter übergeben...

Ich versuche weiter...

Vielen Dank!

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: LazReport PDF-Export Einzelseiten

Beitrag von Soner »

Das ist sehr einfach.
In meinem Programm wird beim Kundenwechsel optional mit einer neuen Seite angefangen.
Ich verwende dafür TfrReport.OnBeginBand-Ereignis so z.B.(Pseudocode);

Code: Alles auswählen

procedure TForm1.OnBeginBand(Band: TfrBand);
begin
   if not BeiKundenWechselNeuerSeite then 
     exit;
   if Query1.FieldByName('Kundennr').AsInteger<>AktuellerKunde and AktuellerKunde<>0 then 
     Band.ForceNewPage:=true;  //Neue Seite;

   AktuellerKunde:=Query1.FieldByName('Kundennr').AsInteger;      
end;

Soner
Beiträge: 623
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: LazReport PDF-Export Einzelseiten

Beitrag von Soner »

Noch etwas, wenn du nicht mit Bänder arbeitest sondern alles manuell positionierst, damit ist sehr komplexe Berichte möglich, was normalerweise mit Bänder nicht möglich ist, dann kannst du diese funktionen verwenden:

Code: Alles auswählen

   TfrReport.Pages.Add;  //Seitehinzufügen
    TfrReport.Pages[integer]; //Seitendirektzugreifen
Schau immer im Lazreport-Quelltext. LazReport ist sehr mächtig, das Ding verkannt.

Viel Glück.

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport PDF-Export Einzelseiten

Beitrag von ErnstVolker »

Hallo, vielen Dank für die Tipps. Werde ich mich morgen mal dran versuchen.

Ich habe den Bericht komplett mit Bändern erstellt und im Designer beim Gruppenband "Neue Seite erzwingen". Beim Masterband muß ich das noch einbauen, für den Fall dass es mal mehr Daten werden.
Meine Überlegung war beim Masterband die Bandhöhe zu überwachen und wenn eine bestimmte Höhe überschritten wird, dann neue Seite...

Werde die Tage weiter probieren.

Schönen Abend!

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

[gelöst] Re: LazReport PDF-Export Einzelseiten

Beitrag von ErnstVolker »

Hallo,

zu meinem "Problem" habe ich selbst zwar was rausgefunden, aber es stellt mich noch nicht wirklich zufrieden. Mein Bericht arbeitet mit Bändern und ist komplett im Designer erstellt. Vorschau zeigt ihn an.

Was die Einzelseiten angeht, kann man natürlich über eine For-Schleife mit:

Code: Alles auswählen

frReport1.PrintPreparedReport(IntToStr(Schleifenindex), 1)
Einzelseiten ausgeben. Vorher über Printers einen PDF-Drucker ansprechen. Printers.Filename muss mit in die Schleife.

Ein weiterer Weg ist das frReport "BeginPage" und "EndPage" zu nutzen:

Code: Alles auswählen

procedure TZeosDatenModul.frReport1EndPage(pgNo: Integer);
begin
  ZeosDatenModul.frReport1.EMFPages.Delete(0);
end;

procedure TZeosDatenModul.frReport1BeginPage(pgNo: Integer);
begin
  ZeosDatenModul.frReport1.ExportTo(TfrTNPDFExportFilter, '/Ort/zum/Speichern/Name_' + IntToStr(i) + '.pdf');
  inc(i);
end;
"i" ist hier einfach mal eine zu Testzwecken angelegte globale Variable.

Das funktioniert, aber jede Pdf-Datei enthält eine zusätzliche Leerseite, die man, sofern sie stört, nachträglich noch entfernen muss.

Joh
Lazarusforum e. V.
Beiträge: 191
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: LazReport PDF-Export Einzelseiten

Beitrag von Joh »

ja, aber...

du hast i...

i wird incrementiert. Zählst du jetzt von 0 oder von eins?

was ist Schleifenindex? Geht der von 0 oder 1?

Ich denke, da liegt irgendwo das Problem...
just my two Beer

ErnstVolker
Beiträge: 336
Registriert: Di 17. Feb 2009, 10:44
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: LazReport PDF-Export Einzelseiten

Beitrag von ErnstVolker »

Hallo Joh,

alles gut.

Das "i" als globale Variable diente nur zum Erzeugen eines Dateinamen. Völlig egal ob der mit "0", "1" oder "234" losgeht. Ich brauchte einfach nur was um die Einzelseiten voneinander unterscheiden zu können. "Name_1", "Name_2" usw.

Ich dachte der Exportfilter wäre von sich aus so cool, dass er die Möglichkeit bietet entweder alles in ein Pdf oder Einzelseiten auszugeben. Macht er aber nicht. Zumindest bin ich nicht drauf gekommen.

Antworten