Olá Christopher,
O SP 8 possui uma nova propriedade que deve lidar com esses tamanhos de papel personalizados. Consegui convencer a DEV de que quando são criados esses tamanhos de papel personalizados, é atribuído um valor ENUM aleatório e não há forma de obtê-lo no visualizador... Agora conseguimos acessá-lo.
Então, agora, contanto que a impressora e o tamanho do papel estejam definidos da mesma forma em todos os PCs, agora você pode obtê-lo e usá-lo em uma caixa de diálogo personalizada, mas pode não ser necessário. Não tive tempo de ver exatamente como vai funcionar, mas abaixo mostro como obtê-lo:
Procure por esta linha: rptPRT.PaperName.ToString();
private void getPrinterInfoOnOpen(CrystalDecisions.CrystalReports.Engine.ReportDocument rpt)
{
// esta linha deve retornar o número de relatórios em execução simultânea
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 = "Impressora não instalada";
}
else
btnPaperSizeName.Text = "A impressora é Display";
}
catch (Exception ex)
{
btnSQLStatement.Text = "ERRO: " + ex.Message;
return;
}
E verifique o aplicativo anexado. Existem métodos, um novo adicionado para RAS, que copiam as informações De e Para as informações do sistema de impressora.
Pode funcionar para você também... descompacte-o e renomeie o arquivo para *.zip.
Don
PS - O SP 8 está prestes a ser lançado, decidimos fazer um lançamento antecipado devido a alguns problemas de regressão que precisavam ser corrigidos. No entanto, não há suporte para o VS 2013... consulte o wiki de downloads para atualizações...
pastedImage_0.png