Skip to content

Commit

Permalink
Merge pull request #117 from barnhill/update-drawing-common
Browse files Browse the repository at this point in the history
Update to 5.0.0 of System.Drawing.Common, Add JSON Serialization
  • Loading branch information
barnhill committed Feb 20, 2021
2 parents 3a0fa89 + 82f4927 commit 9582829
Show file tree
Hide file tree
Showing 6 changed files with 472 additions and 287 deletions.
135 changes: 79 additions & 56 deletions BarcodeStandard/BarcodeLib.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
using BarcodeStandard;
using System.Xml.Serialization;
using System.Security;
using System.Xml;
using System.Text;
using System.Text.Json;

/*
* ***************************************************
Expand All @@ -21,7 +24,6 @@
* barcode images from a string of data. *
* ***************************************************
*/
[assembly: AllowPartiallyTrustedCallers]
namespace BarcodeLib
{
#region Enums
Expand All @@ -33,6 +35,7 @@ public enum LabelPositions : int { TOPLEFT, TOPCENTER, TOPRIGHT, BOTTOMLEFT, BOT
/// <summary>
/// Generates a barcode image of a specified symbology from a string of data.
/// </summary>
[SecuritySafeCritical]
public class Barcode : IDisposable
{
#region Variables
Expand All @@ -46,7 +49,6 @@ public class Barcode : IDisposable
private Color _BackColor = Color.White;
private int _Width = 300;
private int _Height = 150;
private string _XML = "";
private ImageFormat _ImageFormat = ImageFormat.Jpeg;
private Font _LabelFont = new Font("Microsoft Sans Serif", 10 * DotsPerPointAt96Dpi, FontStyle.Bold, GraphicsUnit.Pixel);
private LabelPositions _LabelPosition = LabelPositions.BOTTOMCENTER;
Expand Down Expand Up @@ -253,13 +255,6 @@ public double EncodingTime
set;
}
/// <summary>
/// Gets the XML representation of the Barcode data and image.
/// </summary>
public string XML
{
get { return _XML; }
}
/// <summary>
/// Gets or sets the image format to use when encoding and returning images. (Jpeg is default)
/// </summary>
public ImageFormat ImageFormat
Expand Down Expand Up @@ -408,8 +403,6 @@ internal Image Encode()

this.EncodingTime = ((TimeSpan)(DateTime.Now - dtStartTime)).TotalMilliseconds;

_XML = GetXML();

return EncodedImage;
}//Encode

Expand Down Expand Up @@ -1057,43 +1050,59 @@ public ImageSize GetSizeOfImage(bool Metric)
#endregion

#region XML Methods
private string GetXML()

private SaveData GetSaveData(Boolean includeImage = true)
{
SaveData saveData = new SaveData();
saveData.Type = EncodedType.ToString();
saveData.RawData = RawData;
saveData.EncodedValue = EncodedValue;
saveData.EncodingTime = EncodingTime;
saveData.IncludeLabel = IncludeLabel;
saveData.Forecolor = ColorTranslator.ToHtml(ForeColor);
saveData.Backcolor = ColorTranslator.ToHtml(BackColor);
saveData.CountryAssigningManufacturingCode = Country_Assigning_Manufacturer_Code;
saveData.ImageWidth = Width;
saveData.ImageHeight = Height;
saveData.RotateFlipType = RotateFlipType;
saveData.LabelPosition = (int)LabelPosition;
saveData.LabelFont = LabelFont.ToString();
saveData.ImageFormat = ImageFormat.ToString();
saveData.Alignment = (int)Alignment;

//get image in base 64
if (includeImage)
{
using (MemoryStream ms = new MemoryStream())
{
EncodedImage.Save(ms, ImageFormat);
saveData.Image = Convert.ToBase64String(ms.ToArray(), Base64FormattingOptions.None);
}//using
}
return saveData;
}
public string ToJSON(Boolean includeImage = true)
{
byte[] bytes = JsonSerializer.SerializeToUtf8Bytes(GetSaveData(includeImage));
return (new UTF8Encoding(false)).GetString(bytes); //no BOM
}

public string ToXML(Boolean includeImage = true)
{
if (EncodedValue == "")
throw new Exception("EGETXML-1: Could not retrieve XML due to the barcode not being encoded first. Please call Encode first.");
else
{
try
{
using (SaveData xml = new SaveData())
using (SaveData xml = GetSaveData(includeImage))
{
xml.Type = EncodedType.ToString();
xml.RawData = RawData;
xml.EncodedValue = EncodedValue;
xml.EncodingTime = EncodingTime;
xml.IncludeLabel = IncludeLabel;
xml.Forecolor = ColorTranslator.ToHtml(ForeColor);
xml.Backcolor = ColorTranslator.ToHtml(BackColor);
xml.CountryAssigningManufacturingCode = Country_Assigning_Manufacturer_Code;
xml.ImageWidth = Width;
xml.ImageHeight = Height;
xml.RotateFlipType = RotateFlipType;
xml.LabelPosition = (int)LabelPosition;
xml.LabelFont = LabelFont.ToString();
xml.ImageFormat = ImageFormat.ToString();
xml.Alignment = (int)Alignment;

//get image in base 64
using (MemoryStream ms = new MemoryStream())
{
EncodedImage.Save(ms, ImageFormat);
xml.Image = Convert.ToBase64String(ms.ToArray(), Base64FormattingOptions.None);
}//using

XmlSerializer writer = new XmlSerializer(typeof(SaveData));
StringWriter sw = new StringWriter();
writer.Serialize(sw, xml);
return sw.ToString();
using (Utf8StringWriter sw = new Utf8StringWriter())
{
writer.Serialize(sw, xml);
return sw.ToString();
}
}//using
}//try
catch (Exception ex)
Expand All @@ -1102,36 +1111,46 @@ private string GetXML()
}//catch
}//else
}
public static SaveData GetSaveDataFromFile(string fileContents)
public static SaveData FromJSON(Stream jsonStream)
{
using (jsonStream)
{
if (jsonStream is MemoryStream)
{
return JsonSerializer.Deserialize<SaveData>(((MemoryStream)jsonStream).ToArray());
}
else
{
using (var memoryStream = new MemoryStream())
{
jsonStream.CopyTo(memoryStream);
return JsonSerializer.Deserialize<SaveData>(memoryStream.ToArray());
}
}

}
}
public static SaveData FromXML(Stream xmlStream)
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(SaveData));
SaveData saveData;
using (TextReader reader = new StringReader(fileContents))
using (XmlReader reader = XmlReader.Create(xmlStream))
{
saveData = (SaveData)serializer.Deserialize(reader);
return (SaveData)serializer.Deserialize(reader);
}

