Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PrintDocument/PrintPreviewDialog不绘制或打印任何内容_C#_.net_Winforms_Printing - Fatal编程技术网

C# PrintDocument/PrintPreviewDialog不绘制或打印任何内容

C# PrintDocument/PrintPreviewDialog不绘制或打印任何内容,c#,.net,winforms,printing,C#,.net,Winforms,Printing,我正在玩PrintDocument和PrintPreviewDialog类来学习它们,但我似乎无法让文档在发送到打印机时打印任何内容,而且PrintPreviewDialog中也没有任何绘图内容,即使是白色空白页,也是灰色的。我试着改变页边空白,画位置,画巨大的矩形等等,结果什么也没有显示。我对GDI+不是很熟悉,所以我肯定我遗漏了什么,但我找不到什么 以下是我正在使用的相关代码: //Print private void menuPrint_click(Object source, Event

我正在玩PrintDocument和PrintPreviewDialog类来学习它们,但我似乎无法让文档在发送到打印机时打印任何内容,而且PrintPreviewDialog中也没有任何绘图内容,即使是白色空白页,也是灰色的。我试着改变页边空白,画位置,画巨大的矩形等等,结果什么也没有显示。我对GDI+不是很熟悉,所以我肯定我遗漏了什么,但我找不到什么

以下是我正在使用的相关代码:

//Print
private void menuPrint_click(Object source, EventArgs e)
{
    printDocumentPage = 0;

    printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
    printDocument1.BeginPrint += new System.Drawing.Printing.PrintEventHandler(printDocument1_BeginPrint);

    printPreviewDialog1.Document = printDocument1;
    printPreviewDialog1.ShowDialog();
}

private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
    // Save our print action so we know if we are printing 
    // a preview or a real document.
    printAction = e.PrintAction;

    // Set some preferences, our method should print a box with any 
    // combination of these properties being true/false.
    printDocument1.OriginAtMargins = false;

    if (printAction != PrintAction.PrintToPreview)
    {
        PrintDialog printDlg = new PrintDialog();
        printDocument1.DocumentName = "Print Document Simple Text";
        printDlg.Document = printDocument1;

        // Show printer dialog
        if (printDlg.ShowDialog() == DialogResult.OK)
        {
            printDocument1.PrinterSettings = printDlg.PrinterSettings;
        }
        else
        {
            e.Cancel = true;
        }
    }
}

void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    Graphics g = e.Graphics;

    RectangleF marginBounds = e.MarginBounds;

    RectangleF printableArea = e.PageSettings.PrintableArea;

    //if (printAction == PrintAction.PrintToPreview)
        //g.TranslateTransform(printableArea.X, printableArea.Y);

    int availableWidth = (int)Math.Floor(printDocument1.OriginAtMargins ? marginBounds.Width : (e.PageSettings.Landscape ? printableArea.Height : printableArea.Width));
    int availableHeight = (int)Math.Floor(printDocument1.OriginAtMargins ? marginBounds.Height : (e.PageSettings.Landscape ? printableArea.Width : printableArea.Height));

    //g.DrawRectangle(Pens.Red, 0, 0, availableWidth - 1, availableHeight - 1);

    // Doesnt work either
    //g.DrawRectangle(Pens.Red, 0, 0, 100, 100);

    System.Drawing.Font myFont = new System.Drawing.Font("Courier New", 10, FontStyle.Underline, GraphicsUnit.Pixel);

    float lineHeight = myFont.GetHeight(g);
    float yLineTop = e.MarginBounds.Top;

    if (printDocumentPage >= m_report.PageCount)
    {
        e.HasMorePages = false;
        return;
    }

    otPage page = m_report.pageAt((int)printDocumentPage);

    for (int i = 0; i < page.LineCount ; i++)
    {
        otLine line = page.lineAt(i);

        g.DrawString(line.getPrintLine(true), myFont, Brushes.Black, e.MarginBounds, StringFormat.GenericTypographic);

        yLineTop += lineHeight;
    }

    printDocumentPage++;

    if (printDocumentPage < m_report.PageCount)
    {
        e.HasMorePages = true;
        return;
    }

    e.HasMorePages = false;
}
此时将显示PrintPreviewDialog,并运行两个事件处理程序,它将正确循环行并绘制每一行,但对话框上不会绘制任何内容,发送到打印机时,它将打印空页。PrintPreviewDialog是全灰色的,没有白页或任何东西,在所有级别进行缩放都不会产生任何效果

编辑:摆脱我当前的页面/行处理,只是尝试绘制一个字符串、任意字符串或矩形,但什么都不起作用

这是打印预览屏幕的屏幕截图。更改缩放/页面也不会产生任何效果:

编辑2:

我下载了这个非常简单的示例项目,我假设它能按预期工作。直接开箱即用,同样的效果。仅显示灰色屏幕和窗体上的按钮。printpreviewcontrol中根本不打印任何内容

有什么问题吗

编辑3:

我在另一台开发机器上进行了测试,效果很好。为什么它不能在我的电脑上工作?另一台计算机是64位的,而这台计算机是32位的,但它是用相同的设置构建的。可能是我的.NET框架出了问题吗

编辑4:

对不起,所有的编辑。我发现,如果我切换默认打印机,它会工作得很好。与e.MarginBounds有关