LlStgSysDrawPage falscher Drucker Schacht

Hallo !

Ich verwende LL14 und C# (.NET 2.0). Nun möchte ich eine große .ll Datei drucken. Gewisse Seiten dieser
LL Datei sollen auf einen anderen Druckerschacht gedruckt werden als die anderen.
Dazu habe ich in “UserValue” der PreviewPage einen String reingeschrieben, sodass ich weiss welche Seite wohin gedruckt werden soll.

Nun erzeuge ich ein PrintDocument und starte so den Ausdruck der .LL Dateien:

PrintDocument pd = new PrintDocument();
pd.PrinterSettings = m_psLetter;
pd.DocumentName = strPrintJobName;
pd.QueryPageSettings += OnQueryPageSettings;
pd.PrintPage += OnPrintPage;
pd.Print();

Meine OnQueryPageSettings sieht so aus:

String strUserValue = ((PreviewPage)m_pf[m_iPrintPage-1]).UserValue;
switch(strUserValue)
{
case “Anschreiben”:
qpsea.PageSettings = new PageSettings(m_psLetter);
break;

case "Zertifikat":
	qpsea.PageSettings = new PageSettings(m_psCertficate);
	break;

default:
	qpsea.PageSettings = new PageSettings(m_psReport);
	break;

}

die Variablen m_psLetter, Report und Certificate beinhalten die Druckeinstellungen für diese Seiten.
Es sind die Schächte in diesen Variablen korrekt eingestellt.
Meine OnPrintPage sieht nun so aus:

void OnPrintPage(Object obj, PrintPageEventArgs ppea)
{
RECT r = new RECT();
r.left = 0;
r.top = 0;

Single sWidth  = (ppea.Graphics.VisibleClipBounds.Width)  * ppea.Graphics.DpiX/100;
Single sHeight = (ppea.Graphics.VisibleClipBounds.Height) * ppea.Graphics.DpiY/100;

r.right  = Convert.ToInt32(sWidth);
r.bottom = Convert.ToInt32(sHeight);

m_ll.Core.LlStgsysDrawPage(m_iPreviewFile, ppea.Graphics.GetHdc(), 0, false, r, m_iPrintPage, false);

ppea.HasMorePages = m_iPrintPage < m_pf.Count;
m_iPrintPage++;

}

Nun wird aber immer alles auf die Druckeinstellungen von m_psLetter gedruckt, also alles auf diesen
Schacht. OnQueryPageSettings wird korrekt aufgerufen und es werden die Schächte auch umgesetzt, aber
beim Ausdruck wird immer auf den Schacht von m_psLetter gedruckt :frowning:

Hat jemand eine Idee für eine Lösung?
Oder sonst einen Lösungsweg für mich? Bin echt am verzweifeln, kämpfe schon Tage lang rum jettz :frowning:

Vielen Dank für jede Hilfe
Gruß

Thomas

Hi!

Hat niemand eine Lösung für mich parat?
Vielleicht der combit Support selber?

Es drängt jetzt dann ein bischen weil wir das Programm bald einsetzen müssen.

Grüße

Klocker Thomas

Hallo !

Ich verwende LL14 und C# (.NET 2.0). Nun möchte ich eine große .ll Datei drucken. Gewisse Seiten dieser
LL Datei sollen auf einen anderen Druckerschacht gedruckt werden als die anderen.
Dazu habe ich in “UserValue” der PreviewPage einen String reingeschrieben, sodass ich weiss welche Seite wohin gedruckt werden soll.

Nun erzeuge ich ein PrintDocument und starte so den Ausdruck der .LL Dateien:

PrintDocument pd = new PrintDocument();
pd.PrinterSettings = m_psLetter;
pd.DocumentName = strPrintJobName;
pd.QueryPageSettings += OnQueryPageSettings;
pd.PrintPage += OnPrintPage;
pd.Print();

Meine OnQueryPageSettings sieht so aus:

String strUserValue = ((PreviewPage)m_pf[m_iPrintPage-1]).UserValue;
switch(strUserValue)
{
case “Anschreiben”:
qpsea.PageSettings = new PageSettings(m_psLetter);
break;

case “Zertifikat”:
qpsea.PageSettings = new PageSettings(m_psCertficate);
break;

default:
qpsea.PageSettings = new PageSettings(m_psReport);
break;
}

die Variablen m_psLetter, Report und Certificate beinhalten die Druckeinstellungen für diese Seiten.
Es sind die Schächte in diesen Variablen korrekt eingestellt.
Meine OnPrintPage sieht nun so aus:

