Lösungen zur Erstellung von Dokumenten und Berichten

FastReport .NET

Sets of components that simplify and automate the process of creating reports and documents in C# for diverse technologies.

FastReport VCL

Sets of VCL, FMX, and Lazarus components with full sources codes for creating reports and documents in Delphi and Pascal.

WEB reporting

Components for cross-platform projects to develop, build, display, print, and export reports directly in the browser.

Solutions for end-users

Independent software solutions for designing, building, converting, and viewing ready-made reports on your computer.

OLAP and Business Graphics

Big data presentation and analytical processing tools for obtaining pivot tables with subsequent visualization based on Business Graphics.

Service solutions

Ready-made services and client-server systems for fast data visualization and automatic execution of information processing tasks.

Nachrichten

22. April 2025

Aktualisierung von Delphi- und Lazarus-Produkten auf Version 2025.2

Wir stellen Ihnen das lang erwartete Update der gesamten Produktlinie von Delphi und Lazarus vor. Mit der Version 2025.2 erhalten Sie Zugriff auf ein benutzerfreundliches Tool zum Konfigurieren von Wasserzeichen, Aktualisierung von Serverkomponenten, einen neuen Mechanismus für WEB-Berichtsdialogseiten, ein neues TfrxDeviceCommand-Berichtsobjekt für RFID-Tags, wichtige Änderungen in der Berichts-Engine, Export- und Transportverbesserungen, Unterstützung für Themen und vieles mehr. Aktualisieren Sie Ihr Produkt, um mit uns neue Horizonte der Möglichkeiten zu eröffnen!      Neue Möglichkeiten von FastReport VCL Benutzerfreundliches Tool zum Konfigurieren von Wasserzeichen Es wurde die Möglichkeit hinzugefügt, anpassbare Wasserzeichen (Watermarks) für Berichtsseiten zu erstellen. Wasserzeichen werden häufig zum Schutz oder zur Identifizierung von Dokumententypen verwendet. Wir haben ein benutzerfreundliches Tool hinzugefügt, mit dem Sie ganz einfach Wasserzeichen für jede Seite Ihres Berichts konfigurieren können.  Jede Berichtsseite kann mit mehreren Wasserzeichen versehen werden, die Sie für den Druck, Export oder die Ausgabe individuell anpassen können. Wasserzeichen können sowohl Bilder als auch Texte mit einer großen Anzahl anpassbarer Parameter (Textdrehung, Stil) verwenden. Wasserzeichen können sowohl im Berichtsdesigner als auch in der Vorschau konfiguriert werden.   Aktualisierung von Serverkomponenten  Mit der Version 2025.2 sind jetzt alle verfügbaren Exportfilter von FastReport VCL auch in Serverkomponenten verfügbar. Nutzen Sie das Potential all dieser Formate in Ihrer WEB-Anwendung.   Neuer Mechanismus für WEB-Berichtsdialogseiten   Ein komplett neu entwickelter Mechanismus ermöglicht die Verwendung von Containerobjekten wie PageControl und Gruppen sowie die Erweiterung der Funktionalität verfügbarer Dialogseiten-Steuerelemente für WEB-Dialoge.  Für Dialogseiten haben wir in diesem Update die Unterstützung für neue Komponenten erweitert. Insbesondere haben wir Steuerelemente der Dialogseiten hinzugefügt, die zuvor nicht im WEB verfügbar waren.  Liste der neuen Dialogformular-Steuerelemente: Date picker – Datumsauswahl  DBComboBox –Dropdown-Liste, die mit einer Datenquelle verknüpft ist  List Box – Auswahlliste  CheckListBox – Auswahlliste (Kontrollkästchen) MaskEdit (ohne Maske) - Eingabefeld Password edit – Eingabefeld für das Passwort PageControl – Erstellung von Registerkartenseiten GroupControl – Gruppierungsbereich Panel – Panel  Sie können jetzt auch einen benutzerdefinierten HTTP-Header für Ihre Projekte verwenden.   Neues TfrxDeviceCommand-Berichtsobjekt  Dieses nicht visuelle Objekt wird neu zugewiesen, um Befehle an Geräte (Exporte) zu senden, die diese Befehle verarbeiten können. In der aktuellen Version enthält das Objekt eine Einstellungsklasse für RFID-Tags.   RFID-Tags übergeben nicht visuelle Daten an den ZPL Export, um diese Daten mithilfe spezieller Hardware auf den Chip zu schreiben. Die RFID-Tag-Klasse verfügt über einen eigenen Editor und einen Satz von Eigenschaften zur Feinabstimmung der Schreibdaten. Mehr dazu lesen Sie in unserem Artikel. Artikel lesen Mit dem TfrxPDFView Berichtsobjekt können Sie jetzt den Bereich der auszugebenden Seiten anpassen. Sie können Werte über Ausdrücke in der TfrxPDFView.PagesRange Eigenschaft festlegen. Auf diese Weise können Sie die auszugebenden Seiten eines PDF-Dokuments filtern.       Änderungen in der Berichts-Engine  Kombinierte Ausgabetechnik von Objekten Neue Änderungen in der Berichts-Engine ermöglichen es, verschiedene Ausgabetechniken von Objekten zu kombinieren, und bieten so Freiheit bei der Erstellung komplexer Berichte. Der Mechanismus zur Ausrichtung am unteren Rand (baBottom) eines wachsenden Bandes wurde geändert, wenn eines der Bandobjekte in mehrere Teile (Seiten) aufgeteilt wird. In der alten Implementierung wurde das Objekt mit der baBottom-Eigenschaft im ersten Teil des Datenumbruchs angezeigt.  Der neue Mechanismus eines solchen Berichts passt Objekte mit der baBottom-Eigenschaft an und platziert sie im letzten Teil der Daten (am Ende des Bandes). Bitte beachten Sie, dass dieses Verhalten der Berichts-Engine als korrekt angesehen wird und bei der Entwicklung von Berichten berücksichtigt werden sollte.   Unterstützung der smMaxHeight Dehnung für statische Tabellen (nur AllowSplit-Zeilen) Die smMaxHeight Dehnung funktioniert in Tabellen anders als in Objekten. Die erforderliche Höhe wird für die gesamte Tabelle im Band festgelegt. Dann wird sie auf die Zeilen verteilt, wobei die AllowSplit=True Eigenschaft aktiviert und die AutoSize=False Eigenschaft deaktiviert sind. Zeilen mit dem MaxHeight-Wert werden ebenfalls berücksichtigt. Mit diesem Ansatz können Sie auswählen, welche Tabellenzeilen gedehnt werden können, um einen leeren Raum auszufüllen, und welche nicht.   Neues Verhalten der TfrxRichView-Berichtsobjektaufteilung Das RichText-Objekt ermöglicht Ihnen die Verwendung von Tabellen, Bildern und anderen Objekten, die nicht auf eine bestimmte Größe aufgeteilt werden können. Solche Objekte konnten manchmal ganze nicht teilbare Inhaltsblöcke erzeugen, die über Seitenränder hinausgingen. In der aktuellen Version wurde die TfrxRichView-Aufteilung neu gestaltet und funktioniert situationsabhängig selektiv. Suche nach dem kleinsten teilbaren Teil. Wenn ein Objekt einen Teil enthält, der nicht auf eine neue Seite passt und nicht teilbar ist (das Objekt oder die Tabellenzeile ist größer als die Höhe des gesamten Blattes), dann wird jetzt für einen solchen Teil der kleinste „nicht teilbare“ Teil gesucht und so angezeigt. Die Aufteilung wird fortgesetzt. Wenn es weitere Teile gibt, werden diese ebenfalls aufgeteilt und angezeigt. Der Hauptunterschied zum alten Mechanismus besteht in der Suche nach dem kleinsten Wert für den ungeteilten Teil und der Fortsetzung des Aufbaus. Bisher landeten alle Inhalte im „nicht teilbaren“ Teil und die Aufteilung endete dort, aber ein Teil des Textes konnte verloren gehen.  Suche nach dem größten teilbaren Teil. Wenn ein Teil nicht auf eine neue Seite passt, aber als die Tabelle aufgeteilt wird, wird der größte teilbare Teil gesucht und die Ausgabe wird fortgesetzt.     Berichtsdesigner Zusätzliche Unterstützung für Theming (Runtime Themes) Der Berichtsdesigner und seine Komponenten wurden so angepasst, um sowohl systemspezifische als auch benutzerdefinierte Themen zu unterstützen. Jetzt hat der Berichtsdesigner immer den gleichen Stil wie Ihre Anwendung! In der Rad Studio 12.3 Version haben wir die Bildschirmeigenschaften mit hoher Anzeigeskalierung verbessert. Diese Änderung zielt darauf ab, die Qualität der Visualisierung und die Benutzerfreundlichkeit der Schnittstelle in der Entwicklungsumgebung zu verbessern, wenn mit Bildschirmen mit hoher Auflösung und Skalierungseinstellungen gearbeitet wird. In diesem Update wurde der Dialogeditor im Berichtsdesigner neu gestaltet. Es geht jetzt um einen festen Arbeitsbereich, genau wie in der Berichtsseite. Die Position des Dialogs kann über den Objektinspektor geändert werden. Die Codevervollständigung (Code completion) wurde im Berichtscode-Bearbeitungsfenster verbessert. Zu Ihrem Komfort wurde ein Popup-Menü im Fenster „Überwachungsliste“ (watch list) hinzugefügt.  Darüber hinaus haben wir das Fenster „Designeroptionen“ neu gestaltet, um kleinere Bildschirmauflösungen besser zu unterstützen.   Exporte und Transporte  Die Unterstützung benutzerdefinierter Symbole (EUDC) wurde in PDF- und SVG-Exporten implementiert. Außerdem wurde die Ausrichtung von RTL-Texten mit Ligaturen verbessert. Es wurde die Unterstützung für ZUGFeRD 2.3 mit den folgenden Profilen hinzugefügt: “MINIMUM”,” BASIC WL”, ”BASIC”, ”EN 16931”, ”EXTENDED”, ”XRECHNUNG”. Ein Beispiel mit Dateneinbindung für dieses Format finden Sie in InvoiceDemo, das mit dem Produkt mitgeliefert wird. Die neue Version verfügt über verbesserte Mechanismen für den Export in die XLSX- und DOCX-Formate. Dadurch wurde die Qualität der generierten Dokumente verbessert und wurden ihre Anpassungsmöglichkeiten erweitert. Der E-Mail-Transport (SMTP) wurde durch native TLS/STARTTLS-Unterstützung und XOAUTH-Autorisierungsunterstützung erweitert. Nutzen Sie sichere Kanäle zum Versand Ihrer Berichte.     FastReport Lazarus Zusätzlich zu den grundlegenden Änderungen, die in die VCL und Lazarus Versionen eingeflossen sind, unterstützt jetzt FastReport Lazarus auch hochauflösende Bildschirme (HiDPI).     FastCube VCL and FMX In der VCL-Version von FastCube wurden alle TTreeView-Steuerelemente durch TfrTreeView ersetzt. In allen Versionen gibt es nun eine Filteranzeige in der Liste der verfügbaren Felder.  Die FMX-Version bietet die Möglichkeit, benutzerdefinierte Filter und benutzerdefinierte Gruppen zu speichern, und enthält eine Reihe von Verbesserungen und Korrekturen.     FastQueryBuilder Die Unterstützung für hochauflösende Bildschirme (HiDPI) wurde hinzugefügt.     FastScript In diesem Update haben wir die Android-Unterstützung implementiert. Diese Neuerung funktioniert nur beim Kompilieren mit Zeichenfolgen, deren Indexierung mit eins beginnt. Sie können die volle Leistung der Skript-Engine in Ihren mobilen Android-Anwendungen nutzen.  Es wurde die Unterstützung für XML- und JSON-Klassen hinzugefügt. Weitere Informationen zum Arbeiten mit diesen Formaten finden Sie am Beispiel des Ladens von Daten in einen Bericht in diesem Artikel. Artikel lesen     FastReport VCL Controls Es ist jetzt möglich, benutzerdefinierte Knoten und Schnellzugriffslinks zu anderen Knoten für das TfrShellTreeView-Steuerelement zu erstellen. Wie man TfrShellTreeView konfiguriert und benutzerdefinierte Knoten hinzufügt, können Sie in unserem Artikel lesen. Artikel lesen     Installationsprogramm  Sie können jetzt unsere Android-Produkte installieren.  Außerdem wird jetzt die Installation von Paketen auf der 64-Bit-Version von Embarcadero RAD Studio 12.3 IDE unterstützt.     Vollständige Liste der Änderungen der Version 2025.2 ========================   VCL.Core [Localization]- Im LocalisationEditor wurde die Sortierung korrigiert;   VCL.Controls [Engine]+ Die Möglichkeit wurde hinzugefügt, eine benutzerdefinierte Struktur aus Root-Shell-Knoten und regulären Knoten zu erstellen;- Im smartMemo wurde die HiDPI-Unterstützung korrigiert;- Das Verhalten, bei dem ein Steuerelement nicht skaliert wurde, wenn es dem Parent zugewiesen wurde und wenn csFreeNotification auf ComponentState gesetzt war, wurde korrigiert;- Einige Fehler wurden beim Rendern von TfrTreeView und TfrShellTreeView behoben; [UI]- Für tfrTreeView wurde das Rendern mit einer benutzerdefinierten Farbe und im deaktivierten Zustand behoben; Lazarus.Controls [Engine]+ Die Möglichkeit wurde hinzugefügt, eine benutzerdefinierte Struktur aus Root-Shell-Knoten und regulären Knoten zu erstellen; - Im smartMemo wurde die HiDPI-Unterstützung korrigiert; [UI]- Die Möglichkeit wurde hinzugefügt, eine benutzerdefinierte Struktur aus Root-Shell-Knoten und regulären Knoten zu erstellen;- Für Lazarus wurde die HiDPI-Unterstützung implementiert;- Einige Fehler wurden beim Rendern von TfrTreeView und TfrShellTreeView behoben;   VCL.FastCube [UI]+ Die Filteranzeige wurde zur Liste der verfügbaren Felder hinzugefügt;+ Die Möglichkeit wurde hinzugefügt, benutzerdefinierte Filter und benutzerdefinierte Gruppen zu speichern;* TreeView wurde durch TfrTreeView ersetzt;- Die Lokalisierung der FastCube-Symbolleiste wurde korrigiert;   FMX.FastCube [UI]+ Die Filteranzeige wurde zur Liste der verfügbaren Felder hinzugefügt;+ Die Möglichkeit wurde hinzugefügt, ActivePopup in TfcxSliceGrid.FullUpdate zu löschen;* TreeView wurde durch TfrTreeView ersetzt;- Die Lokalisierung der FastCube-Symbolleiste wurde korrigiert;- Die fehlerhafte Funktion des TfcxRangesEditor-Formulars wurde behoben;- Fehler bei der Positionierung und Sichtbarkeit der Schaltflächen „OK“ und „Abbrechen“ wurden behoben;- Der FastCube FMX-Fehler wurde im Auswahlregel-Editor behoben;- Inkrementelles Suchen wurde in Dropdown-Listen korrigiert; [Engine]+ Die Möglichkeit wurde hinzugefügt, benutzerdefinierte Filter und benutzerdefinierte Gruppen zu speichern;- Ein Fehler wurde behoben, der auftrat, wenn man in den Top-N-Filter-Listenbereich klickte, nachdem TfcxSliceGrid.Slice := nil auf Null gesetzt wurde;    Lazarus.FastCube [UI]+ Die Filteranzeige wurde zur Liste der verfügbaren Felder hinzugefügt;* TreeView wurde durch TfrTreeView ersetzt;- Die Lokalisierung der FastCube-Symbolleiste wurde korrigiert;   VCL.FastQueryBuilder [UI]+ Die erste HiDPI-Version wurde hinzugefügt;   Lazarus.FastQueryBuilder [UI]+ Die erste HiDPI-Version wurde hinzugefügt; VCL.FastScript [Engine]+ In FastScript wurde die XML- und JSON-Unterstützung hinzugefügt;* TfsTree wurde durch das Ersetzen von TTreeView durch TfrTreeView verbessert;- In TfsScript.Destroy wurde ein Fehler behoben, der einen Absturz verursachen konnte;   FMX.FastScript [Engine]+ Die Android- Unterstützung wurde hinzugefügt;- In TfsScript.Destroy wurde ein Fehler behoben, der einen Absturz verursachen konnte;   Lazarus.FastScript [Engine]+ In FastScript wurde die XML- und JSON-Unterstützung hinzugefügt;* TfsTree wurde durch das Ersetzen von TTreeView durch TfrTreeView verbessert;- In TfsScript.Destroy wurde ein Fehler behoben, der einen Absturz verursachen konnte;- Das fs_ibx-Paket zum Kompilieren unter Lazarus wurde korrigiert;   VCL.FastReport [Preview]+ Die Minimierung wurde bei Application.MainFormOnTaskbar = True behoben; [Engine]+ Die Möglichkeit wurde hinzugefügt, Wasserzeichen für Berichtsseiten anzupassen;* Der RichView-Aufteilungsmechanismus wurde geändert, die Definition des minimalen untrennbaren Teils wurde hinzugefügt;- HTMLView wurde bei Page.EndlessHeight korrigiert;- Der Fehler „Klasse nicht gefunden“ wurde behoben, der bei der Verwendung der UseFileCache-Eigenschaft mit leeren Seiten im Bericht auftrat;- Die frxDecompressStream Funktion wurde korrigiert;- Falscher Wert wurde in CopyName-Makros korrigiert;- Das Exportieren von Daten und Uhrzeiten nach XLSX wurde korrigiert;- Das Aufteilen der RichView-Komponente mit leerer Zeichenfolge am Ende wurde korrigiert;- Die SVG-Rahmenaktualisierung wurde korrigiert;- Die Reihenfolge des Ladens der 'hmtx' TTF-Schriftartentabelle wurde korrigiert;- Ein Fehler wurde behoben, bei dem das Umbenennen eines Datensatzes den Standardbenutzernamen nicht änderte;- Ein Fehler wurde behoben, bei dem die Einstellungen des Druckdialogs zurückgesetzt wurden, wenn der Druckdialog auf einen zusätzlichen Bildschirm verschoben wurde;- Die Signaturgröße für nicht visuelle Komponenten wurde korrigiert;- Die HiDPI-Unterstützung wurde in smartMemo korrigiert;- Das Verhalten des Bandes mit zusätzlicher Höhe wurde korrigiert;- Ein Speicherzugriffsfehler wurde bei Verwendung einer externen DBX-Verbindung behoben;- Ein Fehler wurde beim Drucken eines verschachtelten Berichts mit mehreren Spalten auf einer Seite behoben;- Fehlendes Zeilenende wurde in CellData.Text behoben;- In Memo AutoWidth mit Makros wie TotalPages wurde ein Fehler behoben;- Ein Fehler wurde behoben, bei dem einige Tabellenereignisse zweimal ausgelöst wurden;- baBottom wurde bei der Aufteilung eines Objekts in mehrere Seiten korrigiert und die smMaxHeight Unterstützung wurde den statischen Tabellen hinzugefügt (nur AllowSplit Zeilen);- Ein Rundungsfehler der Band-Umbruchshöhe wurde behoben;- Linke Koordinate des Unterberichts wurde beim Wechsel zu einer neuen Seite korrigiert;- Die AnyDAC-Pakete von FastReport wurden so korrigiert, dass sie automatisch auf RAD Studio XE3 und älteren IDEs installiert werden;- Ein Fehler wurde behoben, bei dem Makros zur Entwurfszeit aktualisiert wurden;- Der Duplex-Auswahlmodus wurde korrigiert;- Das Verhalten von baBottom und smMaxHeight in der Fußzeile der Seite wurde korrigiert;- Ein Fehler wurde behoben, der das ParentForm-Singleton löschte, wenn das übergeordnete Formular nicht von einer Berichtskomponente geschlossen wurde; [Exports]+ Der Export von RTL-Text nach PDF wurde verbessert;+ Der Export externer Symbole wurde hinzugefügt;+ Beim PDF-Export wurde die ZUGfERD 2.3 Unterstützung hinzugefügt;- Die Compiler-Warnung wurde entfernt;- Beim Exportieren von langen HTMLViews wurde ein Fehler behoben;- Bei der Generierung von PDF/A-Metadaten wurde ein Fehler behoben;- PDF mit dem ZUGFerd-Standard wurde korrigiert;- Fehlerhafter Übergang des Eingabefokus durch Tab in Exportdialogen wurde behoben;- Das Zahlenformat wurde im XLS-Exportfilter korrigiert;- Die Symbolgröße wurde beim Ersetzen in SVG- und PDF-Exporten korrigiert;- Schwebender Anker der docx-Tabelle wurde entfernt und durch leere Zeile ersetzt; [Client-server]+ Neue Dialogformular-Steuerelemente wurden hinzugefügt: Date picker, DBComboBox, ListBox, CheckListBox, MaskEdit (ohne Maske), Password edit, PageControl, GroupControl, Panel;+ Die Möglichkeit wurde hinzugefügt, einen benutzerdefinierten HTTP-Header in Client-Server-Komponenten zu verwenden;* Die Dialoggenerierungs-Engine wurde überabreitet, verschachtelte Steuerelemente werden nun unterstützt, es wurde die Möglichkeit zur Erweiterung mit eigenen Steuerelementen hinzugefügt;* Exporte für Client-Server-Komponenten wurden aktualisiert;- Der Umgang mit Parametern und Dialogen wurde korrigiert; [Designer]+ Das Rendering und die Funktionalität von Designerelementen wurde in VCL-Themen verbessert;+ Das Popup-Menü wurde im Fenster „Überwachungsliste“ (watch list) des Berichtsdesigners hinzugefügt;* Für kleine Bildschirmauflösungen wurde das Fenster „Design -> Optionen“ neu gestaltet;* Der Dialog-Editor wurde im Berichtsdesigner neu gestaltet;- Ein RichEditor-Fehler mit alten Versionen von msftedit.dll wurde behoben;- Die Dialogskalierung wurde korrigiert (TfrxDialogPage);- TfrxLabel wurde bei AutoSize = True korrigiert; - TfrxDesigner.DefaultFont wurde bei HiDPI korrigiert;- Der TfrxDialogPage Betrieb auf einem zusätzlichen Bildschirm wurde korrigiert;- Im Berichtsdesigner wurde das Verhalten beim Bearbeiten von Barcodes über den Objektinspektor korrigiert; - Die Code-Vervollständigung wurde in verschachtelten Prozeduren und Funktionen in einem Skript sowie in einem Skript mit Zeichenfolgenverkettungsausdrücken korrigiert;- Das Verhalten von Hinweistexte wurde im Codefenster korrigiert;- Der Menüstil des Berichtsdesigners wurde in RAD 12.2 in der Entwurfszeit korrigiert; [Other]+ Die Möglichkeit wurde hinzugefügt, das Suchformular zu überschreiben;* Rumänische Ressourcen wurden aktualisiert;- Die InvoiceDemo-Kompilierung wurde korrigiert;- Der CustomScrollsDemo Beispiel wurde korrigiert; [Report object]+ Einseitiges TIFF wird jetzt in TfrxPictureView unterstützt;+ Für RFID-Tags wurde ein Objekt (TfrxDeviceCommand) hinzugefügt;  + Die Liste der angezeigten Seiten eines PDF-Dokuments (Range) wurde in TfrxPDFView implementiert;- Die Kompatibilität mit dem HTML-Viewer wurde korrigiert;- Das Barcode-Rendering wurde bei ((Rotation > 0) und (WideBarRatio > 2)) korrigiert;- Die Standard-Schriftgröße der oberen Barcode-Beschriftung wurde bei HiDPI korrigiert;- Das Verhalten der HTMLView-Komponente wurde korrigiert, wenn die colgroup Breite die Breiteneinstellungen des td-Tags überschrieb;- Die Berichterstellung mit RFID wurde korrigiert;- Falscher Clip wurde in RichView korrigiert;- Auf zweidimensionalen Barcodes wurden Beschriftungen korrigiert;- Auf zweidimensionalen Barcodes wurden Beschriftungen korrigiert;- Die "Swiss QRCode" Voreinstellung des QRCodes wurde korrigiert;   FMX.FastReport [Engine]- Der Fehler „Klasse nicht gefunden“ wurde behoben, der bei der Verwendung der UseFileCache-Eigenschaft mit leeren Seiten im Bericht auftrat;- Das Übertragen von gedrehten Texten wurde beim PDF-Export korrigiert;- Das Exportieren von Daten und Uhrzeiten nach XLSX wurde korrigiert; [Exports]- Die Compiler-Warnung wurde entfernt;- WordWrap wurde im PDF-Export mit einfacher Textvisualisierung behoben; [Designer]- Der Editor für Gruppenüberschriften wurde korrigiert;   Lazarus.FastReport [Engine]+ Die Möglichkeit wurde hinzugefügt, Wasserzeichen für Berichtsseiten anzupassen;- HTMLView wurde bei Page.EndlessHeight korrigiert;- Der Fehler „Klasse nicht gefunden“ wurde behoben, der bei der Verwendung der UseFileCache-Eigenschaft mit leeren Seiten im Bericht auftrat;- Die frxDecompressStream Funktion wurde korrigiert;- Falscher Wert wurde in CopyName Makros korrigiert;- Das Exportieren von Daten und Uhrzeiten nach XLSX wurde korrigiert;- Die Reihenfolge des Ladens der 'hmtx' TTF-Schriftartentabelle wurde korrigiert;- Ein Fehler wurde behoben, bei dem das Umbenennen eines Datensatzes den Standardbenutzernamen nicht änderte;- Ein Fehler wurde behoben, bei dem die Einstellungen des Druckdialogs zurückgesetzt wurden, wenn der Druckdialog auf einen zusätzlichen Bildschirm verschoben wurde;- Ein Fehler wurde beim Erstellen von TfrxComboEdit unter Lazarus behoben;- Die Signaturgröße für nicht visuelle Komponenten wurde korrigiert;- Die HiDPI-Unterstützung wurde für smartMemo korrigiert;- Das Verhalten des Bandes mit zusätzlicher Höhe wurde korrigiert;- Das Speicherleck wurde beim PDF-Export unter Linux behoben;- Ein Fehler wurde behoben, bei dem Makros zur Entwurfszeit aktualisiert wurden;- Der Duplex-Auswahlmodus wurde korrigiert;- Das Verhalten von baBottom und smMaxHeight in der Fußzeile der Seite wurde korrigiert;- Ein Fehler wurde behoben, der das ParentForm-Singleton löschte, wenn das übergeordnete Formular nicht von einer Berichtskomponente geschlossen wurde; [Exports]+ Der PDF-Export von RTL-Texten wurde verbessert;+ Das Exportieren von externen Symbolen wurde hinzugefügt;- Die Compiler-Warnung wurde entfernt;- Beim Exportieren von langen HTMLViews wurde ein Fehler behoben;- Bei der Generierung von PDF/A-Metadaten wurde ein Fehler behoben;- PDF mit ZUGFerd-Standard wurde korrigiert;- Der PDF-Export wurde bei HiDPI korrigiert;- Exportdialoge wurden bei HiDPI korrigiert;- Die Invertierung von Bildern wurde beim ZPL-Export korrigiert; [Client-server]+ Neue Dialogformular-Steuerelemente wurden hinzugefügt: Date picker, DBComboBox, ListBox, CheckListBox, MaskEdit (ohne Maske), Password edit, PageControl, GroupControl, Panel;+ Die Möglichkeit wurde hinzugefügt, einen benutzerdefinierten HTTP-Header in Client-Server-Komponenten zu verwenden;* Die Dialoggenerierungs-Engine wurde überabreitet, verschachtelte Steuerelemente werden nun unterstützt, es wurde die Möglichkeit zur Erweiterung mit eigenen Steuerelementen hinzugefügt;* Exporte für Client-Server-Komponenten wurden aktualisiert;- Der Umgang mit Parametern und Dialogen wurde korrigiert; [Designer]- Ein RichEditor-Fehler mit alten Versionen von msftedit.dll wurde behoben;- Die Dialogskalierung wurde korrigiert (TfrxDialogPage);- TfrxLabel wurde bei AutoSize = True korrigiert;- Das Rendering und die Funktionalität von Designerelementen wurde in VCL-Themen verbessert; [Other]+ Die Möglichkeit wurde hinzugefügt, das Suchformular zu überschreiben; [Report object]+ Für RFID-Tags wurde ein Objekt (TfrxDeviceCommand) hinzugefügt;- Das Verhalten der HTMLView-Komponente wurde korrigiert, wenn die colgroup Breite die Breiteneinstellungen des td-Tags überschrieb; - Auf zweidimensionalen Barcodes wurden Beschriftungen korrigiert;- Die Kompatibilität mit dem HTML-Viewer wurde korrigiert;- Die Erstellung von Composite Barcodes wurde korrigiert; [Preview]- Die Vorschau wurde HiDPI korrigiert.  
Weiterlesen
17. April 2025

