Report Viewer

TsgcHTMLComponent_ReportViewer pokazuje raport na stronie webowej, z panelem parametrów, podglądem PDF, Pobierz PDF, Drukuj i Eksportuj do Excela. Raport to TsgcHTMLReport, sekcyjny silnik raportów, który drukuje grupy, sumy, wykresy, kody kreskowe i podraporty do PDF za pomocą silnika PDF z sgcHTML, bez zewnętrznego narzędzia raportowego, sterownika drukarki ani DLL, w Delphi, C++ Builder i .NET.

TsgcHTMLComponent_ReportViewer i TsgcHTMLReport

Zdefiniuj raport z jego sekcjami i Parameters, połącz go z przeglądarką i wyrenderuj. Przeglądarka buduje formularz z parametrów, a podgląd, pobranie i wydruk to ten sam PDF, generowany na serwerze z wartościami zastosowanymi przez użytkownika, więc to, co użytkownik widzi, jest tym, co drukuje. Między żądaniami nic nie jest przechowywane na serwerze.

Klasy komponentów

TsgcHTMLComponent_ReportViewer, przeglądarka, i TsgcHTMLReport, niewizualny silnik raportów, który ona pokazuje

Renderuje

Panel parametrów, podgląd rysowany wbudowanym pdf.js z przeglądarki PDF oraz łącza Pobierz PDF, Drukuj i Eksportuj do Excela

Języki

Delphi, C++ Builder, .NET

Raport sprzedaży z parametrami, w przeglądarce

Raport deklaruje wymagany okres i region. Przeglądarka zamienia je na pola, a raport filtruje swoje dane we własnym zdarzeniu OnBeforeGenerate wartościami zastosowanymi przez użytkownika.

uses
  sgcHTML_Export_PDF, sgcHTML_Report, sgcHTML_Component_ReportViewer;

// raport
oReport := TsgcHTMLReport.Create(Self);
oReport.Title := 'Sales';
oReport.FileName := 'sales';
oReport.DataSet := qrySales;
oParam := oReport.Parameters.Add;
oParam.Name := 'Period';
oParam.Caption := 'Period';
oParam.Kind := rpkDateRange;
oParam.DefaultValue := '2026-01-01;2026-12-31';
oParam.Required := True;
oParam := oReport.Parameters.Add;
oParam.Name := 'Region';
oParam.Caption := 'Region';
oParam.Kind := rpkSelect;
oParam.Options.Add('EU=Europe');
oParam.Options.Add('US=United States');
oReport.OnBeforeGenerate := ReportBeforeGenerate;

// sekcja szczegółów: jeden wiersz na rekord
oBand := oReport.Bands.Add;
oBand.Kind := rbkDetail;
oItem := oBand.Items.Add;
oItem.Text := '[Product]';
oItem.Width := 100;
oItem := oBand.Items.Add;
oItem.Text := '[Amount:#,##0.00]';
oItem.Left := 100;
oItem.Width := 80;
oItem.Align := paRight;

// przeglądarka
oViewer := TsgcHTMLComponent_ReportViewer.Create(Self);
oViewer.Name := 'SalesViewer';
oViewer.HTMXEngine := sgcHTMXEngine1;
oViewer.Report := oReport;
oViewer.TokenSecret := LoadSecretFromConfig;
oTemplate.BodyContent := oViewer.HTML;

// raport filtruje swoje dane wartościami z przeglądarki
procedure TForm1.ReportBeforeGenerate(Sender: TObject; aParams: TStrings);
var
  vPeriod: string;
begin
  vPeriod := aParams.Values['Period'];   // od;do
  qrySales.Close;
  qrySales.ParamByName('FromDate').AsString := Copy(vPeriod, 1, Pos(';', vPeriod) - 1);
  qrySales.ParamByName('ToDate').AsString := Copy(vPeriod, Pos(';', vPeriod) + 1, 10);
  qrySales.ParamByName('Region').AsString := aParams.Values['Region'];
  qrySales.Open;
