C# 在c中打印时设置PrinterSettings

C# 在c中打印时设置PrinterSettings,c#,.net,winforms,printing,C#,.net,Winforms,Printing,几天前,我试图通过右击照片打印照片。出现一个对话框来选择打印机、纸张大小、质量等。我选择PaperSize=Legal。打印机可以打印在合法尺寸的纸张上,我使用的是HP LaserJet 1020 plus打印机 现在我正在尝试从C打印一些东西,设置纸张大小,但打印机无法打印法律文件。下面是我的代码。代码有问题吗 this.printDocument.PrinterSettings.PrinterName = this.printSetting.PrinterName; PaperSize pk

几天前,我试图通过右击照片打印照片。出现一个对话框来选择打印机、纸张大小、质量等。我选择PaperSize=Legal。打印机可以打印在合法尺寸的纸张上,我使用的是HP LaserJet 1020 plus打印机

现在我正在尝试从C打印一些东西,设置纸张大小,但打印机无法打印法律文件。下面是我的代码。代码有问题吗

this.printDocument.PrinterSettings.PrinterName = this.printSetting.PrinterName;
PaperSize pkCustomSize1 = new PaperSize("8.5x13", 1300, 850);
this.printDocument.DefaultPageSettings.PaperSize = pkCustomSize1;
this.printDocument.DefaultPageSettings.PaperSize.RawKind = 119;
printPreviewDialog.Document = printDocument;
printDocument.Print();

private void printDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    Graphics g = e.Graphics;
    Bitmap bm = new Bitmap(300, 3000);
    // Code for bm.
    g.DrawImage(bm, 0, 0);
}
所以问题是,设置纸张尺寸和打印机设置的正确方法是什么? 还有一件事,我搜索了打印机的最大可打印面积。我的打印机有最大A4尺寸,为什么它在法律上打印

PrintDocument.PrinterSettings.PaperSizes集合具有您使用PrintDocument.PrinterSettings.PrinterName属性设置的打印机支持的所有纸张大小。PrintDocument.PrinterSettings包含您设置的打印机的各种信息。在需要的地方使用它们

示例代码:

// do a null check of the return value of GetPaperSize. 5 represent the rawkind of Legal
printdocument.PrinterSettings.DefaultPageSettings.PaperSize = GetPaperSize(5);

private PaperSize GetPaperSize(int rawKind)
{
    PaperSize papersize = null;
    foreach(PaperSize item in printdocument.PrinterSettings.PaperSizes)
    {
        if(item.RawKind == rawKind)
        {
            papersize = item;
            break;
        }
    }
    return papersize;
}
为了回答您的另一个问题,我认为打印机的默认纸张大小设置为Legal

编辑:


每个打印机硬件设备都有自己的物理限制,即硬边距。像Adobe PDF或Cute PDF这样的软件打印机没有这样的限制。您不能超出此限制打印。无论您设置的纸张大小如何,它都将在此限制内打印。这就是为什么你仍然能够打印信件、法律文件、A4等。。打印机支持的纸张尺寸,即可以插入打印机的纸张尺寸,但所有纸张尺寸的最大可打印面积仍然相同

我在某个地方读到,每台打印机都在一个特定的区域打印。我得到了一个代码来获得最大面积。我插入了A4大小的页面。这台打印机可以用A4纸在一些空白处打印。四个边的边距。所以第二个问题是,如果有打印机可以打印的最大纸张尺寸,在我的例子中是A4,为什么它可以用Legel打印?这怎么可能呢?@DhavalR-请参见答案中我的编辑。希望这能澄清你的问题。好的。我明白了。最后一件事。暂时忘记编程吧。我右键单击桌面或任何位置的图像,单击打印,出现一个对话框,让我选择打印机设置、页面设置等。我选择了合法,打印机可以按合法大小打印。现在记住编程,我应用了上面的代码,将页面大小设置为合法,打印机无法打印。怎么了?VS不能做到吗?代码有什么问题吗?还是怎么了?@DhavalR-主要是一些代码问题。使用我提供的代码片段并尝试打印。另一种可能性是,用于打印的程序可能会在内部调整页边距以适应papersize。this.printDocument.PrinterSettings.DefaultPageSettings.papersize=GetPaperSize5;this.printDocument.DefaultPageSettings.Margins.Top=0;this.printDocument.DefaultPageSettings.Margins.Bottom=0;this.printDocument.DefaultPageSettings.Margins.Left=0;this.printDocument.DefaultPageSettings.Margins.Right=0;现在你觉得有什么不对劲吗?