如何打印未在屏幕上显示的内容

时间:2013-04-14 15:08:12

标签: c# wpf winforms printing

我一直在努力打印文档, 该文件有一个页眉页脚和正文, 主体(网格)对于每个不同的文档具有不同的大小。 文档可能具有2种尺寸(A5,A4)中的一种,具体取决于网格的行数

我最初使用了ReportViewer控件,但是它有一些问题,主要是它打印了2篇论文,不管文件的大小是什么,经过10周的研究我放弃了,没有任何意义。

然后我试图打印一个表格及其所有内容(这并不容易)再次出现问题, 其中一个不同的屏幕分辨率,如果主体有很多行,表格将不适合屏幕,那么它将不会被打印。

我的问题是:
word如何打印页面的所有内容?机制是什么? 我只是需要先行,如何打印未在屏幕上显示的内容?

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您想要的,但

您需要做的是创建一个虚拟表单,其大小与您要打印的控件相同,然后将控件添加到虚拟表单并显示表单并在控件上打印控件。

我是这样做的:

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    //Create bitmap
    Bitmap image = new Bitmap(dataGridView1.Width, dataGridView1.Height);
    //Create form
    Form f = new Form();
    //add datagridview to the form
    f.Controls.Add(dataGridView1);
    //set the size of the form to the size of the datagridview
    f.Size = dataGridView1.Size;
    //draw the datagridview to the bitmap
    dataGridView1.DrawToBitmap(image, new Rectangle(0, 0, dataGridView1.Width, dataGridView1.Height));
    //dispose the form
    f.Dispose();
    //print
    e.Graphics.DrawImage(image, 0, 0);
}

这将打印dataGridView1,即使它没有在表单上看到。