2

特定の印刷ドキュメントの場合PrintSettingsDuplex値は に設定される可能性があります (そして設定される可能性があります) Duplex.Default

選択したプリンターが両面印刷するかどうかを確認するにはどうすればよいですか?

インストールされているプリンターのサポートされている動作のデフォルト値を見つけるにはどうすればよいですか?

4

3 に答える 3

3

特定のプリンターのデフォルトに到達できるかどうかはわかりません。ただし、創造力があれば、実際の現在の値を取得できます。ただし、正しい情報を取得したい場合は、DEVMODE 構造体に到達する必要があります。これは単純な操作ではなく、ファンシー パンツの Win32 fu が必要になります。これはいくつかの情報源から改作されていますが、私の(確かにむらのある)テストで機能しました。

[DllImport("kernel32.dll")]
static extern bool GlobalFree(IntPtr hMem);

[DllImport("kernel32.dll")]
public static extern IntPtr GlobalLock(IntPtr handle);

[DllImport("kernel32.dll")]
public static extern IntPtr GlobalUnlock(IntPtr handle);

private static short IsPrinterDuplex(string PrinterName)
{
    IntPtr hDevMode;                        // handle to the DEVMODE
    IntPtr pDevMode;                        // pointer to the DEVMODE
    DEVMODE devMode;                        // the actual DEVMODE structure

    PrintDocument pd = new PrintDocument();
    StandardPrintController controller = new StandardPrintController();
    pd.PrintController = controller;

    pd.PrinterSettings.PrinterName = PrinterName;

    // Get a handle to a DEVMODE for the default printer settings
    hDevMode = pd.PrinterSettings.GetHdevmode();

    // Obtain a lock on the handle and get an actual pointer so Windows won't
    // move it around while we're futzing with it
    pDevMode = GlobalLock(hDevMode);

    // Marshal the memory at that pointer into our P/Invoke version of DEVMODE
    devMode = (DEVMODE)Marshal.PtrToStructure(pDevMode, typeof(DEVMODE));

    short duplex = devMode.dmDuplex;

    // Unlock the handle, we're done futzing around with memory
    GlobalUnlock(hDevMode);

    // And to boot, we don't need that DEVMODE anymore, either
    GlobalFree(hDevMode);

    return duplex;
}

pinvoke.netのDEVMODE 構造定義を使用しました。pinvoke.net で定義された文字セットは、B0biによる元のリンクのコメントに従って微調整が必​​要になる場合があることに注意してください(つまり、DEVMODE の StructLayoutAttriute で CharSet = CharSet.Unicode を設定します)。DM enumも必要です。System.Runtime.InteropServices; を使用して追加することを忘れないでください。

ここから、プリンターの設定でどのようなバリエーションが得られるかを絞り込むことができるはずです.

于 2012-04-09T22:01:31.873 に答える
1

簡潔な答え?あなたはそうしない。さまざまな設定に関係なく、実際のプリンターは常に印刷ジョブを両面印刷するように設定されている場合があります。

ドキュメントをマージする方法は完全にはわかりませんが、単純にページを数え、オプションでドキュメント間に空白ページを挿入して、すべての新しいドキュメントが奇数ページから始まるようにすることができるようです。

これははるかに大きな変更ですが、XPS ワークフローへの移行を受け入れる場合は、PageForceFrontSideというページ レベルのチケット項目があり、ドキュメントが誤ってくっつかないことを保証します。

于 2012-04-10T17:47:45.267 に答える
0

多分これは問題を研究するのに役立つでしょう http://nicholas.piasecki.name/blog/2008/11/programmatically-selecting-complex-printer-options-in-c-shar/

于 2012-04-05T11:01:42.663 に答える