diff --git a/ESCPOS_NET.UnitTest/EmittersBased/EPSONTests/ImageCommandsTests.cs b/ESCPOS_NET.UnitTest/EmittersBased/EPSONTests/ImageCommandsTests.cs new file mode 100644 index 0000000..e1ac2d4 --- /dev/null +++ b/ESCPOS_NET.UnitTest/EmittersBased/EPSONTests/ImageCommandsTests.cs @@ -0,0 +1,23 @@ +using ESCPOS_NET.Emitters; +using SixLabors.Fonts; +using SixLabors.ImageSharp; +using Xunit; + +namespace ESCPOS_NET.UnitTest.EmittersBased.EPSONTests +{ + public class ImageCommandsTests + { + [Fact] + public void RasterisesText_Success() + { + var epson = new EPSON(); + FontCollection collection = new FontCollection(); + FontFamily family = collection.Install("c://windows/fonts/arial.ttf"); + + byte[] rawImage = epson.PrintRasterizedText("Hello world!", family, 24); + var renderedImage = Image.Load(rawImage); + + // compare to a fixture? + } + } +} diff --git a/ESCPOS_NET/ESCPOS_NET.csproj b/ESCPOS_NET/ESCPOS_NET.csproj index 8173346..4770ea2 100644 --- a/ESCPOS_NET/ESCPOS_NET.csproj +++ b/ESCPOS_NET/ESCPOS_NET.csproj @@ -27,6 +27,7 @@ + diff --git a/ESCPOS_NET/Emitters/BaseCommandEmitter/ImageCommands.cs b/ESCPOS_NET/Emitters/BaseCommandEmitter/ImageCommands.cs index e711b3a..3cedaa0 100644 --- a/ESCPOS_NET/Emitters/BaseCommandEmitter/ImageCommands.cs +++ b/ESCPOS_NET/Emitters/BaseCommandEmitter/ImageCommands.cs @@ -1,7 +1,11 @@ +using System.IO; using ESCPOS_NET.Emitters.BaseCommandValues; using ESCPOS_NET.Utilities; +using SixLabors.Fonts; using SixLabors.ImageSharp; using SixLabors.ImageSharp.PixelFormats; +using SixLabors.ImageSharp.Processing; +using SixLabors.ImageSharp.Drawing.Processing; namespace ESCPOS_NET.Emitters { @@ -119,5 +123,23 @@ public virtual byte[] PrintImage(byte[] image, bool isHiDPI, bool isLegacy = fal return ByteSplicer.Combine(SetImageDensity(isHiDPI), BufferImage(image, maxWidth, isLegacy, color), WriteImageFromBuffer()); } } + + public virtual byte[] PrintRasterizedText(string text, FontFamily fontFamily, float size, FontStyle fontStyle = FontStyle.Regular) + { + var font = fontFamily.CreateFont(size, fontStyle); + + TextOptions textOptions = new TextOptions(font); + var rect = TextMeasurer.Measure(text, textOptions); + + Image image = new Image((int)rect.Width, (int)rect.Height); + image.Mutate(x => x.DrawText(text, font, SixLabors.ImageSharp.Color.Black, new PointF(0, 0))); + + var memoryStream = new MemoryStream(); + image.SaveAsPng(memoryStream); + var bytes = memoryStream.ToArray(); + memoryStream.Dispose(); + + return PrintImage(bytes, true); + } } } diff --git a/ESCPOS_NET/Emitters/ICommandEmitter.cs b/ESCPOS_NET/Emitters/ICommandEmitter.cs index a4d7483..f3f277e 100644 --- a/ESCPOS_NET/Emitters/ICommandEmitter.cs +++ b/ESCPOS_NET/Emitters/ICommandEmitter.cs @@ -1,3 +1,5 @@ +using SixLabors.Fonts; + namespace ESCPOS_NET.Emitters { public interface ICommandEmitter @@ -67,6 +69,8 @@ public interface ICommandEmitter byte[] PrintImage(byte[] image, bool isHiDPI, bool isLegacy = false, int maxWidth = -1, int color = 1); + byte[] PrintRasterizedText(string text, FontFamily fontFamily, float size, FontStyle fontStyle = FontStyle.Regular); + /* Status Commands */ byte[] EnableAutomaticStatusBack();