Forums Neueste Beiträge
 

Druckerschächte mit PrintDocument funktionieren nicht

04/08/2009 - 11:18 von Klocker Thomas | Report spam
Hallo C#-Gurus!

Ich verwende VS 2005 mit .NET Framework 2.0
Mit der "PrintDocument" Klasse möchte ich ein paar Seiten ausdrucken. Zuvor
lass ich den User über 2 Druckdialoge verschiedene Einstellungen tàtigen,
welche ich dann in 2 PrinterSettings Variablen abspeichere.
Manche Seiten sollen auf die erste PrinterSettings gedruckt werden, manche
auf die 2te. Es sollen nàmlich verschiedene Schàchte angesprochen werden.

Das ganze sieht so aus:

//initialize printdocument
PrintDocument pd = new PrintDocument();
pd.PrintPage += OnPrintPage;
pd.QueryPageSettings += OnQueryPageSettings;
pd.PrinterSettings.PrinterName = psLetter.PrinterName;
pd.DocumentName = strPrintJobName;
pd.Print();

//query page settings
void OnQueryPageSettings(Object obj, QueryPageSettingsEventArgs qpsea)
{
//ermittlung welche pagesettings gesetzt werden sollen
if(bUseLetterSettings)
apsea.PageSettings = new PageSettings(m_psLetter);
else
qpsea.PageSettings = new PageSettings(m_psReport);
}

//print
void OnPrintPage(Object obj, PrintPageEventArgs ppea)
{
Metafile page = GetMyMetaFile(m_iPrintPage-1);
ppea.Graphics.DrawImage(page, ppea.Graphics.VisibleClipBounds);

ppea.HasMorePages = (m_iPrintPage+=1) < iMetaFileCount;
}

Es wird an sich alles korrekt ausgedruckt, nur wird immer auf die
PrinterSettings von psLetter ausgedruckt (also immer auf den dort
eingestellten Schacht).
Laut Debugger wird QueryPageSettings aber korrekt ausgeführt und es wird ab
der 2ten Seite psReport gesetzt in OnQueryPageSettings. Trotzdem wird aber
die Einstellung von psLetter verwendet.

Gibt es für dieses Problem eine Lösung?
Leider handelt es sich um ein sehr dringendes Problem.
Bin um jede Antwort sehr dankbar!

Schöne Grüße

Thomas
 

Lesen sie die antworten

#1 Frank Dzaebel
06/08/2009 - 08:24 | Warnen spam
Hallo Thomas,

nur ganz oberflàchlich informiert.
Papierschàchte interpretieren die Drucker-Hersteller
oft unterschiedlich. Da gibt es in der Spec wohl
Versàumnisse. Hàufig wird für [1] der manuelle
Einzug benutzt. Andere fangen beim ersten festen Tray an.
Dazu kommt das der DevMode des Users normal den
Standard DevMode überschreibt. Das Letter Problem
ist auch eher eines des Drucker-Treibers. Die
Hersteller haben hier z.T. etwas Probleme und man
sollte versuchen, sich den aktuellsten Treiber für
den Drucker zu installieren und im Standard eben zu
korrigieren (je nach Architektur -> PrintServer o.à.).
Die Unversaltreiber der grossen Hersteller werden da
langsam besser.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen