using FastReport; using FastReport.Forms; using FastReport.Utils; using System; using System.Drawing.Printing; using System.IO; using System.Runtime.Serialization.Formatters.Binary; using System.Windows; namespace Viewer { public partial class App : Application { private void Application_Startup(object sender, StartupEventArgs e) { this.ShutdownMode = ShutdownMode.OnExplicitShutdown; Config.PreviewSettings.ShowInTaskbar = true; Config.ReportSettings.ShowProgress = false; Config.IsStringOptimization = true; var parser = new CmdParser(e.Args); if (parser.HasCommand("/p")) { Print(parser[CmdParser.DEFAULT_KEY], parser["/p"]); } else { Default(parser[CmdParser.DEFAULT_KEY]); } this.Shutdown(); } private void Print(string[] reports, string[] args) { PrinterSettings printerSettings; if (args == null || args.Length == 0 || reports == null || reports.Length == 0) { using (var r = new Report()) { if (r.ShowPrintDialog(out printerSettings)) { if (reports == null || reports.Length == 0) { string print_arg = SerializeToString(printerSettings); CmdParser parser = new CmdParser(); parser[CmdParser.DEFAULT_KEY] = new string[] { "report1.fpx", "report2.fpx", "...", "reportN.fpx" }; parser["/p"] = new string[] { print_arg }; using (var form = new MessageBoxWithEditorForm()) { form.InnerText = parser.ToString(); form.ShowDialog(); } } else { Print(reports, printerSettings); } } } } else { printerSettings = DeserializeFromString(args[0]); Print(reports, printerSettings); } } private void Print(string[] reports, PrinterSettings printerSettings) { foreach (string report in reports) { using (var r = new Report()) { r.LoadPrepared(report); r.PrintPrepared(printerSettings); } } } private void Default(string[] reports) { using (var report = new Report()) { if (reports != null && reports.Length > 0) { report.LoadPrepared(reports[0]); } else { report.Prepare(); } report.ShowPrepared(); } } private string SerializeToString(PrinterSettings printerSettings) { var bf = new BinaryFormatter(); using (var ms = new MemoryStream()) { bf.Serialize(ms, printerSettings); return Convert.ToBase64String(ms.ToArray()); } } private PrinterSettings DeserializeFromString(string printerSettings) { try { var bf = new BinaryFormatter(); using (var ms = new MemoryStream(Convert.FromBase64String(printerSettings))) { return (PrinterSettings)bf.Deserialize(ms); } } catch (Exception) { return new PrinterSettings(); } } } }