Laden...

Druckprobleme .Net: zweite Seite drucken / fehlenden Zeilenumbrüche

Erstellt von subsauber vor 9 Jahren Letzter Beitrag vor 9 Jahren 3.170 Views
Thema geschlossen
S
subsauber Themenstarter:in
11 Beiträge seit 2014
vor 9 Jahren
Druckprobleme .Net: zweite Seite drucken / fehlenden Zeilenumbrüche

Hallo,

Momentan beschäftige ich mich mit dem Drucken in C#. Allerdings musste ich schon feststellen das ich dabei auf das ein oder andere Problem stoße...

Eines meiner vielen Probleme ist das nachdem ich festgestellt habe das ich eine 2. Seite brauche, da beispielsweise die Erläuterungen nicht mehr ganz auf die Seite passen, ich nicht so einfach eine 2. Bekomme in der ich einfach weiter schreiben kann... Habe mich schon etwas belesen und bin dabei auf Hasmorepages gestoßen, allerdings ist mir nicht so ganz klar wie ich das Benutze.
Ich möchte einfach nur die komplette Erläuterung auf eine 2. Schreiben muss ich also einen Zähler haben der prüft wie viele Seiten ich brauche und dann im vorhinein bestimmen was auf die 1. und auf die 2. Seite muss über eine If Anweisung ?! Wenn ich das richtig verstanden habe ruft die nämlich einfach die das Print event ein Zweites mal auf, aber das kann doch nicht richtig sein das man im vorhinein über If Anweisungen bestimmen muss was auf die 1. und 2. Seite muss oder?

Mein 2. Problem ist das ich wenn ich ganze Texte auf das Druckdokument schreiben will dieser einfach keine Zeilenumbrüche macht und einfach über die Seite hinausschreibt statt einen Zeilenumbruch zu erzeugen. Wrap ist true aber solange ich nicht explizit auf "Enter" drücke macht er mir einfach keine Zeilenumbrüche. Meine frage ist jetzt wie bekomme ich das hin den Text aus einer MultilineTextBox ohne Formatierungsverlust aufs Druckdokument bekomme.

Wäre super wenn ihr mir dabei helfen könntet. 😃

S
93 Beiträge seit 2008
vor 9 Jahren

Du hast das schon richtig gelesen.
Du mußt bei Verwendung von den Bordmitteln von C# tatsächlich alles selbst berechnen und positionieren. Auch Zeilenwechsel.

siehe auch:
suche kostenlose report engine für c#

Es gibt einige kostenpflichtige Module die solche Arbeiten für Dich erledigen wie z.B.
crystal Reports
List&Label
DevExpress

Einiges Interessantes findes Du auch unter
http://www.codeproject.com/KB/printing/

Wenn Du vorwiegend mit Text arbeitest wäre evtl. auch das interessant:
http://www.textcontrol.com/en_US/
Das gibts als Freeware in einer Lite-Version, und auch als Kaufversion.

S
subsauber Themenstarter:in
11 Beiträge seit 2014
vor 9 Jahren

Ja aber wie bekomme ich beispielsweise das Zeilenweise auslesen hin ?
hab schon versucht das mit "name der textbox".Lines hinzubekommen doch das klappt leider nicht..
in meiner Textbox sind es zwar 2 Zeilen aber in meinem Array bleibt es eine. Das funktioniert eben nur wenn ich explizit die "Enter" taste gedrückt habe. Aber schreibe ich als Fließtext ohne "Enter" zu drücken, so wird dies auch nur als eine Zeile gewertet obwohl es in meiner Textbox schon 2 sind.

771 Beiträge seit 2009
vor 9 Jahren

Du brauchst nicht selber den Umbruch vorzunehmen. Mit Graphics.DrawString kannst du bei Übergabe des Rectangle-Parameters den Bereich eingrenzen und es wird automatisch ein Soft-Linebreak vorgenommen.

S
93 Beiträge seit 2008
vor 9 Jahren

Au mußt natürlich vorher die Anzahl der Zeilen ermitteln, da Du ja die Höhe des Rectangles ermitteln mußt.

D.h. Du mußt einfach für jede Zeile im Array berechnen, auf wieviele Zeilen sie bei einer vorgegebenen Textbreite umbrechen würde. Ist zwar ein bisschen aufwändig, aber geht.

z.B. vom String solange von rechts her Wörter entfernen, bis die ermittelte Textbreite kleiner oder gleich der vorgegebenen Breite ist.
Dann dort einen Zeilenumbruch einbauen.
Den restlichen String immer weiter genauso behandeln, bis nichts mehr übrig ist.

Graphics.MeasureString-Methode (String, Font, Int32)

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo san-software,

ich halte das nicht für nötig. So wie ich das sehe, kann man MeasureString oder MeasureText benutzen, um die Höhe eines Rectangles bei automatischem Umbruch und angegebener Bereite zu ermitteln. Ich halte ein manuelles Einfügen von Umbrüchen für unnötig.

herbivore

S
subsauber Themenstarter:in
11 Beiträge seit 2014
vor 9 Jahren

Danke Leute, habt mir richtig weitergeholfen 😃
Der Tipp mit der Übergabe des Rectangle-Parameters um den Bereich einzugrenzen war genau das was ich brauchte. Wenn ich es jetzt noch hinbekomme mit Graphics.MeasureString-Methode zu erfassen wie viel platz ich dafür brauche, dann ist mein Problem mit dem Drucken so gut wie gelöst 😃

Dann muss ich es nur noch hinbekommen, das falls ich eine zweite Seite brauche (was ich mit der MeasureString-Methode herausfinden will), den Text auf einer Zweiten Seite zu schreiben. Habt ihr dafür auch irgendwelche Tipps ? Wäre echt super 😃

S
93 Beiträge seit 2008
vor 9 Jahren

@Herbivore,
stimmt, du hast recht. - wieder was dazugelernt

F
10.010 Beiträge seit 2004
vor 9 Jahren

@subsauber:
Ja, [Hinweis] Wie poste ich richtig? 1.1 , das hatten wir nhier nämlich schon zig mal.

Aber wenn man eh keine lust hat sich wirklich mit den Grundlagen zu beschäftigen, Visual Basic Power Packs Printer Compatibility Library

Thema geschlossen