BarcodePharmacode.cs 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. using System.ComponentModel;
  3. using System.Text;
  4. namespace FastReport.Barcode
  5. {
  6. /// <summary>
  7. /// Generates the Pharmacode barcode.
  8. /// </summary>
  9. public class BarcodePharmacode : LinearBarcodeBase
  10. {
  11. private bool quietZone;
  12. /// <summary>
  13. /// Gets or sets the value indicating that quiet zone must be shown.
  14. /// </summary>
  15. [DefaultValue(true)]
  16. public bool QuietZone
  17. {
  18. get { return quietZone; }
  19. set { quietZone = value; }
  20. }
  21. /// <inheritdoc/>
  22. public override bool IsNumeric
  23. {
  24. get { return true; }
  25. }
  26. /// <summary>
  27. /// Initializes a new instance of the <see cref="BarcodePharmacode"/> class with default settings.
  28. /// </summary>
  29. public BarcodePharmacode()
  30. {
  31. QuietZone = true;
  32. }
  33. internal override string GetPattern()
  34. {
  35. ulong value = ulong.Parse(text);
  36. value += 1;
  37. string binary = Convert.ToString((long)value, 2);
  38. if (binary.StartsWith("1"))
  39. binary = binary.Remove(0, 1);
  40. const string space = "2";
  41. StringBuilder result = new StringBuilder();
  42. if (QuietZone)
  43. result.Append(space);
  44. foreach (char c in binary)
  45. {
  46. switch (c)
  47. {
  48. case '0':
  49. result.Append("5");
  50. result.Append(space);
  51. break;
  52. case '1':
  53. result.Append("7");
  54. result.Append(space);
  55. break;
  56. }
  57. }
  58. if (!QuietZone && result.ToString().EndsWith(space))
  59. result.Remove(result.Length - space.Length, space.Length);
  60. return result.ToString();
  61. }
  62. /// <inheritdoc/>
  63. public override void Assign(BarcodeBase source)
  64. {
  65. base.Assign(source);
  66. BarcodePharmacode src = source as BarcodePharmacode;
  67. QuietZone = src.QuietZone;
  68. }
  69. internal override void Serialize(FastReport.Utils.FRWriter writer, string prefix, BarcodeBase diff)
  70. {
  71. base.Serialize(writer, prefix, diff);
  72. BarcodePharmacode c = diff as BarcodePharmacode;
  73. if (c == null || QuietZone != c.QuietZone)
  74. writer.WriteBool(prefix + "QuietZone", QuietZone);
  75. }
  76. }
  77. }