在C#中打印时设置打印机设置

5
几天前,我试图通过右键单击照片来打印一张照片。弹出一个对话框,选择打印机、纸张大小、质量等。我选择了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);
}

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

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;
}

我认为打印机的默认纸张大小设置为Legal。
每个打印机(硬件设备)都有其自己的物理限制,即HardMargins。像Adobe PDF或Cute PDF这样的软件打印机没有这样的限制。您无法超出此限制进行打印。无论您设置什么纸张大小,它都将在此限制范围内打印。这就是为什么您仍然能够在Letter、Legal、A4等纸张大小中打印(打印机支持的纸张大小,即您可以插入打印机的纸张大小),但最大可打印区域对于所有纸张大小仍然相同。

我曾经读到过每台打印机都有特定的打印区域。我得到了一段代码来获取最大的打印区域。我插入了A4纸张,打印机可以在A4纸张上打印一些边距。四个方向上都有边距。所以第二个问题是关于,如果打印机能够打印的最大纸张尺寸是A4,那么为什么它能够打印Legal尺寸的纸张呢?这是如何可能的。 - DhavalR
@DhavalR - 请看我在答案中的修改。希望这解答了你的问题。 - Junaith
好的,我明白了。最后一件事。暂时不要考虑编程。我右键单击桌面或任何位置上的图像,点击打印,出现一个对话框,让我选择打印机设置、页面设置等。我选择了Legal,打印机可以打印Legal尺寸。现在回想起编程,我应用了上述代码,将页面大小设置为Legal,但打印机无法打印。这是怎么回事?VS不能做到吗?还是代码有问题?或者是什么地方出了问题? - DhavalR
@DhavalR - 主要是代码问题。请使用我提供的代码片段并尝试打印。另一个可能性是您用于打印的程序可能会在内部调整边距以适应纸张大小。 - Junaith
你是否遇到了错误?你是否将“OriginAtMargins”设置为true? - Junaith
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接