Hola Christopher,
SP 8 tiene una nueva propiedad que debería manejar estos tamaños de papel personalizados. Logré convencer a DEV de que cuando se crean estos tamaños de papel personalizados se asigna un valor ENUM aleatorio y no hay forma de obtenerlo en el visor... Ahora podemos acceder a él.
Así que ahora, siempre y cuando la impresora y el tamaño de papel estén definidos en la PC de todos de la misma manera, ahora puedes obtenerlo y usarlo en un cuadro de diálogo personalizado, pero puede que no sea necesario. No he tenido tiempo de ver exactamente cómo va a funcionar, pero a continuación te muestro cómo obtenerlo:
Busca esta línea: rptPRT.PaperName.ToString();
private void getPrinterInfoOnOpen(CrystalDecisions.CrystalReports.Engine.ReportDocument rpt)
{
// esta línea debería devolver el número de informes concurrentes que se están ejecutando
int i = CrystalDecisions.CrystalReports.Engine.ReportDocument.GetConcurrentUsage();
rptClientDoc = rpt.ReportClientDocument;
CrystalDecisions.Shared.PrintLayoutSettings PrintLayout = new CrystalDecisions.Shared.PrintLayoutSettings();
CrystalDecisions.ReportAppServer.ReportDefModel.PrintOptions rptPRT = new CrystalDecisions.ReportAppServer.ReportDefModel.PrintOptions();
CrystalDecisions.ReportAppServer.ReportDefModel.PrintOptions rptPRTCloned = new CrystalDecisions.ReportAppServer.ReportDefModel.PrintOptions();
PrinterSettings ps = new PrinterSettings();
PageSettings pgs = new PageSettings();
rptPRT = rptClientDoc.PrintOutputController.GetPrintOptions();
rptPRTCloned = rptPRT.Clone();
PrintLayout.Scaling = PrintLayoutSettings.PrintScaling.DoNotScale;
if (rpt.PrintOptions.SavedPrinterName.Length != 0)
{
btnSavedPrinterName.Text = rpt.PrintOptions.SavedPrinterName.ToString();
}
else
btnSavedPrinterName.Text = rptPRT.SavedPrinterName.ToString();
//SP 8
try{
if (rptPRT.DriverName != "DISPLAY")
{
btnPaperSizeName.Text = rptPRT.PaperName.ToString();
if (rptPRT.PaperName.ToString() == "")
{
btnPaperSizeName.Text = "Impresora no instalada";
}
}
else
btnPaperSizeName.Text = "La impresora es Display";
}
catch (Exception ex)
{
btnSQLStatement.Text = "ERROR: " + ex.Message;
return;
}
Y revisa la aplicación adjunta. Hay métodos, uno nuevo añadido para RAS, que copian la información Desde y Hacia la información del sistema de impresora.
Puede que también funcione para ti.... descomprímelo y luego renombra el archivo a *.zip.
Don
PS - SP 8 está cerca de ser lanzado, decidimos hacer un lanzamiento anticipado debido a algunos problemas de regresión que tuvieron que ser corregidos. Sin embargo, no hay soporte para VS 2013... consulta el wiki de descargas para actualizaciones...
pastedImage_0.png