【发布时间】:2009-10-28 09:09:55
【问题描述】:
我有一个写入收据的应用程序(C#、.NET 3.5)。它们通常使用带有 .NET PrintDocument 的小型收据打印机打印。问题是我想用普通打印机打印的例外情况。在这些情况下,文本会被截断。我希望有一个检查或开关来防止这种情况,但仍然保持小型打印机上的紧边距。
处理这个问题的最佳方法是什么?我可以在不接触图形生成的情况下做到这一点吗?
【问题讨论】:
我有一个写入收据的应用程序(C#、.NET 3.5)。它们通常使用带有 .NET PrintDocument 的小型收据打印机打印。问题是我想用普通打印机打印的例外情况。在这些情况下,文本会被截断。我希望有一个检查或开关来防止这种情况,但仍然保持小型打印机上的紧边距。
处理这个问题的最佳方法是什么?我可以在不接触图形生成的情况下做到这一点吗?
【问题讨论】:
在 PrintDocument 中设置打印机后,您可以使用以下值查看当前的 PaperSize:
PrintDocument.PrinterSettings.DefaultPageSettings.PaperSize
或许:
PrintDocument.PrinterSettings.PaperSizes
【讨论】:
我的问题是我正在设置打印机Document.DefaultPageSettings.PaperSize。
相反,我推荐this
private PrintDocument _printDocument = new PrintDocument();
private int _checkPrint;
public Form1()
{
InitializeComponent();
_printDocument.BeginPrint += _printDocument_BeginPrint;
_printDocument.PrintPage += _printDocument_PrintPage;
}
private void btnPrint_Click(object sender, EventArgs e)
{
PrintDialog printDialog=new PrintDialog();
if (printDialog.ShowDialog() == DialogResult.OK)
_printDocument.Print();
}
private void _printDocument_PrintPage(object sender, PrintPageEventArgs e)
{
// Print the content of RichTextBox. Store the last character printed.
_checkPrint = rchEditor.Print(_checkPrint, rchEditor.TextLength, e);
// Check for more pages
e.HasMorePages = _checkPrint < rchEditor.TextLength;
}
private void _printDocument_BeginPrint(object sender, PrintEventArgs e)
{
_checkPrint = 0;
}
【讨论】: