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();