Crystal Report 不接受用户的打印机设置

问题描述 投票:0回答:1

我是一名 C# 开发人员,我需要在我的版本中使用 Crystal Report。

问题是它只能纵向打印。当我尝试更改打印设置时,它们会被忽略。例如,如果我在打印机设置中选择“横向”,它仍将以纵向打印。

我发现了很多与此相关的主题,但没有有效的答案。特别是,我看到您可以取消选中“优化显示”,但这不会改变任何东西。

我试图通过创建一个“打印”按钮并自己编码来强制参数来作弊:

private void OnPrintButtonClick(object sender, RoutedEventArgs e)
{
    PrintDialog PrintD = new PrintDialog();
    Nullable<Boolean> print = false;
    try
    {
        print = PrintD.ShowDialog();
    }
    catch (Exception exc)
    {
        MessageBox.Show("Imprimante non trouvée: " + exc.Message, "Erreur");
    }

    if (print == true)
    {
        PrintQueue printQueue = PrintD.PrintQueue;
        report.PrintOptions.PrinterName = printQueue.FullName;
        Debug.WriteLine("Printer Name: " + printQueue.FullName);
        System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();
        printerSettings.PrinterName = printQueue.FullName;
        report.PrintToPrinter(1, false, 0, 0);
    }
}

它适用于大多数打印机,但今天我在客户端遇到问题,打印导致“System.Runtime.InteropServices.COMException:无效的打印机名称”错误。

我想,理想的情况是应用程序能够“本机”使用用户选择的设置,而无需强制执行任何操作。

我正在使用 CR 13.0.22,但我已经没有想法了。

c# crystal-reports
1个回答
0
投票

我假设您可以使用

PrintD.PrintTicket.PageOrientation
从打印对话框中获取页面方向。

在调用

report.PrintOptions.PaperOrientation
函数之前将此值设置为
PrintToPrinter
怎么样?

下面是您可以尝试的代码示例。

if (print == true)
{
    PrintQueue printQueue = PrintD.PrintQueue;
    report.PrintOptions.PrinterName = printQueue.FullName;
    System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();
    printerSettings.PrinterName = printQueue.FullName;

    var orientation = PrintD.PrintTicket.PageOrientation;

    if (orientation == PageOrientation.Landscape)
    {
        report.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape;
    }
    if (orientation == PageOrientation.Portrait)
    {
        report.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Portrait;
    }

    report.PrintToPrinter(1, false, 0, 0);
}
© www.soinside.com 2019 - 2024. All rights reserved.