Y
Wenn wirklich Rahmen, Überschriften etc. erforderlich sind, würde ich direkt selber drucken. xls und doc würde ich nicht selber erzeugen wollen, HTML ist zwar super geeignet für die Ausgabe auf Bildschirmen, weniger aber für die Druckerzeugung. RTF wäre zwar okay, aber in diesem Fall, wenn ohnehin nichts auf dem Bildschirm ausgegeben wird, ist der direkte Druck mindestens genauso einfach.
Das komplette WYSIWYG-Gedöns fällt unter den Tisch, die gewählten Standardeinstellungen der Drucker müssen ausreichend sein und mit xps oder PDF-Druckern (in Win 10 dabei) kann „kostenlos” herumprobiert werden.
Die Druckausgabe ist in diesem Fall auch besonders einfach, da man sich weder in spezielle Mappingmodi noch in Koordinatensysteme und Viewports der GDI einarbeiten muss.
Natürlich ist es so plattformabhängig, durch die Level 4 Druckerinfo werden auch nur Windowsversionen der Nt-Reihe unterstützt (Win 1.0 bis Me also nicht). Allerdings könnte das auch noch leicht geändert werden.
HDC GetPrinterDC(int opt);
bool StartDocument(HDC printerDC, const DOCINFOA& di);
bool EndDocument(HDC printerDC);
bool PrintPage(HDC printerDC, int frameNumX, int frameNumY, int blockX, int blockY /*, const DATA& pageData*/);
// DrawPage wird jeweils für eine Seite aufgerufen, dies ist die einzige Funktion, die angepasst werden muss.
void DrawPage(HDC printerDC, int pgeWidth, int pgeHeight, int frameNumX, int frameNumY, int blockNumX, int blockNumY/*, const DATA& pageData*/);
int main()
{
DOCINFOA di = {sizeof (DOCINFOA), "Druck"};
//GetPrinterDC : 1 Standarddrucker, 2 erster Drucker, 3 Auswahl
HDC printerDC = GetPrinterDC(3);
if(printerDC && StartDocument(printerDC, di))
{
// pageData müsste für jede Seite generiert werden (jeweils frameNumX x frameNumY Datenfelder)
// DATA pageData;
// ..
// Nacheinander PrintPage aufrufen
PrintPage(printerDC, 1, 1, 5, 5 /*, pageData*/);
PrintPage(printerDC, 2, 4, 3, 3 /*, pageData*/);
PrintPage(printerDC, 3, 3, 4, 4 /*, pageData*/);
PrintPage(printerDC, 4, 4, 3, 3 /*, pageData*/);
PrintPage(printerDC, 4, 6, 5, 4 /*, pageData*/);
// ...
EndDocument(printerDC);
}
DeleteDC(printerDC);
}
Der Code ist hier zu finden.
Die Druckausgabe sieht zumindest nie schlecht aus, wenn man nicht auf Pixelbasis arbeitet, sondern eben nur mit der Breite und der Höhe des Ausgabegeräts. Dann ist es auch egal, ob auf DIN A2 horizontal oder auf einer Postkarte vertikal gedruckt wird.
Außerdem kann die Anzahl der Spiele pro Seite und damit die Größe (was für den typischen Bingospieler wohl auch wichtig ist) direkt angegeben werden (okay, das ginge mit Dateien natürlich auch).
Siehe gifs für horizontale Ausgabe und vertikale Ausgabe (automatisch sehr verkleinert miterzeugt -> schlechte Qualität).