LazReport PDF-Export Einzelseiten
-
- 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
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!
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!
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1436
- 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
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.
-
- 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
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 aufgerufen und
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!
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');
ausgeführt wurden, müsste doch der fertige Bericht in "frReport1" enthalten sein. Mit allen seinen Seitenzahlen etc.frReport1.PrepareReport;
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!
-
- Beiträge: 624
- 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
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);
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;
-
- Beiträge: 624
- 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
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:
Schau immer im Lazreport-Quelltext. LazReport ist sehr mächtig, das Ding verkannt.
Viel Glück.
Code: Alles auswählen
TfrReport.Pages.Add; //Seitehinzufügen
TfrReport.Pages[integer]; //Seitendirektzugreifen
Viel Glück.
-
- 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
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!
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!
-
- 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
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:
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:
"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.
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)
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;
Das funktioniert, aber jede Pdf-Datei enthält eine zusätzliche Leerseite, die man, sofern sie stört, nachträglich noch entfernen muss.
-
- 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
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...
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
-
- 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
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.
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.