end;
@* Views/Reports/Sales.cshtml: SalesReport to długo żyjący TsgcHTMLReport *@
@model ReportsModel

<sgc-report-viewer name="sales" report="@Model.SalesReport"
                   show-export-xlsx="true" zoom="page-width"
                   css-height="720px" token-lifetime="300"
                   on-before-generate="Model.CheckAccess" />
using esegece.sgcWebSockets;

// raport
var report = new TsgcHTMLReport();
report.Title = "Sales";
report.FileName = "sales";
var param = report.Parameters.Add();
param.Name = "Period";
param.Caption = "Period";
param.Kind = TsgcHTMLReportParameterKind.rpkDateRange;
param.DefaultValue = "2026-01-01;2026-12-31";
param.Required = true;
report.OnBeforeGenerate += (sender, values) => LoadSales(values);

// przeglądarka
var viewer = new TsgcHTMLComponent_ReportViewer();
viewer.Name = "SalesViewer";
viewer.HTMXEngine = engine;
viewer.Report = report;
viewer.TokenSecret = configuration["Reports:Secret"];
template.BodyContent = viewer.HTML;

// ten sam raport, bez przeglądarki: PDF za trzeci kwartał
var values = new List<string> { "Period=2026-07-01;2026-09-30" };
report.SaveToFile("q3.pdf", values);

Co dostają Twoi użytkownicy

Wybierz wartości, obejrzyj raport, a potem pobierz go, wydrukuj lub otwórz jego dane w Excelu.

Panel parametrów

Każdy parametr raportu staje się opisanym polem: tekst, liczba, data, zakres dat z Od i Do, lista wyboru z Options i pole wyboru. Parametr Required pokazuje gwiazdkę i jest sprawdzany w przeglądarce przed Zastosuj i ponownie na serwerze. Resetuj przywraca wartość domyślną każdego pola.

Podgląd PDF

Podgląd używa wbudowanego pdf.js z TsgcHTMLComponent_PDFViewer, z jego paskiem narzędzi, nawigacją po stronach, powiększeniem i wyszukiwaniem. Wskaźnik z tekstem Generowanie raportu... zasłania go do narysowania pierwszej strony. Z AutoGenerate podgląd ładuje się od razu z wartościami domyślnymi.

Pobieranie, drukowanie i Excel

Pobierz PDF i Drukuj to ten sam PDF co w podglądzie, a pobrany plik nosi nazwę z FileName. Eksportuj do Excela zapisuje dane raportu przez ExportToXLSX. ShowDownload, ShowPrint i ShowExportXLSX pokazują lub ukrywają każde z nich.

Czytelne komunikaty

Brakująca wymagana wartość oznacza pole i przenosi na nie fokus. Gdy żaden wiersz się nie drukuje, podgląd pokazuje Brak danych dla wybranych parametrów zamiast pustego PDF. Odrzucone lub nieudane generowanie pokazuje swoją przyczynę i wyłącza łącza. Teksty pochodzą z ustawień regionalnych biblioteki.

Dostępność i klawiatura

Przeglądarka jest opisanym regionem. Każde pole ma etykietę, zakres dat jest fieldsetem z legendą, pola wymagane niosą aria-required, a brakująca wartość ustawia aria-invalid. Enter w polu stosuje parametry, a uprzejmy region na żywo ogłasza pola wymagane, brak danych, odrzucenia i błędy.

Raporty sekcyjne do PDF

Silnik za przeglądarką to osobny komponent niewizualny. Zapisuje PDF przez TsgcHTMLExportPDF, silnik PDF z sgcHTML, a ten sam raport można też zapisać jako arkusz Excela.

Sekcje

Nagłówek raportu, nagłówki stron, zagnieżdżone grupy z nagłówkami i stopkami, wiersze szczegółów, stopki stron i stopka raportu. Nagłówki grup mogą się powtarzać na każdej nowej stronie, KeepTogether trzyma grupę na jednej stronie, NewPageBefore i NewPageAfter łamią strony, a nagłówek raportu z NewPageAfter jest stroną tytułową.

