2012-04-04 11 views
2

特定の印刷ドキュメントのPrintSettingsの場合、Duplexの値はDuplex.Defaultに設定されている可能性があります。プリンタのデフォルトの両面印刷オプションを確認

選択したプリンタがデュプレックスで印刷されるかどうかを確認するにはどうすればよいですか?

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

+0

私はそれがなぜ重要で、失敗するのか想像しようとしています。 –

+1

@Damien_The_Unbeliever - 一連のドキュメントを1つのドキュメントにまとめて1つの印刷ジョブで印刷しようとしています。しかし、各文書が(別の文書の裏側ではなく)新しいページ上で開始するように文書を適切に分離できるように、その印刷ジョブで起こる二重化オプションに注意する必要があります。 – Reddog

+0

あなたは各文書が2で割り切れることを保証しますか?その奇数のページが空白のページを追加する場合。それで、別のドキュメントページの裏には決して印刷されません。 –

答えて

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 structure定義を使用しました。 pinvoke.netで定義された文字セットは、B0biによるoriginal linkのコメントに従って(つまり、DEVMODEのStructLayoutAttriuteでCharSet = CharSet.Unicodeを設定する)いくつかの調整が必要な場合があることに注意してください。 DM enumも必要です。そして、System.Runtime.InteropServicesを使用して追加することを忘れないでください。

プリンタの設定でどのようなパターンが表示されているのかを絞り込むことができます。

1

短答?あなたはそうしない。さまざまな設定が何を言っているかにかかわらず、実際のプリンタは常に印刷ジョブを二重化するように設定されている場合があります。

ドキュメントをまとめてどのようにマージするのかよく分かりませんが、単にページをカウントしてドキュメント間に空白のページを挿入すると、新しいドキュメントがすべて奇数ページから始まるように聞こえます。

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

関連する問題