Der Import von Dokumenten aus Word ist bereits in FastReport .NET Ultimate verfügbar

Mit der Veröffentlichung von 2025.2 ist das Abonnement für Ultimate .NET noch profitabler geworden! Alle Lizenznehmer haben ein zusätzliches Plugin erhalten, mit dem Sie Microsoft Word-Dokumente importieren können (.docx). Wenn Sie eine solche Datei öffnen, wird sie in eine Berichtsvorlage konvertiert FastReport .NET (.frx). Der Abonnementpreis für Ultimate .NET ist gleich geblieben. Aufgrund der großen Formatunterschiede ist es nicht immer möglich, die beiden Dokumente vollständig abzugleichen. Mit diesem Plugin können Sie jedoch den Zeitaufwand für die Erstellung einer Vorlage basierend auf einer vorhandenen DOCX-Datei erheblich reduzieren. Im Moment unterstützt unser Plugin nicht: Hervorheben des Hintergrunds eines Teils der Zeichenfolge, Formen sowie verschachtelte Vektorgrafiken Vector Markup Language (VML) und OLE-Objekte.  Um dieses Plugin sofort in Ihrer Geschäftslösung zu verwenden, aktualisieren Sie Ihre Lizenz in Ihrem persönlichen Konto auf Version 2025.2. Befolgen Sie dann die nachstehenden Anweisungen, um die DLL in FastReport zu registrieren, oder verbinden Sie das Nuget-Paket FastReport.Plugin.OOXMLImport. Informationen zu den Importfunktionen und zum Aktivieren des Plugins finden Sie im Artikel. Lesen Sie den Artikel
Weiterlesen

