Erstellen von Preisschildern mit Produktzusammensetzungen in FastReport VCL

Erstellen von Preisschildern mit Produktzusammensetzungen in FastReport VCL

Beim Drucken von Etiketten, Preisschildern und anderen Formaten mit begrenzten Abmessungen entsteht ein Problem, das den Ansatz zur Entwicklung solcher Berichte einschränkt. Unter solchen Bedingungen kann das Textobjekt nur bis zu einer bestimmten Größe wachsen, und es ist unmöglich, den Text umzubrechen und auf eine andere Seite zu verschieben. Wie lassen sich in diesem Fall die Produktzusammensetzung und andere Daten auf einem Etikett unterbringen, ohne dass die Daten abgeschnitten werden? Die Antwort ist einfach: Reduzieren Sie den Inhalt!

Ab Version 2023.3 wurde der FastReport VCL-Berichts-Engine ein weiteres leistungsstarkes Tool hinzugefügt – Reduzieren des Textes im Textobjekt durch die Skalierung des Inhalts.

Betrachten wir ein einfaches Beispiel für ein Preisschild mit der Produktzusammensetzung. Ein solches Preisschild wird mit einem Etikettendrucker auf vorgefertigtem Papier gedruckt, so dass der Drucktext physikalisch begrenzt ist. Aber die Zusammensetzung kann aus 3 bis zu mehreren Dutzenden von Wörtern bestehen.

Um einen solchen Bericht zu erstellen, verwenden Sie die Funktion zum Erstellen von Mehrspaltenberichten. Die Vorgehensweise zur Erstellung solcher Berichte finden Sie im Benutzerhandbuch. Nehmen wir als Beispiel die Erstellung eines einfachen zweispaltigen Berichts, wie in der Abbildung unten dargestellt. Wir werden näher auf die Berichterstellung nicht eingehen, sondern uns auf die erforderlichen Funktionen konzentrieren. Einen vorgefertigten Beispielbericht können Sie hier herunterladen.

Berichtsvorlage im Designer


Starten Sie den Berichterstellungsprozess.

Erstellter Bericht

Als Ergebnis können Sie in der Vorschau sehen, dass die Tabelle Produkte enthält, deren Zusammensetzung aus Dutzenden von Wörtern besteht und die mit der aktuellen Schriftgröße nicht auf das Preisschild passt. Der Ausweg aus dieser Situation besteht offensichtlich darin, die Schriftgröße zu reduzieren.

Gehen Sie zum Berichtsdesigner zurück, wählen Sie das Objekt und den Text aus, der nicht in den Rahmen passt, und öffnen Sie den Objektinspektor.

Eigenschaft im Objektinspektor

Die von uns benötigten Funktionen werden durch den ContentScaleOptions-Eigenschaftssatz gesteuert. Schauen wir uns diesen Satz genauer an.

AutoScale ist standardmäßig deaktiviert, die Eigenschaft legt den automatischen Textskalierungsmodus fest.

Der casStatic Modus ermöglicht die Textskalierung, bis der Text in den Container passt oder die extremen Grenzen der Beschränkungen (Eigenschaften Constraints.MaxStepValue und Constraints.MinStepValue) erreicht sind.

Der casStatic-Modus eignet sich hervorragend für einen Bericht mit Preisschildern. Aktivieren Sie ihn und starten Sie den Berichtserstellungsprozess.

Erstellter Bericht

Anhand des generierten Berichts können Sie sehen, dass der Text nicht nur verkleinert, sondern auch vergrößert wird. Dies ermöglicht das Füllen eines großen Containers. Dies kann für einige Berichte nützlich sein, ist im aktuellen Fall jedoch nicht erforderlich.  Gehen Sie zum Berichtsdesigner zurück und deaktivieren Sie das cstGrow-Flag in der ContentScaleOptions.ScaleType-Eigenschaft. Starten Sie den Berichtserstellungsprozess.

Erstellter Bericht

Jetzt druckt FastReport VCL Preisschilder und reduziert ihre Schriftgröße, wenn der Text nicht in das Objekt passt. Das gewünschte Ergebnis wird durch das Umschalten von nur zwei Eigenschaften erreicht.

