打印功能在不同的类

本文关键字:功能 打印 | 更新日期: 2023-09-27 18:03:05

我需要一个小帮助。我想做一个简单的类,必须只提供数据和文档打印。我想把所有设置和图形放到一个类中,然后调用print函数。我的printdocument类看起来像这样:

class printticket
{
    PrintDocument ticket; 
    public void printticket()
    {
        ticket = new PrintDocument();
    }
    public void writeHeader(string h)
    {
        Graphics g = printargs.Graphics;
        StringFormat fs = new StringFormat();
        fs.Alignment = StringAlignment.Center;
        Rectangle r = new Rectangle(X, Y, pargs.MarginBounds.Width, (int)g.MeasureString(h, defaultFont).Height);
        g.DrawString(h, defaultFont, Brushes.Black, r, fs);
        Y += r.Height;
    }
    void print()
    {
        ticket.print();
    }
}

现在我想这样调用这个函数:

var printticket = new printticket();
printticket.writeHeader("this is a testing string");
printticket.print();

有可能这样做吗?

打印功能在不同的类

我能想到的最好的方法是传递你想要在PrintTicket类的构造函数中打印出来的所需字符串,这将在稍后的writeHeader方法中使用。writeHeader方法绑定到PrintPage事件,所以它可以访问PrintPageEventArgs。

所以你的PrintTicket类看起来像:

public class PrintTicket {
    private PrintDocument _ticket;
    private string _header;
    private Font _defaultFont;
    private int X;
    private int Y;
    public PrintTicket(string header) {
        _ticket = new PrintDocument();
        _ticket.PrintPage += new PrintPageEventHandler(this.writeHeader);
        _header = header;
    }
    private void writeHeader(object sender, PrintPageEventArgs e) {
        Graphics g = e.Graphics;
        StringFormat fs = new StringFormat();
        fs.Alignment = StringAlignment.Center;
        Rectangle r = new Rectangle(X, Y, e.MarginBounds.Width, (int)g.MeasureString(_header, _defaultFont).Height);
        g.DrawString(_header, _defaultFont, Brushes.Black, r, fs);
        Y += r.Height;     
    }
    public void Print() {
        _ticket.Print();
    }        
}

你可以这样称呼它:

PrintTicket t = new PrintTicket("This is what I want to print out");
t.Print();