【问题标题】:Setting PrinterSettings while printing in c#在 C# 中打印时设置 PrinterSettings
【发布时间】:2014-03-31 23:47:33
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net winforms printing


    【解决方案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;
    }
    

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

    编辑:

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

    【讨论】:

    • 某处我读到每台打印机都在特定区域打印。我得到了一个代码来获得最大面积。我插入了 A4 大小的页面。打印机可以在 A4 纸上打印一些边距。所有四个边的边距。所以第二个问题是,如果打印机可以打印的最大纸张尺寸,在我的情况下是 A4,为什么它能够在 Legel 中打印?这怎么可能。
    • @DhavalR - 在答案中查看我的编辑。希望这能澄清你的问题。
    • 好的。我明白了。最后一件事。暂时忘记编程。我右键单击位于桌面或任何地方的图像,单击打印,出现一个对话框,让我选择打印机设置、页面设置等。我选择了 Legal,打印机可以按 Legal 尺寸打印。现在记住编程,我应用了上面的代码,将页面大小设置为 Legal,打印机无法打印。有什么事? VS不可以吗?或者代码有什么问题?或者有什么问题?
    • @DhavalR - 主要是一些代码问题。使用我提供的代码 sn-p 并尝试打印。另一种可能性是您用于打印的程序可能会在内部调整页边距以适应纸张大小。
    • this.printDocument.PrinterSettings.DefaultPageSettings.PaperSize = GetPaperSize(5); this.printDocument.DefaultPageSettings.Margins.Top = 0; this.printDocument.DefaultPageSettings.Margins.Bottom = 0; this.printDocument.DefaultPageSettings.Margins.Left = 0; this.printDocument.DefaultPageSettings.Margins.Right = 0; 现在你看出什么问题了吗?
    猜你喜欢
    • 2010-11-08
    • 2015-07-07
    • 2014-04-14
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多