Artikel

24. April 2025

Öffnen und Konvertieren von FP3-Dateien mit dem FastConverter .FP3

FP3 ist ein Format für einen vorgefertigten Bericht, der mit dem FastReport-Berichtsgenerator erstellt wird und in verschiedene Geschäftsanwendungen eingebettet ist. Eine Datei in diesem Format kann von verschiedenen Softwaren wie CRM oder ERP generiert werden. Verwenden Sie den FastConverter .FP3, um sie einfach in ein beliebiges Format zu konvertieren.  Mit dem FastConverter .FP3 können Sie .fp3-Dateien in folgende Formate konvertieren: PDF Versionen 1.4, 1.5, 1.6 und 1.7, PDF / A (1, 2, 3), RTF, XLSX, XML, DOCX, TXT, CSV, PPTX, HTML, JPEG, BMP, PNG, TIFF, EMF, SVG, Open Document Format (ODT, ODS, ODP) und so weiter. Es ist möglich, eine einzelne Datei oder eine Massendatei zu konvertieren.    Konvertieren einer .fp3-Datei in PDF Schritt 1: Installation von FastConverter .FP3. Unter folgendem Link können Sie den FastConverter .FP3 herunterladen und installieren. Nach der Installation starten Sie die Software.   Schritt 2: Öffnen einer FP3-Datei. Gehen Sie auf „Datei“ → „Öffnen“, wählen Sie eine FP3-Datei aus und klicken Sie auf „Öffnen“.   Schritt 3: FP3 in ein anderes Format konvertieren. Nachdem Sie die Datei heruntergeladen haben, klicken Sie auf „Datei“ → „Speichern unter“. Eine Vielzahl von unterstützten Exportformaten wird Ihnen zur Verfügung gestellt. Wählen Sie im Feld „Zielformat“ das gewünschte Format (PDF, DOCX, XLSX, HTML, PNG, etc.) aus der angebotenen Liste aus.    Schritt 4: Endgültiger Speicherort und Name der Datei. Geben Sie im Feld „Zieldatei“ den Ordner und den Dateinamen an und klicken Sie auf Speichern. Sobald die Konvertierung abgeschlossen ist, steht die Datei im neuen Format im angegebenen Verzeichnis zur Verfügung.   Wenn Sie Fragen haben, wenden Sie sich bitte an unser Support-Team unter support@fast-report.com.
Weiterlesen
22. April 2025

