特定の印刷ドキュメントのPrintSettings
の場合、Duplex
の値はDuplex.Default
に設定されている可能性があります。プリンタのデフォルトの両面印刷オプションを確認
選択したプリンタがデュプレックスで印刷されるかどうかを確認するにはどうすればよいですか?
インストールされているプリンタのサポートされている動作のデフォルト値を確認するにはどうすればよいですか?
特定の印刷ドキュメントのPrintSettings
の場合、Duplex
の値はDuplex.Default
に設定されている可能性があります。プリンタのデフォルトの両面印刷オプションを確認
選択したプリンタがデュプレックスで印刷されるかどうかを確認するにはどうすればよいですか?
インストールされているプリンタのサポートされている動作のデフォルト値を確認するにはどうすればよいですか?
多分これは私はあなたが与えられたプリンタのデフォルトで得ることができるかわからない問題 http://nicholas.piasecki.name/blog/2008/11/programmatically-selecting-complex-printer-options-in-c-shar/
に勉強するのに役立ちます。あなたが創造的な場合は、実際の現在の値を得ることができます。あなたが正しい情報を持っていることを確かめたいなら、あなたは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 structure定義を使用しました。 pinvoke.netで定義された文字セットは、B0biによるoriginal linkのコメントに従って(つまり、DEVMODEのStructLayoutAttriuteでCharSet = CharSet.Unicodeを設定する)いくつかの調整が必要な場合があることに注意してください。 DM enumも必要です。そして、System.Runtime.InteropServicesを使用して追加することを忘れないでください。
プリンタの設定でどのようなパターンが表示されているのかを絞り込むことができます。
短答?あなたはそうしない。さまざまな設定が何を言っているかにかかわらず、実際のプリンタは常に印刷ジョブを二重化するように設定されている場合があります。
ドキュメントをまとめてどのようにマージするのかよく分かりませんが、単にページをカウントしてドキュメント間に空白のページを挿入すると、新しいドキュメントがすべて奇数ページから始まるように聞こえます。
これははるかに大きな変更ですが、XPSワークフローへの移行が可能な場合は、ドキュメントが誤って一緒にスタックされないことを保証するページレベルのチケット項目PageForceFrontSideがあります。
私はそれがなぜ重要で、失敗するのか想像しようとしています。 –
@Damien_The_Unbeliever - 一連のドキュメントを1つのドキュメントにまとめて1つの印刷ジョブで印刷しようとしています。しかし、各文書が(別の文書の裏側ではなく)新しいページ上で開始するように文書を適切に分離できるように、その印刷ジョブで起こる二重化オプションに注意する必要があります。 – Reddog
あなたは各文書が2で割り切れることを保証しますか?その奇数のページが空白のページを追加する場合。それで、別のドキュメントページの裏には決して印刷されません。 –