return saveData;
}//try
catch (Exception ex)
{
throw new Exception("EGETIMAGEFROMXML-1: " + ex.Message);
}//catch
}
public static Image GetImageFromXML(String internalXML)
public static Image GetImageFromSaveData(SaveData saveData)
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(SaveData));
SaveData result;
using (TextReader reader = new StringReader(internalXML))
{
result = (SaveData)serializer.Deserialize(reader);
}
//loading it to memory stream and then to image object
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(result.Image)))
using (MemoryStream ms = new MemoryStream(Convert.FromBase64String(saveData.Image)))
{
return Image.FromStream(ms);
}//using
Expand All @@ -1141,6 +1160,11 @@ public static Image GetImageFromXML(String internalXML)
throw new Exception("EGETIMAGEFROMXML-1: " + ex.Message);
}//catch
}

public class Utf8StringWriter : StringWriter
{
public override Encoding Encoding => new UTF8Encoding(false);
}
#endregion

#region Static Encode Methods
Expand Down Expand Up @@ -1169,7 +1193,7 @@ public static Image DoEncode(TYPE iType, string Data, ref string XML)
using (Barcode b = new Barcode())
{
Image i = b.Encode(iType, Data);
XML = b.XML;
XML = b.ToXML();
return i;
}//using
}
Expand Down Expand Up @@ -1259,7 +1283,7 @@ public static Image DoEncode(TYPE iType, string Data, bool IncludeLabel, Color D
{
b.IncludeLabel = IncludeLabel;
Image i = b.Encode(iType, Data, DrawColor, BackColor, Width, Height);
XML = b.XML;
XML = b.ToXML();
return i;
}//using
}
Expand All @@ -1286,7 +1310,6 @@ protected virtual void Dispose(bool disposing)
_Encoded_Image?.Dispose();
_Encoded_Image = null;

_XML = null;
Raw_Data = null;
Encoded_Value = null;
_Country_Assigning_Manufacturer_Code = null;
Expand Down
9 changes: 5 additions & 4 deletions BarcodeStandard/BarcodeStandard.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>2.2.10</Version>
<Version>2.3.0</Version>
<PackageId>BarcodeLib</PackageId>
<Company>Pnuema Productions</Company>
<Product>BarcodeLib</Product>
Expand All @@ -19,16 +19,17 @@
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageIcon>upca.jpg</PackageIcon>
<PackageIconUrl />
<AssemblyVersion>2.2.10.0</AssemblyVersion>
<FileVersion>2.2.10.0</FileVersion>
<AssemblyVersion>2.3.0.0</AssemblyVersion>
<FileVersion>2.3.0.0</FileVersion>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.0-beta-20204-02" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="System.Drawing.Common" Version="4.5.1" />
<PackageReference Include="System.Drawing.Common" Version="5.0.0" />
<PackageReference Include="System.Text.Json" Version="5.0.1" />
</ItemGroup>

<ItemGroup>
Expand Down
3 changes: 3 additions & 0 deletions BarcodeStandard/Release Notes.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
Release Notes for BarcodeLib.dll
================================
2.3.0.0
- Fix EAN13 country code lookup failure
- Update to System.Drawing.Common 5.0.0
2.2.10.0
- Fix Standard 2 of 5 encoding bug
2.2.9.0
Expand Down
5 changes: 0 additions & 5 deletions BarcodeStandardExample/BarcodeStandardExample.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,5 @@
<ItemGroup>
<Content Include="Barcode.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="System.Drawing.Common">
<Version>4.5.1</Version>
</PackageReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
Loading

0 comments on commit 9582829

Please sign in to comment.