Elementy

Sekcje zawierają tekst, obrazy, linie, prostokąty, wykresy, tekst sformatowany, kody kreskowe, kody QR i podraporty. Tekst jest przycinany do swojego pola, a elementy z AutoHeight powiększają sekcję, aby zmieścić zawinięty tekst.

Wyrażenia i PrintIf

Teksty zawierają wyrażenia w [ ]: pola z maską, takie jak [Amount:#,##0.00], [Sum(Field)], [Count], [Avg(Field)], [Min(Field)], [Max(Field)], [RunningSum(Field)], [Page] z [Pages], [Param.Name] i [GroupValue]. Sekcje i elementy drukują się tylko wtedy, gdy ich warunek PrintIf jest prawdziwy, na przykład Amount > 1000.

Źródła danych

Wiersze pochodzą z DataSet, Grid, tablicy JSON w RowsJSON albo ze zdarzenia OnGetRow. LoadFromGrid buduje raport tabelaryczny z kolumn TsgcHTMLComponent_Grid, z nagłówkami na każdej stronie, paskowanymi wierszami, sumami kolumn liczbowych i numerami stron.

Wykresy, kody kreskowe i kody QR

Element wykresu rysuje wiersze swojej sekcji jako grafikę wektorową: słupkowy, słupkowy poziomy, słupkowy skumulowany, liniowy, warstwowy, kołowy lub pierścieniowy, jeden wykres na grupę w sekcji grupy. ChartSource drukuje TsgcHTMLComponent_Chart tak, jak pokazuje go strona webowa. Elementy kodów kreskowych rysują Code 128, a elementy kodów QR używają poziomu korekcji błędów M.

Podraporty i tekst sformatowany

Element podraportu drukuje inny raport wewnątrz swojej sekcji, na przykład pozycje zamówienia, powiązany z wierszem nadrzędnym przez LinkFields, do 5 poziomów głębokości, i kontynuuje na kolejnych stronach. Element tekstu sformatowanego drukuje HTML, a z AutoHeight płynie przez strony po nagłówkach stron.

Czcionki i języki

Elementy domyślnie drukują czcionkami Base-14, które zawierają znaki Windows-1252. Zarejestruj czcionki TrueType w Fonts, aby drukować cyrylicę, grekę, arabski, hebrajski, chiński, japoński, koreański lub symbole. Osadzane są tylko wydrukowane glify, a FallbackFonts i AutoFallback pokrywają znaki, których czcionce brakuje.

Ten sam wynik wszędzie

Liczby i daty drukują się z DecimalSeparator, ThousandSeparator, DateFormat i TimeFormat raportu, nigdy z ustawień regionalnych maszyny, więc raport drukuje się tak samo na każdym komputerze i w .NET. Przy stałej CreationDate te same dane wejściowe dają te same bajty PDF.

Definicja jako JSON

SaveToJSON zapisuje ustawienia strony, czcionki, sekcje, elementy i parametry, a LoadFromJSON odczytuje je z powrotem po zwalidowaniu całej definicji, ze ścieżką JSON każdego błędu. Użytkownicy projektują raporty w przeglądarce w Report Designer, a dwukrotne kliknięcie raportu otwiera ten sam projektant w IDE Delphi.

Jeden raport, wiele żądań

Generate, SaveToFile, SaveToStream, GetPDFBytes, ExportToXLSX i HasData budują każde własną kopię wierszy i układu. Jeden raport obsługuje jednocześnie kilka żądań serwera webowego, każde filtrowane własnymi parametrami, bez własnej blokady.

Kluczowe właściwości, metody i zdarzenia

Składowe przeglądarki, po które sięga się najczęściej.

Report i OnGetReport

Report to TsgcHTMLReport do pokazania. Jedna przeglądarka obsługuje każdego użytkownika: aby pokazać każdemu inny raport, na przykład dla najemcy lub roli, zwróć go w OnGetReport(Sender, aParams, aReport), które uruchamia się w wątku żądania, gdzie sgcHTMLRequestSession daje sesję.

OnBeforeGenerate

OnBeforeGenerate(Sender, aParams, aAccept, aErrorMessage) akceptuje lub odrzuca generowanie, gdy przeglądarka się renderuje, przy każdym Zastosuj i przy każdym GET łącza, więc skopiowane łącze też jest odrzucane. Użyj go do uprawnień i reguł między parametrami, takich jak okres nie dłuższy niż rok.

Podpisane łącza

Każde łącze do pliku niesie token HMAC-SHA256 obejmujący komponent, format, wartości parametrów, sesję i czas ważności i działa tylko w sesji, która je wyrenderowała. Łącza wygasają po TokenLifetime sekundach (domyślnie 300), a skrypt podpisuje nowe dla pozostawionej otwartej strony. Ustaw ten sam TokenSecret na każdym serwerze za load balancerem.

Brak stanu na serwerze

Wartości podróżują w łączu, a raport jest generowany przy GET, po ponownym uruchomieniu OnGetReport i OnBeforeGenerate. Pliki są serwowane z Cache-Control: private, no-store, a błędne żądanie, błędny token lub odmowa kończą się statusem 400 lub 403.

Opcje podglądu

ShowParameters, ShowToolbar, ShowPageNav, ShowZoomControls i ShowSearch ustalają, co pokazuje przeglądarka, Zoom przyjmuje auto, page-width, fit lub wartość procentową, a Theme i CSSHeight ustalają wygląd podglądu.

Bez silnika

Z ActionURL i bez HTMXEngine Twój host kieruje wysłanie Zastosuj do DispatchComponentEvent, a łącza do plików do DispatchComponentFile. GetReportURL podpisuje te same łącza dla Twojego kodu, na przykład aby wysłać w wiadomości łącze do PDF za dany okres.

ASP.NET Core

W widoku Razor Tag Helper <sgc-report-viewer> renderuje przeglądarkę. report przyjmuje długo żyjący TsgcHTMLReport, albo pomiń go i użyj on-get-report. Zastosuj wysyła do punktu końcowego zdarzeń komponentów, a łącza PDF i Excela są serwowane przez trasę plików komponentu z UseSgcHtml, więc nic nie trzeba mapować.

Demo

Demos\60.HTML\01.RunTime\31.ReportViewer to sgc Sales Reports, serwer na porcie 8133 z trzema raportami: sprzedaż według regionów z wykresem słupkowym na region i wykresem pierścieniowym udziału każdego regionu, faktura z logo, kodem QR do zapłaty i kodem kreskowym Code 128 oraz wydruk siatki. Przycisk New order dodaje zamówienie, a każdy otwarty podgląd, w każdej przeglądarce, ponownie stosuje swoje parametry przez WebSocket strony. Wersje design time, Lazarus i .NET są jego odpowiednikami.

Odkrywaj dalej

Wypróbuj onlineZobacz to w demie Przeglądarka raportów, działającym na żywo na serwerze demo eSeGeCe.
Pomoc onlinePełna dokumentacja API i przewodnik użycia przeglądarki.
Pomoc TsgcHTMLReportSekcje, wyrażenia, wykresy, podraporty, czcionki i definicja JSON silnika raportów.
Komponent Report DesignerProjektuj sekcje, elementy i parametry raportu w przeglądarce.
Komponent PDF ViewerPrzeglądarka pdf.js, która rysuje podgląd raportu.
Wszystkie komponenty sgcHTMLPrzejrzyj pełną matrycę funkcji 80+ komponentów.
Pobierz bezpłatną wersję próbną30-dniowa wersja próbna zawiera projekty demonstracyjne 60.HTML.
CennikLicencje Single, Team i Site z pełnym kodem źródłowym.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Gotowy, aby zacząć?

Pobierz bezpłatną wersję próbną i zacznij budować interfejsy webowe w Delphi, C++ Builder i .NET.