App.xaml.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. using FastReport;
  2. using FastReport.Forms;
  3. using FastReport.Utils;
  4. using System;
  5. using System.Drawing.Printing;
  6. using System.IO;
  7. using System.Runtime.Serialization.Formatters.Binary;
  8. using System.Windows;
  9. namespace Viewer
  10. {
  11. public partial class App : Application
  12. {
  13. private void Application_Startup(object sender, StartupEventArgs e)
  14. {
  15. this.ShutdownMode = ShutdownMode.OnExplicitShutdown;
  16. Config.PreviewSettings.ShowInTaskbar = true;
  17. Config.ReportSettings.ShowProgress = false;
  18. Config.IsStringOptimization = true;
  19. var parser = new CmdParser(e.Args);
  20. if (parser.HasCommand("/p"))
  21. {
  22. Print(parser[CmdParser.DEFAULT_KEY], parser["/p"]);
  23. }
  24. else
  25. {
  26. Default(parser[CmdParser.DEFAULT_KEY]);
  27. }
  28. this.Shutdown();
  29. }
  30. private void Print(string[] reports, string[] args)
  31. {
  32. PrinterSettings printerSettings;
  33. if (args == null || args.Length == 0 || reports == null || reports.Length == 0)
  34. {
  35. using (var r = new Report())
  36. {
  37. if (r.ShowPrintDialog(out printerSettings))
  38. {
  39. if (reports == null || reports.Length == 0)
  40. {
  41. string print_arg = SerializeToString(printerSettings);
  42. CmdParser parser = new CmdParser();
  43. parser[CmdParser.DEFAULT_KEY] = new string[] { "report1.fpx", "report2.fpx", "...", "reportN.fpx" };
  44. parser["/p"] = new string[] { print_arg };
  45. using (var form = new MessageBoxWithEditorForm())
  46. {
  47. form.InnerText = parser.ToString();
  48. form.ShowDialog();
  49. }
  50. }
  51. else
  52. {
  53. Print(reports, printerSettings);
  54. }
  55. }
  56. }
  57. }
  58. else
  59. {
  60. printerSettings = DeserializeFromString(args[0]);
  61. Print(reports, printerSettings);
  62. }
  63. }
  64. private void Print(string[] reports, PrinterSettings printerSettings)
  65. {
  66. foreach (string report in reports)
  67. {
  68. using (var r = new Report())
  69. {
  70. r.LoadPrepared(report);
  71. r.PrintPrepared(printerSettings);
  72. }
  73. }
  74. }
  75. private void Default(string[] reports)
  76. {
  77. using (var report = new Report())
  78. {
  79. if (reports != null && reports.Length > 0)
  80. {
  81. report.LoadPrepared(reports[0]);
  82. }
  83. else
  84. {
  85. report.Prepare();
  86. }
  87. report.ShowPrepared();
  88. }
  89. }
  90. private string SerializeToString(PrinterSettings printerSettings)
  91. {
  92. var bf = new BinaryFormatter();
  93. using (var ms = new MemoryStream())
  94. {
  95. bf.Serialize(ms, printerSettings);
  96. return Convert.ToBase64String(ms.ToArray());
  97. }
  98. }
  99. private PrinterSettings DeserializeFromString(string printerSettings)
  100. {
  101. try
  102. {
  103. var bf = new BinaryFormatter();
  104. using (var ms = new MemoryStream(Convert.FromBase64String(printerSettings)))
  105. {
  106. return (PrinterSettings)bf.Deserialize(ms);
  107. }
  108. }
  109. catch (Exception)
  110. {
  111. return new PrinterSettings();
  112. }
  113. }
  114. }
  115. }