2010-07-14 30 views
1

J'ai conçu un rapport de cristal qui sera envoyé à une imprimante spécifique (code à barres) via une interface Web. Permettre que le rapport soit généré dans la visionneuse de rapports Crystal standard posait des problèmes, donc j'utilise maintenant le code-behind pour envoyer le rapport directement à l'imprimante.Changement de police Crystal Report .NET

ReportDocument Report = new ReportDocument();      
ParameterDiscreteValue Order = new ParameterDiscreteValue(); 

Order.Value = Convert.ToInt32(txtOrder); 
Report.Load(reportPath); 
Report.SetParameterValue("OrderNo", Order); 

PageMargins margins; 
margins = Report.PrintOptions.PageMargins; 
margins.bottomMargin = 0; 
margins.leftMargin = 0; 
margins.rightMargin = 0; 
margins.topMargin = 0; 

Report.PrintOptions.ApplyPageMargins(margins); 
Report.PrintOptions.PrinterName = "\\\\printserver\\Zebra Z6M Plus (300dpi)";     
Report.PrintToPrinter(1, false, PageNum, PageNum); 

Report.Close(); 

lors de l'impression du concepteur (CRXI) tout fonctionne bien, mais lorsque l'interface Web envoie le travail à une imprimante (toute imprimante), il change la police Times New Roman qui salit toutes les tailles sur le terrain. Si j'utilise l'afficheur de rapports .NET standard, il utilise la police correcte, donc je suis assez sûr que la modification est causée par la création/utilisation du ReportDocument.

Comment puis-je envoyer le rapport directement à une impression sans que les polices ne soient redéfinies sur Times New Roman?

+0

Vos pilotes d'imprimante sont-ils à jour? – PowerUser

+0

Oui, je m'assure que les pilotes sont à jour, et cela fonctionne correctement avec le concepteur Crystal, mais pas avec le code .NET. – wham12

Répondre

0

Bien qu'il semblait être la police spéciale que j'utilisais avait été inclus sur tous les serveurs imaginables, Je n'ai jamais pu le faire fonctionner à travers l'interface web. J'ai fini par trouver une police Windows standard qui convenait le mieux aux besoins de ce projet et qui a renoncé à essayer de résoudre ce problème.

0

Cette idée est survenue pour moi:
Au lieu d'envoyer le rapport directement à partir de cristal à l'imprimante, si vous utilisez une sorte d'intermédiaire, à savoir exporter le rpt .PDF, puis imprimer le PDF?

(Oui, ce serait une approche très tables « tables en bois », mais si cela fonctionne, il fonctionne.)

+0

Je rencontre le même problème en l'envoyant à un PDF que je le fais quand je permets qu'il soit généré dans le visualiseur de rapport .NET (qui, je crois, le traite dans un PDF à afficher). Il conserve la police correcte, mais les codes à barres que j'ai ajoutés au rapport ne sont pas traités correctement. Un code à barres s'affiche incorrectement et les deux autres ne s'affichent même pas du tout. – wham12

0

Vous devez utiliser l'API RAS SDK. Crystal Reports for Visual Studio 2010 (v13) inclure cette api. (Ce code ne fonctionne pas dans Crystal Reports pour Visual Studio 2005 ... Je n'ai pas d'informations sur d'autres versions)

Ajouter cette référence à votre code existant:

CrystalDecisions.ReportAppServer.ClientDoc 
CrystalDecisions.ReportAppServer.Controllers 
CrystalDecisions.ReportAppServer.ReportDefModel 

En utilisant ce code (VB ... désolé)

Using rpt As New CrystalDecisions.CrystalReports.Engine.ReportDocument 
    rpt.Load(file, CrystalDecisions.[Shared].OpenReportMethod.OpenReportByTempCopy) 
    rpt.SetDataSource(_ReportSource) 
    Dim options As New CrystalDecisions.ReportAppServer.Controllers.PrintReportOptions 
    options.Collated = _Collate 
    options.NumberOfCopies = _Copies 
    ' TODO: Implement_startPageN and _endPageN 
    Dim optPrint As CrystalDecisions.ReportAppServer.ReportDefModel.PrintOptions 
    optPrint = rpt.ReportClientDocument.PrintOutputController.GetPrintOptions 
    optPrint.PrinterName = _PrinterName             rpt.ReportClientDocument.PrintOutputController.ModifyPrintOptions(optPrint) 
    rpt.ReportClientDocument.PrintOutputController.PrintReport(options) 
    rpt.Close() 
End Using