6

我正在尝试进行换页并在打印时跳过 1 页,但是使用下面的代码行,我无法进行换页。

private void InserPageBreak(System.Drawing.Printing.PrintPageEventArgs e)
{
      Font sFont = new Font("Arial", 10);
      Brush sBrush = Brushes.White;
      e.Graphics.DrawString("\f", sFont, sBrush, 0, 0);
}

我使用 PrintDialog 打印页面内容。我正在使用“\f”C# 的换页符。

关于如何实施/使此表单提要起作用的任何想法?

PS:我什至试过这个:

//ASCII 代码 12 - 打印机的换页控制代码。

 string test = char.ConvertFromUtf32(12);
 e.Graphics.DrawString(test, sFont, sBrush, 0, 0);

在内部 c# 将其转换为“\f”,但没有做换页,任何实现过“\f”的人,请分享你的想法。

4

1 回答 1

5

在 .NET 中,应该使用 PrintPageEventArgs.HasMorePage 属性将换页符发送到打印机。通过调用 e.Graphics.DrawString("\f", sFont, sBrush, 0, 0),您只是将文本渲染到要打印的文档中,打印机永远不会将其解释为换页。

因为您知道要在哪里中断页面,所以不要调用 InserPageBreak 方法,而是在 PrintPage 事件处理程序中设置 PrintPageEventArgs.HasMorePages = true。这将向打印机发送换页,并且您的 PrintPage 事件将继续被触发,直到您设置 HasMorePages = false。

我希望这有帮助。了解您如何实现 PrintPage 事件处理程序可能会很有用。

例子:

使用 BeginPrint 处理程序在打印前初始化数据

    void _document_BeginPrint(object sender, PrintEventArgs e)
    {
        //generate some dummy strings to print
        _pageData = new List<string>()
                {
                    "Page 1 Data",
                    "Page 2 Data",
                    "Page 3 Data",
                };

        // get enumerator for dummy strings
        _pageEnumerator = _pageData.GetEnumerator();

        //position to first string to print (i.e. first page)
        _pageEnumerator.MoveNext();
    }

在 PrintPage 处理程序中,一次打印一页,并设置 HasMorePages 以指示是否有另一页要打印。在本例中,将打印三页,每页一个字符串。在第 3 页之后,_pageEnumerator.MoveNext() 将返回 false,结束打印作业。

    void _document_PrintPage(object sender, PrintPageEventArgs e)
    {
        Font sFont = new Font("Arial", 10);
        Brush sBrush = Brushes.Black;

        //print current page
        e.Graphics.DrawString(_pageEnumerator.Current, sFont, sBrush, 10, 10);

        // advance enumerator to determine if we have more pages.
        e.HasMorePages = _pageEnumerator.MoveNext();
    }
于 2012-05-16T15:49:18.730 回答