> Spomenuli ste da mogu direktno iz delphija generisati izvjestaje u pdf i html ja sam za to do sada koristio razne komponente.
> Kako to mogu raditi bez dodatnih komponenata?
html u principu mozes lako generisati i sam ali je to malo nezgodno za rad. Lakse je da generises na osnovu nekog sablona (gde polja menjas sa svojim podacima), pogledaj mustache on je jako dobar u tome. Jos lakse je sa nekim html reportingom poput,
https://delphihtmlcomponents.com/reports.html.
Za PDF ja sam koristio SynPDF (dolazi uz mORMot, takodje pogledaj i SynMustache) i mORMotReport, to je licno moj favorit, vrlo lako se generise iz koda i prave se razne tabele. Nema GUI sistem za setovanje pozicija ali meni to ne smeta, ima print previw ili direktno snimis kao PDF pa njega prikazes.
Evo primera generisanja isvestaja koji prikazuje detalje o login klijentima.
Code:
var
rpt: TGDIPages;
i: Integer;
begin
// Create and fill pdf report
rpt := TGDIPages.Create(Self);
try
rpt.Caption := TAction(Sender).Caption;
rpt.Orientation := poLandscape;
rpt.BeginDoc;
rpt.Font.Name := 'Calibri';
rpt.Font.Size := 12;
rpt.SaveLayout;
rpt.Font.Style := [fsItalic];
rpt.TextAlign := taRight;
rpt.AddTextToFooterAt(Application.Title, rpt.RightMarginPos);
rpt.RestoreSavedLayout;
rpt.AddTextToFooter(DateTimeToStr(Now));
rpt.TextAlign := taRight;
rpt.AddPagesToFooterAt('Page %d of %d', -1);
rpt.DrawTitle(rpt.Caption, True);
rpt.NewHalfLine;
rpt.AddColumns([35, 55, 10]);
rpt.AddColumnHeaders(['Client', 'Description', 'Last seen'], True, True);
for i := 0 to 1000 do
begin
rpt.DrawTextAcrossCols(['Client' + IntToStr(i), 'Neki opis', DateToString(Now)]);
end;
rpt.EndDoc;
rpt.ShowPreviewForm([rNextPage, rPreviousPage, rGotoPage, rPageAsText, rPrint, rExportPDF, rClose]);
finally
rpt.Free;
end;
end;