Wie schafft man das, dass ein Ausdruck auf jeden Drucker gleich aussieht?
-
Hallo!
Ich muss aus meinem Programm heraus drucken.
Das mache ich mit den Befehlen DrawText und StretchBlt (fürs Logo).Nun habe ich zwei Drucker, einen Epson Stylus C80 und einen Ricoh Ap 206.
Auf dem Epson teste ich, weil der eine Vorschau hat (den Drucker hab ich nämlich gar nicht...).
Auf dem sah das gestern auch schon schick aus. Dann habe ich es auf dem Ricoh gedruckt und das war alles total weit auseinander gezogen.Da in der Firma zig verschiedene Drucker existieren, muss ich mir jetzt was einfallen lassen.
Wie kriege ich das nun hin? Habt ihr Ideen oder sogar Lösungen?Meine Idee wäre: Ich male in ein "Bitmap" im Speicher, was so groß ist wie eine Din-A-4 Seite und das stauche ich dann auf den Platz zurecht, den der Drucker bietet.
Dazu müßte ich einen CDC haben, der einer Standardseite entspricht, darauf malen und den dann wie beim Logo rüberkopieren...
Geht das? Wie?Danke!
-
und wenn du einfach den standard Druckdialog (aus Word und Excel bekannt) von Windows aufrufst? Der ist ja eigentlich immer gleich und der Druckertreiber müsste sich dann darum kümmern. Ist bestimmt ein kleines WinApi problem.
-
Was willst du mit dem Druckdialog?
Ich drucke auf dem Standarddrucker. Ich könnte auch den Dialog nutzen, will ich aber nicht - jedenfalls nicht anzeigen.
Schau, so kriege ich meinen CDC:
void CBasisDoc::DruckBeginnen(CDC& dc) { // Druckjob anlegen DOCINFO docInfo; docInfo.cbSize = sizeof(DOCINFO); docInfo.lpszDocName = _T("AD3"); docInfo.lpszOutput = (LPTSTR)NULL; docInfo.fwType = 0; // Druckdialog anlegen aber nicht aufrufen CPrintDialog dlg(FALSE); dlg.GetDefaults(); // DC anlegen dc.Attach(dlg.GetPrinterDC()); // MapMode ändern (Each logical unit is 0.1 millimeter. Positive x is to the right; positive y is up.) dc.SetMapMode(MM_LOMETRIC); // Drucken beginnen dc.StartDoc(&docInfo); dc.StartPage(); }
Es geht mir um das, was auf dem Papier ist.
Der bedruckbare Bereich eines Druckers ist immer unterschiedlich von Modell zu Modell - und das ist mein Problem. Besonders in der Höhe.
-
Ich habe mal ein Bild gemacht: http://www.larsaf-iii.de/forum/druck.jpg
So wie es links ist, soll es etwa aussehen.
So wie es rechts ist, sieht es bei hoher DPI-Zahl aus.
-
Ich glaub man muss bei allem noch die DPI mit einberechnen.
guck doch bei codeproject.com die haben doch ne Printing-Abteilung.
-
Sowas "mal eben" selbst zu machen, ist praktisch unmöglich. Es müssen nicht nur die DPI's in die Berechnung einbezogen werden, sondern auch die Druckbereiche der einzelnen Drucker. DIN-A4 ist nur auf dem Papier gleich DIN-A4.
Da bleibt nur ein Koordinatensystem und die permanente Prüfung, ob die Zeichen überhaupt noch in die Zeile oder auf die Seite reinpassen, insbesondere, wenn mann nicht genau weiß, was im Einzelnen auszugeben ist.
Wir haben sowas mal gemacht (mit 3 Mannjahren Entwicklungsaufwand), da für die Anforderungen kein entsprechendes Tool verfügbar war (1995/96 also etwa zur Kupferzeit).
Drucktools gibts es schon für ein paar Hundert Euro. Die Selbstentwicklung ist praktisch unbezahlbar.
-
lol
-
Also, ich habs jetzt raus.
Ich hole mir für meinen "Normalfont" einmal die Höhe und berechne den Rest damit.
Vorher hatte ich das anders gemacht und das ging schief.@Manfred: Was ist ein Drucktool? Sowas wie Crystal Reports?
Und: Wenige 100 Euro pro WAS? Platz? Firma?
Bei sowas geht mein Chef aber sowieso gnadenlos die Wand hoch und ist auch kaum mit Argumenten zugänglich.
-
Solche Chefs kenne ich, bin selbst so Einer
Schließlich habe ich die 3 Mannjahre finanzieren dürfen.
Crystal-Reports ist ein Report-Generator der Oberliga. Für Datenbank-Reports solls ganz gut sein. Für Reports reicht mir der QReport von BC völlig aus.
List und Label ist eine Alternative. Was geeignet ist, kommt auf die Anwendung und den Compiler an.
Was die Lizenz-Gebühren betrifft, so beziehen die sich auf den Entwickler-Arbeitsplatz. In Deinem Falle reicht also wahrscheinlich eine.
-
Na, du bist wenigstens ehrlich.
Hey, das klingt doch gut mit dem "Entwicklerarbeitsplatz".
Ein paar Suchansätze hast du mir ja schon gegeben - hast du sonst noch Suchempfehlungen?
Anwendung ist ein Programm zur Kundendatenverwaltung und Compiler ist VC6 bzw. VC2003. (Ich arbeite unter VC6 und zum Ausliefern wird mit VC2003 kompiliert.)Auf mich kommt nämlich noch deutlich mehr Druckkram zu, und davor graut mir auch...
Am besten wäre halt etwas, was man verändern kann ("Den Kundennamen etwas weiter nach oben und grün bitte..."), ohne die Exe anzufassen.Was ist der Unterschied zwischen einem Datenbankreport und einem Report?
Ich habe eine Datenbank im Hintergrund, falls das schon den Unterschied macht...
-
Wie schon gesagt, haben wir unser eigenes Drucktool, was aber für Datenbankreports (gibt keinen Unterschied zu Reports, so wie ich es gemeint habe) eher ungeeignet ist.
Wenn der Ausdruck ggf. ohne Änderung der EXE angepaßt werden soll, wurde mir immer List und Label nahe gelegt. Da kann der Ausdruck auch vom Anwender angepaßt werden. Siehe unter http://www.combit.net/
Vielleicht weiß hier noch jemand eine Alternative?
-
Danke!
Von List und Label hatte ich schon mal gelesen und ziehe mir gerade die Demo runter.