Das Beispiel mit den Preisschildern ist eines der häufigsten, aber es gibt auch Situationen, in denen ein Band mit wachsenden Objekten ohne Umbruch auf einer Seite platziert werden muss. Wenn sich mehrere Textobjekte in einem solchen Band befinden, können wir die Schriftgröße einiger Textobjekte vernachlässigen, und so den gesamten Container komprimieren. Schauen wir uns an einem einfachen Beispiel mit beliebigen Daten an, wie das funktioniert (Die Vorlage können Sie hier herunterladen).

Berichtsvorlage im Designer

In diesem Beispiel gibt jedes Textobjekt große Textabsätze aus, wodurch die darunter liegenden Objekte gedehnt und verschoben werden. Nachdem Sie den Bericht mit Demodaten ausgeführt haben, sieht er wie im Screenshot unten aus.

Erstellter Bericht

Wie Sie sehen können, wird das Band bei einer großen Textmenge auf zwei Seiten aufgeteilt (in unserem Fall mit Objektumbrüchen). Was ist zu tun, wenn die Daten auf einer Seite platziert werden sollen? Der AutoScale Modus, der in casStatic installiert ist, ist für diesen Fall nicht geeignet, da die Objekte eine dynamische Höhe haben, die bei der Erstellung des Berichts berechnet wird. Außerdem werden durch das Strecken von Objekten die darunter liegenden Objekte verschoben. Für diesen Fall verfügt FastReport VCL über einen weiteren Objektskalierungsmodus, der durch das Setzen der AutoScale Eigenschaft in casDynamic aktiviert wird.

Setzen Sie die AutoScale Eigenschaft des MainText-Objekts in casDynamic und sehen Sie sich das Ergebnis der Berichterstellung an.

Erstellter Bericht

Das MainText-Objekt wurde verkleinert, und der gesamte Band passt auf eine Seite. Was aber, wenn Sie den Text in mehreren Objekten proportional verkleinern müssen?

Setzen Sie nun die AutoScale Eigenschaft des BottomText-Objekts in casDynamic und sehen Sie sich das Ergebnis der Berichterstellung an.

Erstellter Bericht

Dadurch wurde die Schriftgröße beider Objekte so weit reduziert, dass das Band vollständig auf die Seite passte.

Mit FastReport VCL können Sie den Prozess der Objektkomprimierung steuern. Bei jedem Durchlauf wird die Schriftgröße der Objekte um den angegebenen Schritt verringert, der für das Objekt in der ContentScaleOptions.StepValue Eigenschaft festgelegt ist. Dies wird so lange fortgesetzt, bis das Band auf die Seite passt oder die extremen Grenzen der Beschränkungen (Eigenschaften Constraints.MaxStepValue und Constraints.MinStepValue) erreicht sind.

Darüber hinaus kann jedes Objekt nur in einer bestimmten Iteration des Durchlaufs der Objekte verarbeitet werden. Wenn Sie möchten, dass in den ersten beiden Iterationen der Reduktion nur das BottomText-Objekt verarbeitet wird, reicht es aus, die ContentScaleOptions Eigenschaft zu setzen. Für die Constraints.MinIterationValue Methode muss dem MainText-Objekt der Wert 3 zugewiesen werden (damit werden die ersten beiden Iterationen übersprungen). Nach der Erstellung wird der Bericht wie folgt aussehen.

Erstellter Bericht

Wie Sie sehen können, hat unsere Berichts-Engine in den ersten beiden Iterationen nur das BottomText-Objekt komprimiert, so dass sein Inhalt einen kleineren Maßstab hat. Die Iterationen können wie folgt veranschaulicht werden.

Erstellter Bericht

Dieser iterative Ansatz zur Skalierung von Inhalten (oder Texten) ermöglicht es Ihnen, der Berichts-Engine Prioritäten zu setzen, indem Sie angeben, welches Objekt in welcher Reihenfolge komprimiert werden soll, um ein optimales Ergebnis zu erzielen.

Wenn die Anzahl der Objekte groß ist, kann sich dieser Ansatz negativ auf die Geschwindigkeit der Berichterstellung auswirken. Daher kann die Anzahl der Iterationen auf der Ebene der Berichts-Engine begrenzt werden, indem die Eigenschaft TfrxReport.EngineOptions.ContentScaleMaxIterations gesetzt wird (standardmäßig 10).

Fast Reports
  • 800-985-8986 (Englisch, die USA)
  • +4930568373928 (Deutsch)
  • +55 19 98147-8148 (Portugiesisch)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314

© 1998-2024 Fast Reports Inc.
Trustpilot