C#设置信封打印区域

4
我正在尝试进行非常简单的操作:
  1. 获取本地打印机列表,让用户选择(已完成)
  2. 选择信封托盘进行手动进纸
  3. 在手动进纸打印机上以特定信封尺寸(4 1/8 x 9 1/2 / 03982)打印客户地址。
我对System.Drawing.Printing类没有经验,所以请原谅我的无知。
我在使用下面找到的代码,我一直在尝试调整Rectangle(20, 20, 200, etc.));,但是还没有找到如何将其减去适当的边距或获取信封托盘。

编辑 - 工作代码(感谢icemanind指导我正确方向)。

   //Load
   foreach (String printer in PrinterSettings.InstalledPrinters) {
          printersList.Items.Add(printer.ToString());
    }

    private void btPrint_Click(object sender, EventArgs e)
    {
            var pd = new PrintDocument();
            //Set PrinterName as the selected printer in the printers list
            pd.PrinterSettings.PrinterName = printersList.SelectedItem.ToString();
            //pd.DefaultPageSettings.Margins = new Margins(200, 200, 200, 200);
            pd.DefaultPageSettings.Landscape = true;
            pd.DefaultPageSettings.PaperSize.RawKind = 6;
            pd.PrintPage += pd_PrintPage;
            pd.Print();
    }

    public void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
            //Get Address From Database or Pass In
            var vnId = Lnq.Orders.Where(a => a.ID == OrdId).Select(a => a.fk_ClientAttID).FirstOrDefault();
            var a = Lnq.Clients.Where(a => a.ID == vnId).Select(a => new {a.Name, a.Addy1, a.City, a.State, a.Zip});
            foreach (var v in e)
            {
                var g = ev.Graphics;
                var font = new Font("Arial", 12);
                var brush = new SolidBrush(Color.Black);
                g.DrawString(a.Name + "\n" + a.Addy1  + "\n" + a.City + ", " 
                             + a.State + " " + a.Zip, font, brush,
                             new Rectangle(500, 400, 650, 650));
            }
    }

尝试使用 PrinterSettings.PaperSizes 属性。 - mush_mouth_4life
使用PageSetupDialog类使其交互和直观。 - Hans Passant
1个回答

4

C#定义了一个PaperSourceKind枚举,用于表示各种打印介质。其中之一是ManualFeed,被描述为手动喂送信封。您应该能够将RawKind属性设置为6,这是ManualFeed的值。

设置后,您不需要担心缩小适配。它应该会自动完成。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接