Umgang mit XML- und JSON-Formaten in FastScript

XML und JSON sind inzwischen zu den wichtigsten Standards für die Datenspeicherung und den Informationsaustausch zwischen Computersystemen geworden. Als Reaktion auf Benutzeranfragen wurden Klassen für die Arbeit mit XML und JSON zu FastScript hinzugefügt. In diesem Artikel sehen wir uns genauer an, wie man mit diesen Klassen arbeitet, über welche Eigenschaften und Methoden sie verfügen und wie man Berichte aus Skriptcode erstellt.     XML-Format In Skripten werden 2 Klassen verwendet, um mit XML zu arbeiten. Diese Klassen sind auf maximale Leistung und geringen Speicherverbrauch ausgerichtet.   TfrXMLDocument – ist eine Klasse, die die Funktionalität eines XML-Dokuments kapselt. Die folgenden Eigenschaften und Methoden sind in dieser Klasse verfügbar. Eigenschaften und Methoden der Klasse Beschreibung procedure SaveToStream(Stream: TStream); speichert XML im übergebenen Stream procedure LoadFromStream(Stream: TStream; AllowPartialLoading: Boolean = False); lädt XML aus dem übergebenen Stream hoch procedure SaveToFile(const FileName: string); speichert XML in einer Datei mit dem angegebenen Namen procedure LoadFromFile(const FileName: string); lädt XML aus einer Datei mit dem angegebenen Namen hoch procedure Clear; Entfernt alle XML-Knoten aus dem Baum außer dem Stammknoten. Der Inhalt des Knotens wird NICHT geleert. property Root: TfrXMLItem; ermöglicht den Zugriff auf das Stammelement des Baums property AsText: string; ermöglicht, XML als Zeichenkette abzurufen und festzulegen (mit dieser Eigenschaft können Sie beispielsweise XML mithilfe einer Berichtsvariablen an ein Berichtsskript übergeben) property AutoIndent: Boolean; legt fest, wie die XML-Ausgabe generiert werden soll: als einzelne Zeile oder als eingerückter Text   TfrXMLNode – a class that encapsulates the properties of an XML document node. You cannot create an object of this type directly. It is created by calling the Add() method of the element to which you want to add a child element. Let’s take a closer look at the properties and methods of the TfrXMLNode class. Eigenschaften und Methoden der Klasse Beschreibung function Add(AName:string):TfrXMLItem; erstellt ein untergeordnetes TfrXMLItem Element mit dem angegebenen Namen und gibt es zurück procedure Clear; löscht die Liste der untergeordneten Elemente procedure InsertItem(Index:integer; AItem: TfrXMLItem); fügt ein untergeordnetes Element an der angegebenen Position ein; das Element kann zu einem anderen Dokument gehören function Find(AName:string):Integer; sucht unter den untergeordneten Elementen ein TfrXMLItem mit dem angegebenen Namen und gibt es zurück. Wenn das Element nicht gefunden wird, wird -1 zurückgegeben. Wenn es mehrere Elemente mit dem angegebenen Namen gibt, wird das erste von ihnen zurückgegeben function FindItem(AName:string):TfrXMLItem; sucht unter den untergeordneten Elementen ein TfrXMLItem mit dem angegebenen Namen und gibt es zurück. Wenn das Element nicht gefunden wird, wird ein neues Element mit dem angegebenen Namen erstellt und zurückgegeben. Wenn es mehrere Elemente mit dem angegebenen Namen gibt, wird das erste von ihnen zurückgegeben. function Root: TfrXMLItem; gibt das Stammelement des Dokuments zurück property Count:Integer; Gibt die Anzahl der untergeordneten Knoten des Elements zurück property Items[AIndex:Integer]: TfrXMLItem; gibt ein untergeordnetes Element anhand seines Indexes zurück property Prop[AName:string]:string; gibt den Wert des Knotenattributs mit dem angegebenen Namen zurück oder legt ihn fest  property Name: string; Name des Element-Tags property Parent: TfrXMLItem; Name des übergeordneten Elements. Bei Root ist es gleich nil property Text:string; Eine Zeichenkette mit einer Liste von Knotenparametern in der folgenden Form: Name1=”Value1” Name2=”Value2”… Sonderzeichen sind in dieser Zeichenkette Escapezeichen. procedure Delete(AIndex: Integer); löscht das untergeordnete Element mit dem AIndex-Index  procedure DeleteProp(const APropName: string); löscht ein Knotenattribut mit dem angegebenen Namen property Value: string; Text, der zwischen dem öffnenden und dem schließenden Tag des Elements steht function PropExists(APropName:string):Boolean; hilft festzustellen, ob ein Element ein Attribut mit dem angegebenen Namen hat function IndexOf(AItem: TfrXMLItem):Integer; gibt den Index des übergebenen Elements zurück function GetPropNames(ANames:TStrings); Füllt die übergebene Zeichenkettenliste mit TfrXMLItem-Attributnamen   Versuchen wir, einen Bericht mithilfe von Klassen für das Arbeiten mit XML zu erstellen. Als Beispiel werden wir Daten aus der Datei „country.xml“ in einem Bericht anzeigen, dabei jedoch nicht TClientDataSet verwenden, sondern auf die XML-Datei direkt zugreifen. Erstellen Sie einen neuen Bericht, wechseln Sie in den Bearbeitungsmodus und fügen Sie MasterData in den Bericht ein. Und obendrauf fügen Sie mehrere Memos hinzu, um die Daten anzuzeigen. Erstellen Sie außerdem das OnBeforePrint Ereignis für das MasterData-Objekt.  Der endgültige Code des Berichtsskripts sieht wie folgt aus: var doc: TfrXMLDocument; item: TfrXMLItem; IIndex: Integer;   procedure MasterData1OnBeforePrint(Sender: TfrxComponent); var cur: TfrXMLItem; S: string; begin cur := item[IIndex]; mmNum.Text := cur.Prop['Code']; mmName.Text := cur.Prop['Name']; mmCapital.Text := cur.Prop['Capital']; mmArea.Text := cur.Prop['Area']; mmPopulation.Text := cur.Prop['Population']; mmContinent.Text := cur.Prop['Continent']; Inc(IIndex); end;   begin Doc := TfrXMLDocument.Create; Doc.LoadFromFile('..\..\Data\country.xml'); item := Doc.Root[1]; IIndex := 0; MasterData1.RowCount := item.count; end. Führen Sie den Bericht aus. Zur besseren Lesbarkeit haben wir auch Spaltenüberschriften hinzugefügt.     JSON Format Wechseln wir vom XML-Format zu JSON-Format. FastReport verwendet auch 2 Klassen um mit JSON zu arbeiten. Das sind TfrJSON und TfrJSONArray. In diesem Fall sind diese Klassen nur ein Wrapper um Klassen von System.JSON in der Delphi Plattform oder ähnliche Klassen in Lazarus.   TfrJSONObject ist eine Klasse, die Funktionen für die Arbeit mit JSON-Objekten kapselt.  Eigenschaften und Methoden der Klasse Beschreibung function Create(const JSONstring: string); erzeugt ein JSON-Objekt und füllt es mit der übergebenen Zeichenkette function IsValid:Boolean; gibt True zurück, wenn das Objekt gültiges JSON enthält procedure LodFromFile(const AFilName:string); lädt Daten aus der angegebenen Datei. Wenn das Objekt Daten enthält, gehen diese verloren procedure LoadFromtStream(const AStream:TStream); lädt Daten aus dem übergebenen Stream. Wenn das Objekt Daten enthält, gehen diese verloren function ToString:string;   gibt eine Zeichenkette zurück, die die alphabetische Darstellung des JSON-Objekts enthält procedure SaveToFile(const AFileName: string); speichert die alphabetische Darstellung eines JSON-Objekts in einer Datei procedure SaveToStream(AStream: TStream speichert die alphabetische Darstellung eines JSON-Objekts in einem Stream function IsNameExists(const AName:string); gibt True zurück, wenn das Objekt eine Eigenschaft mit dem angegebenen Namen hat function IsNameValueExists(const Name, Value: string): boolean; gibt True zurück, wenn das Objekt eine Eigenschaft mit dem angegebenen Namen hat und ihr Wert mit dem angegebenen Wert übereinstimmt function Count:Integer; gibt die Gesamtzahl der Eigenschaften eines JSON-Objekts zurück property Names[AIndex:Integer]:string; gibt den Namen der Eigenschaft mit dem angegebenen Index zurück Property ValueType[IndexOrName:Variant]:TfrJSONType; gibt den Typ der Eigenschaft mit dem angegebenen Index oder Namen zurück. Der Typ kann einer der folgenden Werte sein: – jsUnknown – der Eigenschaftstyp ist unbekannt (es ist ein Parsing-Fehler aufgetreten oder es gibt keine Eigenschaft mit diesem Index oder Namen).– jsNumber – die Eigenschaft ist vom numerischen Typ.– jsString – die Eigenschaft ist vom Zeichenkettentyp.– jsBoolean – die Eigenschaft ist vom Booleschen Typ (true/false).– jsNull – der Eigenschaftstyp ist null (der Wert ist nicht festgelegt).– jsList – der Eigenschaftentyp ist ein JSON-Array.– jsObject – der Eigenschaftstyp ist ein verschachteltes JSON-Objekt. Mit den folgenden Eigenschaften können Sie die Werte eines JSON-Objekts in der einen oder anderen Form abrufen. Bei allen diesen Eigenschaften erfolgt die Indizierung entweder über die Eigenschaftsnummer in der Eigenschaftsliste oder über ihren Namen. Beachten Sie, dass AsString[‘1’] <> AsString[1] nicht gleich sind. Auch wenn Sie versuchen, den Eigenschaftswert mit einer ungeeigneten Methode abzurufen, können Fehler auftreten und falsche Eigenschaftswerte zurückgegeben werden. Wenn eine Eigenschaft beispielsweise vom Typ „Objekt“ oder „Array“ ist und Sie versuchen, ihren Wert mithilfe der Eigenschaft „AsString“ abzurufen, erhalten Sie eine leere Zeichenkette zurück. In anderen Fällen gibt AsString eine Zeichenkettendarstellung des Eigenschaftswerts zurück. Eigenschaften und Methoden der Klasse Beschreibung property AsObject[IndexOrName: Variant]: TfrxJSON; ermöglicht es, ein verschachteltes JSON-Objekt abzurufen property AsArray[IndexOrName: Variant]: TfrJSONArray; ermöglicht es, ein verschachteltes JSON-Array abzurufen Property AsString[IndexOrName: Variant]: string; ermöglicht es, den Eigenschaftswert als Zeichenkette anzurufen. Diese Methode kann auf Eigenschaften von anderen Typen als Objekten und Arrays angewendet werden. Für logische Werte wird eine Zeichenkette mit dem Wert „True“ oder „False“ zurückgegeben. Bei Zahlen mit einem Bruchteil wird unabhängig von den regionalen Einstellungen immer ein Punkt als Dezimaltrennzeichen verwendet. property AsNumber[IndexOrName: Variant]: Extended; ermöglicht es, den Eigenschaftswert als Zahl abzurufen. Wenn die Eigenschaft nicht numerisch ist, wird 0 zurückgegeben property AsBoolean[IndexOrName: Variant]: Boolean; ermöglicht es, den Eigenschaftswert als Booleschen Wert abzurufen. Wenn die Eigenschaft von einem anderen Typ ist, wird False zurückgegeben.  Um ein Nullfeld zurückzugeben, müssen Sie sich etwas mehr Mühe geben. Im Allgemeinen gibt es keine solche Methode. Sie können jedoch die ValueType-Eigenschaft verwenden, die für ein Nullfeld jsNull zurückgibt, oder die AsString-Eigenschaft verwenden, die die Zeichenkette „null“ zurückgibt. Betrachten wir näher die Methoden zur Behandlung von Objekteigenschaften. Methoden der Klasse Beschreibung Procedure Delete(AName: String);   löscht die Eigenschaft des Objekts mit dem angegebenen Namen function AddObject(const AName: string): Integer fügt dem Objekt ein leeres untergeordnetes Objekt mit dem angegebenen Namen hinzu function AddArray(const AName: string): Integer; fügt dem Objekt ein leeres Array mit dem angegebenen Namen hinzu function AddString(const AName, AValue: string): Integer; fügt dem Objekt eine Zeichenkette mit dem angegebenen Namen hinzu function AddBool(const AName: string; AValue: boolean): Integer; fügt dem Objekt einen booleschen Wert mit dem angegebenen Namen hinzu function AddNumber(const AName: string; AValue:Extended): Integer; fügt dem Objekt einen numerischen reelen Wert mit dem angegebenen Namen hinzu function AddInteger(const AName: string; AValue:Integer): Integer; fügt dem Objekt einen numerischen Ganzzahlwert mit dem angegebenen Namen hinzu function AddNull(const AName: string): Integer; Fügt dem Objekt einen Nullwert mit dem angegebenen Namen hinzu Die Methoden geben eine Ganzzahl zurück, die den Index des hinzugefügten Elements in der Liste aller Felder darstellt. Alle Methoden, die einem Objekt Felder hinzufügen, überwachen nicht, ob bereits Felder mit gleichem Namen vorhanden sind. Die Verantwortung dafür liegt beim Programmierer, der diese Klasse verwendet. Diese Überwachung ist notwendig, um zu verhindern, dass mehrere Felder mit denselben Namen in der JSON-Ausgabe erscheinen. Das Verhalten des Systems in diesem Fall ist nicht definiert - es hängt vom Parser ab, der das empfangene JSON weiter parst. Das bedeutet, dass jeder beliebige Wert mit demselben Namen in der Arbeit erscheinen kann!  Die Klasse TJSONArray kapselt Methoden und Eigenschaften für die Arbeit mit JSON-Arrays. Die Grundeigenschaften sind grundsätzlich gleich, aber auf sie kann nur per Index zugegriffen werden. Es werden nur Operationen unterstützt, die auf ein beliebiges Element zugreifen, seinen Wert abfragen oder ein Element löschen. Es ist nicht möglich, Elemente im Array zu verschieben oder ihren Typ zu ändern. Betrachten wir die Eigenschaften und Methoden zum Abrufen der Werte von Elementen in dieser Klasse. Eigenschaften und Methoden der Klasse Beschreibung function Count:Integer; gibt die Anzahl der Elemente in einem Array zurück property ValueType[AIndex: Integer]: TfrJSONType; gibt den Typ des Array-Elements mit dem angegebenen Index zurück property AsObject[AIndex: Integer]: TfrJSONObject; gibt ein Objekt zurück, das den Zugriff auf ein Array-Element als JSON-Objekt ermöglicht Property AsArray[AIndex: Integer]: TfrJSONArray gibt ein Objekt zurück, das den Zugriff auf ein Array-Element als JSON-Array ermöglicht property AsString[AIndex: Integer]: string; gibt den Wert eines Array-Elements als Zeichenkette zurück property AsNumber[AIndex: Integer]: Extended; gibt den Wert eines Array-Elements als Zahl zurück property AsBoolean[AIndex: Integer]: Boolean; gibt den Wert eines Array-Elements als booleschen Wert zurück Wie bei einem Objekt sollten Sie beim Abrufen von Werten von Array-Elementen vorsichtig sein. Je nach dem Wert-Typ sollten Sie die entsprechende Methode verwenden, um ihn abzurufen. Nachfolgend werden Methoden zum Bearbeiten von Elementen eines JSON-Arrays beschrieben. Eigenschaften und Methoden der Klasse Beschreibung procedure Delete(AIndex:Integer); lLöscht ein Array-Element mit einem angegebenen Index function AddObject: Integer; fügt ein verschachteltes JSON-Objekt am Ende des Arrays hinzu function AddArray: Integer; fügt ein verschachteltes JSON- Array am Ende des Arrays hinzu function AddString(const AValue: string): Integer; fügt eine Zeichenkette am Ende des Arrays hinzu function AddBool(AValue: boolean): Integer; fügt einen booleschen Wert am Ende des Arrays hinzu function AddNumber(AValue:Extended): Integer; fügt eine reelle Zahl am Ende des Arrays hinzu function AddInteger(AValue: Integer): Integer; fügt eine Ganzzahl am Ende des Arrays hinzu function AddNull: Integer; fügt Null am Ende des Arrays hinzu Alle diese Methoden geben die Position des zum Array hinzugefügten Elements zurück. Sie können kein Element in die Mitte eines Arrays einfügen – dies ist eine Einschränkung der Basisklassen in System.JSON.     Besonderheiten der Verwendung von Klassen für den JSON-Zugriff  Bei der Verwendung von Objekten ist zu beachten, dass alle Wrapper-Objekten nach ihrer Verwendung aus dem Code entfernt werden müssen.  Bitte beachten Sie, wenn Sie ein untergeordnetes Objekt oder Array abrufen möchten und stattdessen ein Skalarwert oder überhaupt kein Wert vorhanden ist, gibt die Eigenschaft „nil“ zurück und der weitere Zugriff auf eine solche Eigenschaft führt zu einer Ausnahme. Sie sollten keine Methoden verwenden, die nicht für die Arbeit mit Werten bestimmter Typen ausgelegt sind, die in einem Element gespeichert sind, um diese Werte abzurufen.  Beachten Sie auch, dass bei den Namen der Objekteigenschaften zwischen Groß- und Kleinschreibung unterschieden wird, d.h., „Item1“ und „item1“ sind unterschiedliche Namen! Sie können den Objektelementen nur dann Werte zuweisen, wenn der Typ dieser Werte mit dem Typ übereinstimmt, der dem Element zugewiesen ist. Wenn Sie einen Elementtyp neu definieren müssen, löschen Sie dieses Element und fügen Sie ein neues Element mit demselben Namen und dem erforderlichen Typ hinzu. Es ist nicht möglich, neue Werte für Array-Elemente einzugeben. Sie müssen ein JSON-Array löschen und es dann mit den gewünschten Werten neu erstellen. Verwenden wir die oben beschriebenen Klassen und schreiben ein Skript, das Daten (ohne Typinformationen) aus einer XML-Datei extrahiert und in ein JSON-Objekt einfügt. procedure XMLToJSON; var XML: TfrXMLDocument; xi, xi1: TfrXMLItem; I, J: Integer; JO: TfrJSONObject; JA, JA1: TfrJSONArray; SL: TStringList; begin XML:=TfrXMLDocument.Create; XML.LoadFromFile('.\..\..\data\country.xml'); JO:=TfrJSONObject.Create('{}'); JO.AddArray('data'); JA:=JO.AsArray['data']; xi:=X.Root[1]; xi1:=xi.Items[0]; SL:=TStringList.Create; xi1.GetParamNames(SL); for I:=0 to xi.Count - 1 do begin xi1:=xi.Items[I]; JA1:=JA.AsArray[JA.AddArray]; for J:=0 to SL.Count-1 do JA1.AddString(xi1.Prop[SL[J]]); JA1.Free; end; JA.Free; JO.SaveToFile('.\..\..\data\country.json'); JO.Free; SL.Free; end; Versuchen wir nun, einen Bericht auf der Grundlage der erhaltenen Daten zu erstellen (fügen Sie die entsprechenden Komponenten MasterData und Memo auf der Berichtsseite ein): var J:TfrJSONObject; A:TfrJSONArray; curr:Integer;   procedure MasterData1OnBeforePrint(Sender: TfrxComponent); var A1:TfrJSONArray; begin A1:=A.AsArray(curr); Memo1.Memo.Text:=A1.AsString[0]; Memo2.Memo.Text:=A1.AsString[1]; Memo3.Memo.Text:=A1.AsString[2]; Memo4.Memo.Text:=A1.AsString[3]; Memo5.Memo.Text:=A1.AsString[4]; Memo6.Memo.Text:=A1.AsString[5]; A1.Free; curr := curr + 1; end;   begin J:=TfrJSONObject.Create(''); J.LoadFromFile('.\..\..\data\country.json'); A:=J.AsArray[0]; MasterData1.RowCount:=A.Count; curr:=0; end.   Sie können diese Objekte auch im Delphi-Code verwenden - verbinden Sie einfach die frXML- und frJSON-Module in der uses-Anweisung.      Schlussfolgerung In diesem Artikel haben wir die Verwendung von Klassen für die Arbeit mit JSON und XML in FastReport betrachtet. Wenn Sie sowohl in Delphi als auch in Lazarus nicht nur Berichte entwickeln, wird die Verwendung dieser Klassen Probleme reduzieren, wenn Sie von einer Umgebung zur anderen wechseln. In beiden IDEs ist das Verhalten gleich.  Zu Ihrem Komfort haben wir zwei Beispiele beigefügt, die die Erstellung von XML- und JSON-basierten Berichten veranschaulichen. Sie können sie sofort in FastReportDemo öffnen und ausführen, das im Lieferumfang von FastReport enthalten ist. Möglicherweise müssen Sie die Berichte vor dem Start konfigurieren – geben Sie den richtigen Pfad zur Datendatei „country.xml“ an. Sie befindet sich sowohl im DemoCenter als auch im Ordner mit den Beispielen.  Beispiele herunterladen
Weiterlesen

Häufig gestellte Fragen

What is a report generator?

Why do we need report generators and OLAP analytics tools?

What does Fast Reports Inc. do?

Uns vertrauen

Fast Reports
  • 800-985-8986 (Englisch, USA)
  • +31 97 01025-8466 (Englisch, EU)
  • +49 30 56837-3928 (Deutsch, DE)
  • +55 19 98147-8148 (Portugiesisch, BR)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2025 Fast Reports Inc.