3

問題
1.お客様は、両面印刷用に構成されたネットワークプリンターを使用しています(これは変更できません)。
2.このプリンタにA4シートのラベルを印刷する必要がありますが、ラベルがローラーを回って汚れるため、両面印刷モードにしないでください。
3.ラベルを印刷するとき、印刷ジョブはまだ両面印刷モードです(ファイルに印刷してPCL出力を調べることで確認できます)。

この線

e.PageSettings.PrinterSettings.Duplex = Duplex.Simplex;  

効果はありません。

ページをシンプレックスで強制的に印刷するにはどうすればよいですか?

コード
以下に示すように、.Net PrintDocument/PrintControllerクラスを使用してA4プリンターに印刷しています。このコードは、簡単な例で問題を再現できるテストアプリからのものです。

次のようなカスタムPrintDocumentクラスがあり
ます。a)OnQueryPageSettingsで印刷設定を設定する

protected override void OnQueryPageSettings(QueryPageSettingsEventArgs e)
{
    // This setting has no effect
    e.PageSettings.PrinterSettings.Duplex = Duplex.Simplex;
}

b)OnPrintPageメソッドでページコンテンツを生成します。

protected override void OnPrintPage(PrintPageEventArgs e)
{
    Graphics g = e.Graphics;

    int fs = 12;
    FontStyle style = FontStyle.Regular;
    Font baseFont = new Font("Arial", fs, style);

    PointF pos = new PointF(10, 10);

    g.DrawString("This is a test page", baseFont, Brushes.Black, pos);

    e.HasMorePages = false;
}

これを開始するには、PrintDocumentのインスタンスを作成し、それにStandardPrintControllerを割り当てて、Print()を呼び出します。

void DoPrint()
{
    MyPrintDocument mydoc = new MyPrintDocument();

    PrinterSettings ps = ShowPrintDialog();
    if (ps != null)
    {
        mydoc.PrinterSettings = ps;
        StandardPrintController cont = new StandardPrintController();
        mydoc.PrintController = cont;
        mydoc.Print();
    }
}

ありがとう、アダム

4

1 に答える 1

2

OnQueryPageSettingsでPrinterSettings.Duplexプロパティを設定しても効果はありません。Print()を呼び出す前に、このプロパティを設定する必要があります。(今、私はそれについて考えるのは明らかなようです!)

これは機能します:

void DoPrint()
{
    MyPrintDocument mydoc = new MyPrintDocument();

    PrinterSettings ps = ShowPrintDialog();
    if (ps != null)
    {
        ps.Duplex = Duplex.Simplex; // This works

        mydoc.PrinterSettings = ps;
        StandardPrintController cont = new StandardPrintController();
        mydoc.PrintController = cont;
        mydoc.Print();
    }
}
于 2012-04-13T14:07:06.753 に答える