void OnPrintPage(Object obj, PrintPageEventArgs ppea)
{
RECT r = new RECT();
r.left = 0;
r.top = 0;

Single sWidth = (ppea.Graphics.VisibleClipBounds.Width) * ppea.Graphics.DpiX/100;
Single sHeight = (ppea.Graphics.VisibleClipBounds.Height) * ppea.Graphics.DpiY/100;

r.right = Convert.ToInt32(sWidth);
r.bottom = Convert.ToInt32(sHeight);

m_ll.Core.LlStgsysDrawPage(m_iPreviewFile, ppea.Graphics.GetHdc(), 0, false, r, m_iPrintPage, false);

ppea.HasMorePages = m_iPrintPage < m_pf.Count;
m_iPrintPage++;
}

Nun wird aber immer alles auf die Druckeinstellungen von m_psLetter gedruckt, also alles auf diesen
Schacht. OnQueryPageSettings wird korrekt aufgerufen und es werden die Schächte auch umgesetzt, aber
beim Ausdruck wird immer auf den Schacht von m_psLetter gedruckt :frowning:

Hat jemand eine Idee für eine Lösung?
Oder sonst einen Lösungsweg für mich? Bin echt am verzweifeln, kämpfe schon Tage lang rum jettz :frowning:

Vielen Dank für jede Hilfe
Gruß

Thomas

Hallo Thomas!

Ich hatte genau das gleiche Problem. Ich habe diesen Ansatz auch auf undenklich viele Varianten durchprobiert bis ich die Nase voll hatte und mich an Combit gewendet habe.

Die Lösung war mal wieder → Combit hat mir etwas zugeschickt. Diesmal keine DLLs sonder eine komplett Code-Klasse die ein erweitertes PrintDocument enthält. Ohne diese neue Klasse lässt sich der Druck auf verschiedene Schächte anscheinend nicht realisieren.

Falls du weitere Fragen hast, melde dich doch mal bei mir unter cg@2rsoftware.de

Lieben Gruß,
Colin Groebel

Hi!

Hat niemand eine Lösung für mich parat?
Vielleicht der combit Support selber?

Es drängt jetzt dann ein bischen weil wir das Programm bald einsetzen müssen.

Grüße

Klocker Thomas

Hallo !

Ich verwende LL14 und C# (.NET 2.0). Nun möchte ich eine große .ll Datei drucken. Gewisse Seiten dieser
LL Datei sollen auf einen anderen Druckerschacht gedruckt werden als die anderen.
Dazu habe ich in “UserValue” der PreviewPage einen String reingeschrieben, sodass ich weiss welche Seite wohin gedruckt werden soll.

Nun erzeuge ich ein PrintDocument und starte so den Ausdruck der .LL Dateien:

PrintDocument pd = new PrintDocument();
pd.PrinterSettings = m_psLetter;
pd.DocumentName = strPrintJobName;
pd.QueryPageSettings += OnQueryPageSettings;
pd.PrintPage += OnPrintPage;
pd.Print();

Meine OnQueryPageSettings sieht so aus:

String strUserValue = ((PreviewPage)m_pf[m_iPrintPage-1]).UserValue;
switch(strUserValue)
{
case “Anschreiben”:
qpsea.PageSettings = new PageSettings(m_psLetter);
break;

case "Zertifikat":
  qpsea.PageSettings = new PageSettings(m_psCertficate);
  break;

default:
  qpsea.PageSettings = new PageSettings(m_psReport);
  break;

}

die Variablen m_psLetter, Report und Certificate beinhalten die Druckeinstellungen für diese Seiten.
Es sind die Schächte in diesen Variablen korrekt eingestellt.
Meine OnPrintPage sieht nun so aus:

void OnPrintPage(Object obj, PrintPageEventArgs ppea)
{
RECT r = new RECT();
r.left = 0;
r.top = 0;

Single sWidth  = (ppea.Graphics.VisibleClipBounds.Width)  * ppea.Graphics.DpiX/100;
Single sHeight = (ppea.Graphics.VisibleClipBounds.Height) * ppea.Graphics.DpiY/100;

r.right  = Convert.ToInt32(sWidth);
r.bottom = Convert.ToInt32(sHeight);

m_ll.Core.LlStgsysDrawPage(m_iPreviewFile, ppea.Graphics.GetHdc(), 0, false, r, m_iPrintPage, false);

ppea.HasMorePages = m_iPrintPage < m_pf.Count;
m_iPrintPage++;

}

Nun wird aber immer alles auf die Druckeinstellungen von m_psLetter gedruckt, also alles auf diesen
Schacht. OnQueryPageSettings wird korrekt aufgerufen und es werden die Schächte auch umgesetzt, aber
beim Ausdruck wird immer auf den Schacht von m_psLetter gedruckt :frowning:

Hat jemand eine Idee für eine Lösung?
Oder sonst einen Lösungsweg für mich? Bin echt am verzweifeln, kämpfe schon Tage lang rum jettz :frowning:

Vielen Dank für jede Hilfe
Gruß

Thomas