在 C# 中打印时设置 PrinterSettings

Dha*_*alR 5 .net c# printing winforms

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

现在我试图从 C# 打印一些东西,设置 PaperSize,但打印机无法打印 Legal。下面是我的代码。代码有什么问题吗?

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);
}
Run Code Online (Sandbox Code Playgroud)

所以问题是,设置 PaperSize(和 PrinterSetting)的正确方法是什么?还有一件事,我搜索了MaximumPrintableArea一台打印机。我的打印机有最大 A4 尺寸,为什么它可以打印Legal

在此处输入图片说明

在此处输入图片说明

Jun*_*ith 1

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;
}
Run Code Online (Sandbox Code Playgroud)

PaperSize为了回答您的其他问题,我认为打印机的默认设置为“合法”。

编辑:

每台打印机(硬件设备)都有其自己的物理限制,定义为 HardMargins。Adobe PDF 或 Cute PDF 等软件打印机没有此类限制。您无法打印超出此限制的内容。无论您设置什么纸张尺寸,它都将在此限制内打印。这就是为什么您仍然能够以 Letter、Legal、A4 等格式进行打印(打印机支持的纸张尺寸,即您可以插入打印机的纸张尺寸),但所有纸张尺寸的最大可打印区域仍然相同。