Drucker druckt zu klein
-
Hallo,
Ich habe folgendes Problem:
Ich versuche einen Text zu drucken, was auch bisher wunderbar funktioniert hat.
Aber auf manchen Druckern ist der Text so klein dass man ihn nicht mehr lesen kann. Kann mir jemand sagen was man dagegen tun kann.Ich hab mal vermutet das der DEVMODE eventuell durch den DruckDialog verändert wird und hab die einzelnen Variablen auch mal verglichen jedoch ohne unterschiede.
Hier der verwendete Quellcode
CPrintDialog dlgPrint(FALSE, PD_ALLPAGES, this); CPrintInfo pInfo; if (dlgPrint.DoModal() == IDCANCEL) { return; } /*if(!dlgPrint.GetDefaults()) AfxMessageBox(_T("Bitte richten Sie einen Standarddrucker ein"));*/ CDC dcPrint; dcPrint.Attach(dlgPrint.GetPrinterDC()); // Quer-Format /*DEVMODE* myMode = dlgPrint.GetDevMode(); myMode->dmOrientation = DMORIENT_LANDSCAPE; myMode->dmColor = DMCOLOR_COLOR; dcPrint.ResetDC(myMode);*/ DOCINFO myPrintJob; myPrintJob.cbSize = sizeof(myPrintJob); myPrintJob.lpszDocName = _T("Name"); myPrintJob.lpszOutput = NULL; myPrintJob.lpszDatatype = NULL; myPrintJob.fwType = NULL; int x = GetDeviceCaps(dlgPrint.GetPrinterDC(), PHYSICALOFFSETX); int y = GetDeviceCaps(dlgPrint.GetPrinterDC(), PHYSICALOFFSETY); if (dcPrint.StartDoc(&myPrintJob) >= 0) { dcPrint.StartPage(); CString str = _T("Test Test Test"); for (int i = 0; i < 10; i++) { dcPrint.DrawText((250 - x, 250 - y + i * 100, str, str.GetLength()); } dcPrint.EndPage(); dcPrint.EndDoc(); }Vielen Dank
gruß Raffzen
-
Klingt nach Problemen mit dem Abbildungsmodus? Das Drucken erfolgt doch auflösungsabhängig. So ist das ja zumindest bei allen Zeichenoperationen. Weiß nur nicht ob das auch auf den Text zutrifft. Es könnte ja sein das ein Drucker mit hoher Auflösung den Text kleiner ausgibt als ein Drucker, dessen Auflösung nicht so hoch ist. Kannst Du da was feststellen?
-
m_pDC->SetMapMode (MM_TEXT);Mit Fonts arbeiten??
CFont myFont; LOGFONT lf; // lf füllen myFont.CreateFontIndirect (&lf); pDC->SelectObject (&myFont);und DrawText mit den richtigen Parametern aufrufen, oder TextOut mit deinen Parametern aufrufen

-
Danke für den Hinweis
Das mit dem Font setzen war schon der richtige WEg. Aber bei Druckern mit verschiedener DPI wird das ganze wieder etwas verzerrt gedruckt.
Da das Positionieren über Pixel beim TextOut läudt sind 100 Pixel bei 300 DPi mehr als bei 600 DPI.
Aber so funktioniert es wunder bar
Auszug aus meiner klasse:
CFont cFont; int nDPI = m_pDC->GetDeviceCaps(LOGPIXELSY); m_nPixelHeight = MulDiv(12, m_pDC->GetDeviceCaps(LOGPIXELSY), 72); m_uiPixelDiffLine = m_nPixelHeight / 10; cFont.CreateFont(-m_nPixelHeight, 0, 0, 0, 400, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, PROOF_QUALITY, DEFAULT_PITCH | FF_DONTCARE, strFont); m_pDC->SelectObject(&cFont); m_pDC->SetMapMode(MM_TEXT); // Pixel berechnen 1Inch = 25.4 Millimeter m_xPos = GetDeviceCaps(dlgPrint.GetPrinterDC(), PHYSICALOFFSETX); m_yPos = GetDeviceCaps(dlgPrint.GetPrinterDC(), PHYSICALOFFSETY); m_xOffset = fn_GetPixel(nDPI, uiXOffset); m_yOffset = fn_GetPixel(nDPI, uiYOffset);So werd ich mal um die Bitmaps kümmern
Vielen Dank nochmal
Raffzen
-
Hab zwar noch nicht so viel mit Druckern gemacht, aber wäre es vielleicht auch denkbar, einen frei skalierbaren Abbildungsmodus zu nehmen und die Größe des Druckbereiches vom Drucker abfragen. Daraus lässt sich doch ein Skalierfaktor errechnen, der dann wierderum beim Create() des Fonts die Schriftgröße beinflusst.
Im Grunde machst Du ja auch nichts anderes. Allerdings lässt Du den Abbildungsmodus auf MM_TEXT. Solltest Du andere GDI-Objekte ausgeben müssen wirst Du wohl nicht drum rum kommen das so zu machen. Bei mir funktionierts zumindest für den Screen und dürfte dann auch für den Drucker gehen.
-
Also bisher funktionierts tadellos.
Ich hab jetzt ein neues Problem:
Wenn ich im Text ein Tab (\t) hab dann werden für die Tabs nur so komische Rechtecke gedruckt. Was kann man dagegen tun??Gruß Raffzen
-
_Raffzen schrieb:
Also bisher funktionierts tadellos.
Ich hab jetzt ein neues Problem:
Wenn ich im Text ein Tab (\t) hab dann werden für die Tabs nur so komische Rechtecke gedruckt. Was kann man dagegen tun??Gruß Raffzen
Druckst Du mit Unicode-Strings?
-
Ja