Symptom
Using Crystal Reports for Visual Studio SP 17 CopyFrom() when using either the Engine or RAS the PaperSource ( Tray ) is not updated and defaults to the Printers default paper tray.
Reproducing the Issue
Create a simple .NET app to copy the Printer info from the Printer into the report properties. Watch the PaperSource property, always defaults to what the default value is for the printer:
private void btrCopyFrom_Click(object sender, EventArgs e)
{
System.Drawing.Printing.PrintDocument pDoc = new System.Drawing.Printing.PrintDocument();
CrystalDecisions.Shared.PrintLayoutSettings PrintLayout = new CrystalDecisions.Shared.PrintLayoutSettings();
System.Drawing.Printing.PrinterSettings printerSettings = new System.Drawing.Printing.PrinterSettings();
System.Drawing.Printing.PageSettings crPage = new System.Drawing.Printing.PageSettings();
printerSettings.PrinterName = cboCurrentPrinters.SelectedItem.ToString();
System.Drawing.Printing.PageSettings pageSettings = new System.Drawing.Printing.PageSettings(printerSettings);
//System.Drawing.Printing.PageSettings pageSettings = cboCurrentPrinters.SelectedIndex.
//MessageBox.Show("Bottom: " + pageSettings.Margins.Bottom.ToString() + "\nTop: " + pageSettings.Margins.Top.ToString() + "\nLeft: " + pageSettings.Margins.Left.ToString() + "\nRight: " + pageSettings.Margins.Right.ToString());
//printerSettings.DefaultPageSettings.PrinterSettings.PrinterName = "SATO CG212"; // EPSON LQ-590 ESC/P 2 Ver 2.0 SATO CG212 Argox X-3200 PPLB
//pageSettings.Margins.Left = 0;
//pageSettings.Margins.Right = 0;
//pageSettings.Margins.Top = 0;
//pageSettings.Margins.Bottom = 0;
if (chkDissociate.Checked == true)
rpt.PrintOptions.DissociatePageSizeAndPrinterPaperSize = true;
else
rpt.PrintOptions.DissociatePageSizeAndPrinterPaperSize = false;
if (chkbxCurrentColour.Checked)
{
printerSettings.DefaultPageSettings.Color = true;
pageSettings.Color = true;
}
else
{
printerSettings.DefaultPageSettings.Color = false;
pageSettings.Color = false;
}
//MessageBox.Show("Will perform CopyFrom...", this.Text);
string MySTRTemp = cboCurrentPaperSizes.SelectedItem.ToString();
int MyENUM = 0;
int MyENUM1 = 0;
if (cboCurrentPaperTrays.SelectedItem != null)
{
string MyPaperSource = cboCurrentPaperTrays.SelectedItem.ToString();
MySTRTemp = cboCurrentPaperTrays.SelectedItem.ToString();
MyENUM = MySTRTemp.LastIndexOf(@":");
MySTRTemp = cboCurrentPaperTrays.Text.Substring(0, MyENUM);
//crPage.PaperSource.Kind = PaperSourceKind.
}
// this will return false if enum cannot be converted
bool myNum = Int32.TryParse(MySTRTemp, out MyENUM1);
// bug in API - fix slated for SP 18
printerSettings.DefaultPageSettings.PaperSource.RawKind = (int)MyENUM1; //"Tray 4"; //
try
{
rpt.PrintOptions.CopyFrom(printerSettings, pageSettings);
}
catch (Exception ex)
{
btnSQLStatement.Text += "\nError: " + ex.Message.ToString() + "\n";
}
try
{
printerSettings.FromPage = 1;
printerSettings.ToPage = 1;
//PrintLayout.Scaling = PrintLayoutSettings.PrintScaling.Scale;
pageSettings.PrinterSettings.FromPage = 1;
pageSettings.PrinterSettings.ToPage = 1;
pageSettings.PrinterSettings.PrintRange = PrintRange.SomePages;
rpt.PrintToPrinter(printerSettings, pageSettings, false, PrintLayout);
}
catch (Exception ex)
{
MessageBox.Show("ERROR: " + ex.Message);
return;
}
}
Resolution
This issue has been escalated to R&D for a fix.
Should be released in SP 17 due out end of September, 2016 if all goes well
Keywords
CopyFrom, cr for VS, .net. , KBA , BI-DEV-NET , BI Software Development Kits (SDKs) - .NET or Other , Problem