Hallo,
ich beschäftige mich momentan mit dem Drucken und möchte eine Fixed Page das ich per Code erstelle drucken. Funktioniert alles, jedoch möchte ich im Body ein Grid hinzufügen das n-Elemente beinhaltet. Diese Elemente sind variabel hoch. Dadurch muss ich ausrechnen ob das zu hinzufügende Element noch auf der Seite Platz hat. Wie komme ich auf die Höhe des hinzugefügten Elements?
Zugriff aufs lineElement gibt folgende Werte:
ActualHeight = 0
Height=NaN
Ich hoffe ich habe es nicht zu kompliziert erklärt. Hier ein teil des codes
class CustomFixedDocument : FixedDocument
{
[...]
public void AddNewDocumentPage()
{
FixedPage page = new FixedPage();
page.Width = PrintableDinA4Width;
page.Height = PrintableDinA4Height;
page.Margin = PageMargin;
PageContent page1Content = new PageContent();
((IAddChild)page1Content).AddChild(page);
page1Content.Child.Background = Brushes.Red;
Pages.Add(page1Content);
SetGrid();
}
public void SetGrid()
{
Grid g;
[...]
if(g.ActualHeight + elementToInsert.ActualHeight < PrintableDinA4Height)
[...]
this.Pages[Pages.Count - 1].Child.Children.Add(g);
}
}
Gruß und Dank
Michael
Und warum nimmst du keinen Report statt alles selbst zu implementieren?
Achso, weil Du früher mal Probleme mit einem Report hattest, willst Du dir jetzt viel mehr Probleme einhandeln, indem Du alles selber machst?
Nee, ist logisch.
Welches Problem hast Du denn gehabt?
Welches Problem siehst Du für diese Rechnung/Lieferschein?
Ich hatte folgendes Problem dass ich z.B wollte dass die Summe der Rechnung am "unteren" Ende der letzten Seite haben will und dass die Rechnung nur ein mal den Adressanten im Header haben sollte. Jedoch war ich nicht imstande das zu bewerkstelligen. Das Problem lag vor allem da mein Auftraggeber die Summe am unteren Ende wollte und nicht dort, wo die Tabelle aufhörte.
btw: ich nahm fyiReporting, aufgrund da es free ist.
Also ich verwende Crystal Reports, welches mit Visual Studio ja mitgeliefert wird.
Dort sind diese Probleme, die du hattest nicht mal ein Ansatz eines Problems.
Aber eine Frage hätte ich schon:
Was haben Rechnungen / Lieferscheine mit einer Tabellenform zu tun? Bis auf den Detailbereich haben die ja genau 0 gemeinsam.
Berichte haben auch den sehr angenehmen Vorteil, dass man Briefköpfe und ähnliche Dinge, die man für solche Dokumente braucht recht einfach machbar sind, oder schon fertig mitgeliefert werden.
Meine Empfehlung: Investiere mal 2 - 4 Stunden und schau dir Crystal an. Danach denkst du niewieder darüber nach ein Grid als Rechnung auszudrucken.
Geht mit dem ReportViewer genauso, nur das man dieses unsäglich Installationsgedöns nicht hat.
Hallo!
Ein - meiner Meinung nach - weiterer Vorteil vom ReportViewer gegenüber den Crystal Reports ist, dass die Report-Datei XML-kompatibel ist.
Crystal Reports haben ein binäres Format, der Viewer bietet aber mehr Möglichkeiten zum Export der Daten.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Hab nur Crystal als Beispiel genommen, weil ich mich mit den anderen einfach nie beschäftigt habe, was an
a) Zeitmangel und
b) historisch bedingt
liegt.
Aber ne Rechnung wird ja wohl mit fast allen Tools dieser Art lösbar sein.
Ich trau mich kein Urteil darüber abzugeben, was besser oder schlechter ist, aber Crystal in ein Setup einzubinden ist mittlerweile auch nicht mehr schwer, da es das mittlerweile glaub ich schon als MSI gibt, also keine komischen merge files, die irgendwo versteckt sind und ähnlich seltsame Dinge mehr.
Gib Bescheid, ob du mit nem Report weitergekommen bist.
Hallo Muro,
ich habe Rechnungen und Reports schon mit Crystal, fyi, Report Services und mit eigenen Routinen erstellt.
Für mein Programm benutze ich eigene Routinen und einen eigenen Formular-Generator, da die zahlreichen Anforderungen an einen variablen Rechnungsdruck nicht mit einem Report-Generator abzudecken sind (meine Meinung).
Crystal würde ich nicht nehmen da es extra installiert werden muss und nicht auf allen Rechnern läuft. Beim Stapeldruck von Rechnungen kann es zu einem Memory-Leak kommen.
Der Report Viewer kann das genauso, es gibt bei gotreportviewer sogar ein Beispiel dazu (Invoice-Maker).
In VS2010 kann man sogar RDL2008 und mit ein paar Tricks RDL2010 benutzen, der Kunde kann sich dann seine Rechnungsformulare selbst anpassen.
Zu Deinem Problem im ersten Beitrag : Mit MeasureString(Text, font).Height kannst Du die Höhe der Ausgabe ermitteln.
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Hallo,
ich schulde euch noch einen Post bezüglich wie ich es gelöst habe.
Ich mir eine eigene Klasse erzeugt die alles managed.
Dazu wird jetzt berechnet ob ein neues Item der Rechnung noch auf der Seite platz hat oder nicht.
Bin auch BerndFfm's Meinung:
da die zahlreichen Anforderungen an einen variablen Rechnungsdruck nicht mit einem Report-Generator abzudecken sind
Anbei ein Screenshot wie es aussieht.
Gruß Michael
Hallo xxMUROxx,
Das sieht doch gut aus. Gibt es auch die Klasse 😉 fg
Sieht Klasse aus !
Geht das auch mehrsprachig ? 😉
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
@Timur, ja gäbe es schon, ist aber ziemlich auf das aktuelle Projekt angepasst. Wenn Interesse bestände wäre ich auch bereit es etwas für die Allgemeinheit umzuändern. (Früher oder später werde ich das sowieso machen)
@BerndFfm, die Tabelle(Header,Spalten),Footer,Header muss man sich selbst definieren. Desswegen ist es zu jeder Sprache kompatibel 😁
Eventuell ist hier auch MigraDoc (in Kombination mit PDFsharp) interessant: PDFsharp/MigraDoc
Gibt sogar ein Beispiel für eine Rechnung: http://www.pdfsharp.net/wiki/Invoice-sample.ashx
Grüße,
Andreas
Hallo xxMUROxx,
saubere Arbeit 👍 , wäre schön wenn du uns eine Klasse zur Verfügung stellen würdest
Desswegen ist es zu jeder Sprache kompatibel 😄
Es handelt sich ja schließlich nicht um Wegweiser 😉
"We better hurry up and start coding, there are going to be a lot of bugs to fix."
saubere Arbeit , wäre schön wenn du uns eine Klasse zur Verfügung stellen würdest
Dankeschön!
Werde ich machen, sobald ich sie etwas angepasst habe. Ich werde mich in den nächsten Wochen diesbezüglich in diesem Thema nochmals melden.
Es handelt sich ja schließlich nicht um Wegweiser
👍
Habe die DLL in das Projekte Forum verschoben..
Siehe: DLL zum Drucken von Rechnungen / Lieferscheinen