我是一名 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,但我已经没有想法了。
我假设您可以使用
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);
}