Canvas 在某些机器上使用C语言的PrintDocument打印时,无法修改页面大小

Canvas 在某些机器上使用C语言的PrintDocument打印时,无法修改页面大小,canvas,printing,size,printdocument,Canvas,Printing,Size,Printdocument,这是一个非常简单的程序。按所选画布大小打印Hello World。在我的测试中,它可以在4台机器上正常工作,包括Win7和Win8,但在另外两台机器上都不工作,包括Windows 7,即使我选择了ANSI E,打印的结果仍然是ANSI A 以下是一些注意事项: 我使用AdobeAcrobat的PDFLite打印,并将 结果是一样的。 我可以通过pdflite和其他pdf编写器在Ansi E画布上成功打印记事本文本文件。其他一些工具也可以通过PdfLite成功打印到ANSI E。 该计划基本上:

这是一个非常简单的程序。按所选画布大小打印Hello World。在我的测试中,它可以在4台机器上正常工作,包括Win7和Win8,但在另外两台机器上都不工作,包括Windows 7,即使我选择了ANSI E,打印的结果仍然是ANSI A

以下是一些注意事项:

我使用AdobeAcrobat的PDFLite打印,并将 结果是一样的。 我可以通过pdflite和其他pdf编写器在Ansi E画布上成功打印记事本文本文件。其他一些工具也可以通过PdfLite成功打印到ANSI E。 该计划基本上:

选择要显示的页面大小 单击打印按钮,弹出选择打印机窗口。 选择一台虚拟打印机,如PDFLite,单击“打印”。 生成PDF,它仍然是ANSI A。 以下是没有UI代码的完整源代码:

 private void PrintButton_Click(object sender, RoutedEventArgs e)
    {
        PrintDocument printDocument = new PrintDocument();
        printDocument.DefaultPageSettings.PaperSize = GetPaperSize();
        printDocument.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);

        System.Windows.Forms.PrintDialog printWindowDialog = new System.Windows.Forms.PrintDialog();
        printWindowDialog.Document = printDocument;
        if (printWindowDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            printDocument.Print();
        }
    }

    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
        ev.Graphics.DrawString("Hello World", new Font("Arial", 10), Brushes.Black, 5, 0, new StringFormat());
    }

    private PaperSize GetPaperSize()
    {
        PaperSize printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);
        switch (((ComboBoxItem)sizeCb.SelectedItem).Content.ToString())
        {
            case "ANSI A – 8.5'' x 11''":
            default:
                printPreviewPaperSize = new PaperSize("AnsiA", 850, 1100);
                break;
            case "ANSI B – 11'' x 17''":
                printPreviewPaperSize = new PaperSize("AnsiB", 1100, 1700);
                break;
            case "ANSI C – 17'' x 22''":
                printPreviewPaperSize = new PaperSize("AnsiC", 1700, 2200);
                break;
            case "ANSI D – 22'' x 34''":
                printPreviewPaperSize = new PaperSize("AnsiD", 2200, 3400);
                break;
            case "ANSI E – 34'' x 44''":
                printPreviewPaperSize = new PaperSize("AnsiE", 3400, 4400);
                break;
        }

        return printPreviewPaperSize;
    }
那么代码中有什么错误吗?请告知。谢谢你的帮助


Ben

这是因为对话框中的默认设置取代了手动页面大小。试试这个,效果很好

if (printWindowDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 {
     printDocument.PrinterSettings.DefaultPageSettings.PaperSize = = new PaperSize("AnsiE", 3400, 4400);
     printDocument.DefaultPageSettings.PaperSize = new PaperSize("AnsiE", 3400, 4400);
     printDocument.Print();
}

你为什么不试着把页面大小编码成组合框呢?以防用户界面出现问题。它工作起来很有魅力。你是我的英雄!谢谢