![]() |
Wie erzeugt man heutzutage (Massen)Druckoutput?
Hallo zusammen,
ich arbeite als Entwickler in einem international tätigen Unternehmen, welches als Dienstleister in der Energiebranche auftritt. Unsere Software erzeugt Druckoutput in verschiedenen Formaten, welche zum Teil der Archivierung dienen (PDF) aber auch direkt an den Kunden gehen (PCL -> Papier). Unsere Datenbasis wird in einer Oracle-Datenbank verwaltet. Das von uns selbst entwickelte Drucksystem ist mittlerweile in die Jahre gekommen. Wir verwalten unterschiedliche Formulare in inhaltlich und layoutmässig unterschiedlichen Ausprägungen (da international unterschiedliche Anforderungen an den Output). Beispiel: Zitat:
Die benötigten Daten werden auf Zuruf innerhalb dieser Formulare zusammengesammelt und in eine Queue gestellt. Aus dieser werden dann nachts unterschiedliche Druckengines aufgerufen (PDF, PCL...) die die Daten dann entsprechend umsetzen und den eigentlichen Output erzeugen. Dieses ist alles native gelöst, d.h. wir benutzen hier keine Reporting-Tools oder so, sondern wird schreiben die PCL-, Postscriptbefehle usw. selber, inkl. der kompletten Formatierungen etc. Zu dieser Aufbereitung gehören auch weiterführende Prozesse wie bspw. der Aufruf von Webservices zur Archivierung der Daten oder das Erzeugen von Mails, die den Druckoutput als Attachment mit auf die Reise bekommen. Das ist alles schön und gut und funktioniert, aber was das für ein Moloch ist, könnt Ihr Euch sicherlich vorstellen. Die Integration neuer Technologien wie bspw. QR-Codes usw. sind recht aufwändig, da sie auch immer in allen Druckengines implementiert werden müssen. Des Weiteren bedarf es zwingend eines Programmierers (was für mich nicht unbedingt zum Nachteil ist :lol:), um kleinste Anpassungen am Layout oder so vorzunehmen. Nun ist es so, dass im Rahmen einer Umstrukturierung auch das Layout unserer Dokumente (und das sind ein paar 100) angepasst werden soll. So eine Runde haben wir zuletzt vor etwa 13 Jahren gedreht und zu meiner Schande muss ich gestehen, dass wir mit den Auswirkungen zum Teil heute noch zu kämpfen haben. Es ist so viel, was man in dem Bereich zu beachten hat, seien es passende Seitenumbrüche, horizontale Ausdehnung von dynamischen Elementen usw. Dieses in der aktuellen Infrastruktur umzusetzen, sehe ich als sehr kritisch. Somit komme ich zu meinem eigentlichen Anliegen 8-) Ich bin nun auf der Suche nach einer Alternative, die unser aktuelles Drucksystem ablösen soll. Und da ich mich diesbezüglich auf dem aktuellen Markt gar nicht auskenne, wende ich mich an Euch und hoffe, ein paar nette Ideen zu bekommen :) Fakten:
Must have:
Nice to have:
Nicht-Anforderungen:
Das ist erstmal das, was mir spontan so einfällt :) Ich habe mich schoneinmal mit XSLT auseinander gesetzt, weiß aber nicht, ob dieses bei dem Umfang einsetzbar ist. Da fehlt es an Erfahrungen. Ich freue mich über Eure Anregungen :) |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Generell brauchst du Report-Generatoren. Da gibt es z.B. FastReport oder Quickreport (dann lieber Fastreport).
Aber wenn du dich in der Richtung mal umschaust wirst du sicherlich was finden. Der Reportgenerator ist normalerweise ähnlich zu bedienen wie der Formular-Generator in Delphi. Programmierkenntnisse sind normalerweise nicht erforderlich. Wenn mich nicht alles täuscht gibt es bei fast allen (oder sogar alle) Report-Generatoren eine Option den Quelltext mitzukaufen. Kostet dann etwas mehr aber man kann die Engine als auch den Editor seinen wünschen anpassen. Wobei das eigentlich normalerweise nicht nötig ist. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Und für die Skalierbarkeit nimmt man etwas wie MSMQ, ActiveMQ, usw. und schiebt die Jobs in so eine Queue. An der Queue lauschen dann 1-n Systeme, die diese Jobs verarbeiten können.
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Wenn es Java sein darf:
![]() In der Community Edition kostenlos, lizensiert unter AGPL. Zitat:
Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Wenn man unbedingt zur Laufzeit des Reports noch eigene Delphi-Funktionen aufrufen will, sollte man dies zuerst noch mal überdenken. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Die einzige Möglichkeit da eine andere Sprache als Delphi einzubringen ist entweder die vorhandene Software umzuschreiben (was wie gesagt total übertrieben wäre) oder ein zweites Programm in Java/C#/WasAuchImmer zu schreiben mit dem das Delphi Programm dann erst mal kommunizieren muss. Aber das wäre ja wohl mehr als umständlich/unnötig. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Gibt es denn einen Reportgenerator, der PCL-Dokumente erzeugen kann? So was wäre für mich auch interessant.
Ansonsten stört mich ein wenig die Dateigröße von PDFs, die mit Fastreport erstellt wurden. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Und mit FastReport erzeugt man auch (direkt) keine PDF-Dokumente (es sei denn man ist sehr leidensfähig oder es ist einem egal, was da raus kommt). |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Habe ich so verstanden:
Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Das habe ich auch gelesen, nur würde ich mich mit so etwas nie rumschlagen wollen (es müsste schon ein sehr ernster Grund vorliegen um mich zu überzeugen).
Da es solche Umsetzer schon gibt (Druckertreiber) bin ich dagegen das Rad neu zu erfinden. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Eine Alternative zu einem Reportgenerator, wäre u.U MS Office/open Office
Im Extremfall, können diese Dokumente/Vorlagen sich die notwendigen Daten von einer DB abholen, sich selbst erzeugen und auch ausdrucken. Rein theoretisch sollte jeder fortgeschrittene Anwender in der Lage sein, entsprechende Vorlagen zu erstellen. Ich würde allerdings empfehlen die Dokumentengenerierung und DB-Abfrage über ein eigenes Programm abzuwickeln, was zumindest der Performance zuträglich wäre. Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
also bei einigen "must have" würde ich eher vorschlagen, das Gehirnschmalz in einen eigenen neuen Generator zu stecken, als mir eine fertige Blackbox ans Bein zu binden.
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Hallo zusammen und ersteinmal vielen Dank für Eure Rückmeldungen :)
Das mit den PCL-Files wird bei uns ähnlich gehandhabt, wie bei ernschd. Die PCL-Files werden bei uns native erzeugt; nicht über einen Druckertreiber, sondern durch Schreiben der Escape-Sequenzen... Anschließend werden sie an einen Dienstleister geschickt, der den Papier-Output erzeugt. So sparen wir uns eine große Druckstraße. Die Archivierung der PDFs läuft bei uns intern. Ob man bei einer Novellierung des Ganzen immer noch auf PCL setzt, würde ich jetzt in Frage stellen. 8-) Das ist bei uns einfach historisch gewachsen und dieses Format haben wir halt immer mitgeschleppt, obwohl wir teilweise ganz schöne Kapriolen schlagen mussten, um irgendwelche Sachen zu integrieren. Zitat:
Leider haben wir nicht die Zeit, um uns über diese grundlegenden Sachen zukünftig Gedanken zu machen. Wenn Du ein Feature implementierst, dann implementierst Du es in x Druckengines. Und dann musst Du es auch noch nahezu deckungsgleich hinbekommen. Das ist kein Vergnügen :pale: Das ist ja der ausschlaggebende Grund, nach Alternativen zu suchen :( Zitat:
Ansonsten stehen Reportgeneratoren zur Debatte, an die ich auch am Anfang nachdachte. Was haltet Ihr denn generell von XSL speziell XSL-FO? Hat damit jemand Erfahrungen? Oder ist das zu unflexibel? Zu inperformant? Über weitere Tipps bin ich sehr dankbar :) |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Über die Archiv-Suche sind sie noch zu finden: ![]() zum Beispiel ![]() ![]() |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
'Sehr geehrter #Anrede# #Name# hiermit kündigen wir zum nächsten 1.' ist ein Reportgenerator bestimmt gut zu gebrauchen. Wenn allerdings noch ein (paar) Logos dazu kommen und abhängig von der #Sprache# sich auch Teile des Briefes ändern sollen, dann ist/war so mancher Reportgenerator überfordert. Und das selber bauen von PCL, Postscript und was für Druckerbefehlssprachen noch - Files, ist vollkommen unnötig und viel zu Fehlerträchtig. Für so etwas gibt es Druckertreiber! Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Wenn man mehrere Sprachen unterstützen will, dann legt man sich pro Sprache ein Template an. Das wird dann durch die Engine mit den Daten gefüllt und fertig.
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Je nachdem welchem Generator man benutzt und was man genau will kann es schonmal etwas umständlich werden, aber es müsste auf jeden Fall gehn. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Von Euch hat damit niemand Erfahrungen? Zitat:
Zitat:
Zitat:
Vor allem ist es rasend schnell :) Des Weiteren muss man, um einen Druckertreiber bemühen zu können, ein fertiges Layout haben, das dieser auch verarbeiten kann. Und das haben wir ja eben nicht. Und wie ich schons sagte, möchten wir uns ja von dieser Technik auch verabschieden. Zitat:
Da ist nix mit Template ;) Diese Texte müssen zur Laufzeit übersetzt werden (also der übersetzte Text muss zur Laufzeit anstelle des Originaltextes aus der DB geladen werden). Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Man kann ja abhängig von einer Bedingung auch unterschiedliche Bänder ein- und ausblenden.
Damit sollte sowas ja auch machbar sein. Ist wie schon angedeutet evtl. etwas umständlich, aber sollte eigentlich gehn. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
(Ist allerdings nicht ganz so einfach wie die Werbung uns das glauben machen will) Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Achso, nur um das nochmal klar zu machen:
Bei unseren Dokumenten handelt es sich nicht einfach nur um Templates, in denen ein paar Platzhalter ersetzt werden müssen. Das mag jetzt geschwollen klingen, aber leider ist es so. Wie ich schon sagte, bin ich in der Energiebranche tätig, genauer gesagt geht es um Abrechnungen/Rechnungen im Bereich Heizkosten. Da wir international tätig sind, gibt es so viele verschiedene gesetzliche Grundlagen und Anforderungen, die bei der Berechnung berücksichtigt werden müssen; das ist echt kompliziert :? Und dieser Umfang spiegelt sich auch im Druck wieder. Da gibt es so viele Sonderlocken die es zu berücksichtigen gibt. Alleine das Zusammensammeln der Daten sowie die Positionierung (ohne das Erzeugen des eigentlichen Zieloutputs) hat bei dem umfangreichsten Dokument (nur eins!) schon knapp 10 Tausend Zeilen Code (inkl. Kommentarzeilen natürlich)) Und da bin ich mittlerweile echt unsicher, ob ein proprietäres Produkt soetwas leisten kann :( Ist halt keine WISO-Steuersoftware :twisted: Ihr habt mir auf jeden Fall viele gute Ansätze geliefert, von denen ich einige Weiterverfolgen werde. Und vielleicht meldet sich ja jetzt jemand und sagt 'Hey, das ist bei uns genau so und wir machen das so und so' *träum* ;) Ist halt sehr schwer, zu evaluieren, ob eine Lösung für einen das Richtige ist. Wenn man da über Wochen in die falsche Richtung entwickelt... |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Alles kein Thema mit einem vernünftigen Reporter. Und gerade was dynamische Reports anbelangt (die aus unterschiedlichen Templates zusammen gesetzt werden) ist das auch kein großes Thema. Um MS Office/LibreOffice würde ich einen Bogen machen: die Steuerung müsste zwangsläufig über OLE/COM erfolgen, was leider fehlerträchtig geworden ist vor allem weil bei so Sachen auch gerne mal Virenscanner unerwartet zuschlagen... Und wenn das ganze von einem "normalen" Anwender geändert werden sollte, scheidet im Grunde alles aus, was keinen grafischen Editor hat, weil es sonst ganz bitter wird und am Ende wieder "nur" der Entwickler Änderungen machen kann. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Delora schau dir mal FastReport oder auch List&Label (wobei ich persönlich noch nicht mit List&Label gearbeitet habe) an.
Das wird viele Fragen besser beantworten als irgendwelche Erfahrungen/Beispiele von hier. Bin mir zu 99% sicher dass FastReport oder List&Label genau das ist was du brauchst. Je nachdem wie Komplex gewisse Dinge sind muss man für gewisse Sachen eben unterschiedliche Reporte erstellen. Im Zweifelsfall pro Land einen Report (Rechnung_de.fr3, Rechnung_fr.fr3, Rechnung_us.fr3, ...). Und wie gesagt: Du musst nur 1x die Reportengine im Code initialisieren und dann die benötigten Daten an den entsprechenden Report weitergeben und fertig. Das erstellen der Reporte geht wie gesagt komplett ohne Programmierkenntnisse. Es sei denn du möchtest irgendwelche interaktiven Sachen drin haben vielleicht. (D.h. der Report soll nicht (direkt) ausgedruckt werden sondern der Benutzer kann noch mit dem Report interagieren und der Report ist mehr eine GUI mit Funktionalität als ein reiner Ausdruck - aber das scheint ja eh nicht das zu sein was du brauchst - von daher sind keine Programmierkenntnisse erforderlich). |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Das Übersetzen der dynamischen Texte erfolgt also mindestens ein Schritt vorher. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Zitat:
Die Erfahrung lehrt leider daß Du Recht hast. @Delora Ich werde das Gefühl nicht los, daß Ihr vieles so macht wie Ihr es macht, weil Ihr es schon immer so gemacht habt. Vielleicht wäre es jetzt sinnvoll, falls machbar, sich zu überlegen wie man es machen würde wenn man keine Altlasten hätte. Das kostet nur etwas Zeit und etwas Papier. Gruß K-H |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
XSL-FO ist definitiv ein Blick Wert. Mittels der FO-Prozessoren können auch jede Menge Ausgabe-Varianten erzeugt werden. Würde ich Report.XY auf jeden Fall vorziehen. Zumindest war das mein Eindruck. Am Ende haben wir unsere Druck-Engine doch nochmal umgeschrieben. Aber wenn wieder die Entscheidung ansteht, ist XSL-FO wieder im Boot.
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Hallo,
ich werfe mal QuickPDF in die Runde. Hier kommt es aber auf die Komplexität der Dokumente an. Bei List&Label hatte mir daals missfallen (Version 6-10 ...), dass das alles sehr statisch war. Mittlereise kan man das Teil aber auch komplett dynamisch benutzen. Im Vergleich zu Crystal Reports war L&L ein Traum. Heiko |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Was die Steuerung des Ausdrucks (und die vorher gegangene Diskussion um Templates) anbelangt. Man kann die Druckausgabe entweder automatisiert über die Datenbank (TDataSet) ablaufen lassen, oder den Ausdruck selber manuell Datensatz für Datensatz erledigen. Diese Flexibilität ist auch mir wichtig, weil beim Ausdruck manchmal (also nicht immer) Daten erst während des Ausdruckes zusammengestellt werden müssen. Beispielsweise beim Druck eines Lieferscheines oder einer Rechnung die dazugehörigen Seriennummern, das Aufmaß, oder bei Leistungspositionen die Zuordnungen. Der grafische Formulardesigner (mit echtem Preview, also ganz anders als z.B. bei FastReport) wird mitgeliefert. Jeder der sich damit beschäftigt (auch neugierige Kunden) kann den bedienen. Man kann ihn aber auch sperren, was ich über die Benutzerverwaltung wahlweise mache. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Hallo zusammen,
ich denke, dass ich mir den List&Label mal ansehe. Die Infos auf der Homepage sind ja ganz ansprechend. Und eine 30 Tage Testversion gibt es auch (obwohl ich in dem Zeitrahmen wahrscheinlich nicht so viel reißen kann :lol:) Und wenn das nichts ist, werde ich mir mein XSL-FO Buch nochmal herholen. Zitat:
Nochmals vielen Dank für Eure Ideen! |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
@hoika,
der TE spricht von Milliarden Datensätzen, da sollte Geld keine Rolle spielen und die Entscheidung IMHO für die größten Hersteller in diesem Bereich gefällt werden (SAP (Crystal Report) usw.). Wir nutzen (noch) Crystal Report, mich würde mal die Aussage interessieren, was an L&L besser ist wie bei Crystal Report. Das hört sich interessant an! Ich hatte vor längerer Zeit auch mal L&L getestet, konnte damals (Version 14?) keine so großen Vorteile erkennen um CR zu ersetzen. Zitat:
|
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Anstelle Template zu verwenden die manuell erstellt sind, könnte man versuchen das gesamte Layout dynamisch zu erzeugen. Das geht bei einigen mir bekannten Reportgeneratoren entweder indem man die Reportdefinitionsdatei per Code erzeugt, oder über ein Layout-API.
Dann würde man nur noch ein Programm benötigen, das über diese API die gewünschten Variationen der Reportlayouts erzeugt. Mit diesem Programm würde man den Report dann aus Bausteinen zusammensetzen, die speziell dem geschäftlichen Feld angepasst sind. Das Zusammenbauen kann hart kodiert im Code ablaufen:
Code:
An das generierte Layout werden dann alle Datensätze übergeben.
Quartalsabrechnung := TQAbrechnung.Create;
Quartalsabrechnung.AddInfoBlock(...); Quartalsabrechnung.AddWerbungsBlock(...); QuartalsabrechnungLayout := Quartalsabrechnung.ErstelleLayout; LayoutRepository.AddLayout(REPORT_QA, QuartalsabrechnungLayout);
Code:
ReportGenerator := TRG.Create;
ReportGenerator.Layout := LayoutRepository.LoadLayout(REPORT_QA); ReportGenerator.LoadDataSet(...); ReportGenerator.CreateReport; ... Manuelle Nachbearbeitung der generierten Layouts sollte dann nicht mehr stattfinden. p.s. Auf jeden Fall würde ich vermeiden, zur Laufzeit des Reportgenerators noch Code mit Datenbankzugriff auszuführen. Eine Funktion, die innerhalb des Ausdrucks noch Lookupfelder in der Datenbank nachschlägt wäre ein No-Go. Für die saubere Trennung wäre es zum Beispiel möglich, die Daten als XML Dokument bereitzustellen. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Hi,
ich weiß nicht ob ich hier etwas sinnvolles zu beitragen kann, aber bevor ich es verschweige, teile ich mal unsere Lösung mit. Ich bin in der Webentwicklung bei einem Reiseunternehmen tätig, wo wir natürlich auch einige Dokumente wie beispielsweise Rechnungen drucken müssen. Wir verwenden Python im Backend. Mit unserem Python Framework benutzen wir auch eine Templating Engine für Python. Mit dieser können wir nicht nur HTML generieren, sondern auch LaTeX Dateien. Mit Schleifen und If-Abfragen sind wir so recht mächtig in der Generierung der LaTeX-Quelldateien. Mittels selbst definierten Dokumenttypen und LaTeX-Befehlen ist das Generieren daher auch recht einfach. Änderungen an den Templates waren oft schwierig, meist aber nur, weil das System über seine ursprünglichen Grenzen gewachsen ist und wir keinen LaTeX-Profi im Team haben. Bei einer eventuellen Neuentwicklung würde ich den Weg über LaTeX allerdings erneut gehen. Diesmal mit mehr Augenmerk auf Modularität, Unicode (!!!) und einfacheres Debugging. LaTeX Generierung ist nach meinem Empfinden alles andere als rasend schnell. Ich weiß aber auch nicht von welchen Maßstäben wir reden. Weiterhin umfasst unser Volumen nur wenige Dokumente pro Tag. Allerdings lässt sich diese Technik denke ich problemlos vertikal und horizontal skalieren. |
AW: Wie erzeugt man heutzutage (Massen)Druckoutput?
Zitat:
Unsere erste Lösung war damals auch CR. Ist schon eine ganze Weile her (wie schon gesagt, seit L&L Version 4) und mit Sicherheit kein Vergleich mehr mit heutigem Stand. Was mich damals letztendlich überzeugt und den Ausschlag für den Wechsel gegeben hat, war die Performance und die Flexibilität. Wenn ich will, kann ich den kompletten Ausdruck mit einer eigenen Druckschleife generieren. Ich muss dann zwar alle Variablen und Felder selber erzeugen. Das ist die Grundlage für die Flexibilität, aber, ein einmaliger Programmier-Vorgang. Ich habe Druckschleifen die laufen schon jahrelang ohne jegliche Änderung, denn wenn der Kunde etwas ändern/ergänzen möchte, neue Berechnungen braucht usw. dann passiert das alles im Formular-Designer. Ein Nachteil von L&L könnte sein, dass man roundabout 20 Dateien (dll's) mitliefern muss. Bisher hatte ich aber damit kein Problem. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz