特定の印刷ドキュメントの場合PrintSettings
、Duplex
値は に設定される可能性があります (そして設定される可能性があります) Duplex.Default
。
選択したプリンターが両面印刷するかどうかを確認するにはどうすればよいですか?
インストールされているプリンターのサポートされている動作のデフォルト値を見つけるにはどうすればよいですか?
特定の印刷ドキュメントの場合PrintSettings
、Duplex
値は に設定される可能性があります (そして設定される可能性があります) Duplex.Default
。
選択したプリンターが両面印刷するかどうかを確認するにはどうすればよいですか?
インストールされているプリンターのサポートされている動作のデフォルト値を見つけるにはどうすればよいですか?
特定のプリンターのデフォルトに到達できるかどうかはわかりません。ただし、創造力があれば、実際の現在の値を取得できます。ただし、正しい情報を取得したい場合は、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; を使用して追加することを忘れないでください。
ここから、プリンターの設定でどのようなバリエーションが得られるかを絞り込むことができるはずです.
簡潔な答え?あなたはそうしない。さまざまな設定に関係なく、実際のプリンターは常に印刷ジョブを両面印刷するように設定されている場合があります。
ドキュメントをマージする方法は完全にはわかりませんが、単純にページを数え、オプションでドキュメント間に空白ページを挿入して、すべての新しいドキュメントが奇数ページから始まるようにすることができるようです。
これははるかに大きな変更ですが、XPS ワークフローへの移行を受け入れる場合は、PageForceFrontSideというページ レベルのチケット項目があり、ドキュメントが誤ってくっつかないことを保証します。
多分これは問題を研究するのに役立つでしょう http://nicholas.piasecki.name/blog/2008/11/programmatically-selecting-complex-printer-options-in-c-shar/