Printersettings中給出了一些列印機設定選項,對于一些高級列印機,列印屬性對話框有很多該種類列印機特有的列印配置,這些配置可以通過列印屬性對話框進行配置。
問題:如何使用C#通程序式對這些屬性進行配置?
比如:(1)一張紙列印多頁,一張兩頁、一張三頁、一張四頁、一張六頁、一張八頁、一張九頁;(2)小冊子;(3)劃邊框線;(4)訂書機。
uj5u.com熱心網友回復:
[System.Runtime.InteropServices.DllImport("winspool.drv", SetLastError = true)]
public extern static int OpenPrinter(string pPrinterName, ref IntPtr hPrinter, ref IntPtr pDefault);
[System.Runtime.InteropServices.DllImport("winspool.drv", SetLastError = true)]
public extern static int DocumentProperties(IntPtr hWnd, IntPtr hPrinter, string pDeviceName, ref IntPtr pDevModeOutput, ref IntPtr pDevModeInput, int fMode);
[System.Runtime.InteropServices.DllImport("winspool.drv", SetLastError = true)]
public static extern int ClosePrinter(IntPtr phPrinter);
private const int DM_PROMPT = 4;
private void PrinterAttrib_Click(object sender, EventArgs e)
{
string printerName = Input_Printer.textBox.Text;
if (printerName != null && printerName.Length > 0)
{
IntPtr pPrinter = IntPtr.Zero;
IntPtr pDevModeOutput = IntPtr.Zero;
IntPtr pDevModeInput = IntPtr.Zero;
IntPtr nullPointer = IntPtr.Zero;
OpenPrinter(printerName, ref pPrinter, ref nullPointer);
int iNeeded = DocumentProperties(print_Form._formObject.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, 0);
pDevModeOutput = System.Runtime.InteropServices.Marshal.AllocHGlobal(iNeeded);
DocumentProperties(print_Form._formObject.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, DM_PROMPT);
ClosePrinter(pPrinter);
}
}
uj5u.com熱心網友回復:
改下string printerName = "列印機名字";
uj5u.com熱心網友回復:
====================
問一下,你的print_Form應該是表單名是嗎,那_formObject是什么的呢?
uj5u.com熱心網友回復:
你QQ多少呢,咱們QQ聯系,我QQ318986462,謝謝了
uj5u.com熱心網友回復:
不好意思啊,DocumentProperties(print_Form._formObject.Handle, pPrinter, printerName, ref pDevModeOutput, ref pDevModeInput, DM_PROMPT);
是個 表單.Handle
直接程式里摘出來的,臨時沒改好
uj5u.com熱心網友回復:
print_Form._formObject是表單名嗎,為什么我改成表單名以后還是報錯?另外你的PrinterAttrib_Click是button控制元件的觸發事件嗎
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/90677.html
標籤:C#
