Windodws下使用 PrintDocument进行打印。 使用这个进行打印就象是使用GDI+画图一样。你画出什么打印机就会打出什么。 也可以直接打印图片。
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;
public static void PrintTag(string html)
{
try
{
var dpi = 203;
var imageWidth = 318;
var printerWidth = 158;
var imageHeight = 208;
var htmlToImageConv = new NReco.ImageGenerator.HtmlToImageConverter();
htmlToImageConv.Width = imageWidth;
var jpegBytes = htmlToImageConv.GenerateImage(html, NReco.ImageGenerator.ImageFormat.Bmp);
PrintDocument pd = new PrintDocument();
pd.DocumentName = $"tag{name}-{index}";
using (var ms = new MemoryStream(jpegBytes))
{
var image = new Bitmap(ms);
image.SetResolution(dpi, dpi);
image.Save($"./temp/tag{name}-{index}.png");
//pd.PrintController = new StandardPrintController();
pd.DefaultPageSettings.PrinterSettings.PrinterName = "Microsoft Print to PDF"; //你打印机的名称
pd.DefaultPageSettings.Landscape = false; //or false!
pd.PrintPage += (sender, args) =>
{
var pageunit = args.Graphics.PageUnit;
var actualHeight = (int)decimal.Floor((decimal)image.Height / dpi * 100m);
Rectangle m = new Rectangle(0, 0, printerWidth, actualHeight);
//args.Graphics.DrawImageUnscaled(bitmap, m);
//args.Graphics.DrawString("混塔 去皮值 ", new Font("宋体", 9), Brushes.Black, new PointF(0, 0));
args.Graphics.DrawImageUnscaled(image, m);
};
}
pd.Print();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
}
上面的代码我们是 把Html 转成图片,然后用PrintDocumetn把这个图片直接打印出来。 (影响了性能。)
很多时候我们的小票是比较固定的模式。我们也可以使用HuanentPrinter来做。