C# .net8 的console 專案 指定對應熱敏印表機驅動 並使用 PrintDocument 設定紙張大小撰寫一個完整的列印文字和繪製方形的範例
C# .net8 的console 專案 指定對應熱敏印表機驅動 並使用 PrintDocument 設定紙張大小撰寫一個完整的列印文字和繪製方形的範例
資料來源: chatgpt
GITHUB: https://github.com/jash-git/CS_PrintDocument_ThermalPrinter
01.安裝元件:
dotnet add package System.Drawing.Common
02.code
using System;
using System.Drawing;
using System.Drawing.Printing;
class Program
{
static void Main()
{
string targetPrinterName = "POS-80C"; // 替換成你實際的熱感印表機名稱
PrintDocument printDoc = new PrintDocument();
// 指定印表機
bool found = false;
foreach (string printer in PrinterSettings.InstalledPrinters)
{
if (printer.Equals(targetPrinterName, StringComparison.OrdinalIgnoreCase))
{
printDoc.PrinterSettings.PrinterName = printer;
found = true;
break;
}
}
if (!found)
{
Console.WriteLine($"找不到印表機:{targetPrinterName}");
return;
}
// 設定邊界為 0
printDoc.DefaultPageSettings.Margins = new Margins(70, 0, 0, 0);
// 自訂紙張大小:寬 80mm,高 100mm(1mm ≈ 3.937 尺寸單位)
int width = (int)(80 * 3.937); // 約 315
int height = 600;//(int)(100 * 3.937); // 約 394
PaperSize paperSize = new PaperSize("Custom_80mm", width, height);
printDoc.DefaultPageSettings.PaperSize = paperSize;
// 加入列印事件
printDoc.PrintPage += (sender, e) =>
{
Graphics g = e.Graphics;
Font font = new Font("Arial", 10);
Brush brush = Brushes.Black;
int y = 10;
// 列印標題
g.DrawString("收據列印示範", new Font("Arial", 12, FontStyle.Bold), brush, 0, y);
y += 30;
// 繪製文字
g.DrawString("商品:測試產品", font, brush, 10, y);
y += 20;
g.DrawString("數量:2", font, brush, 10, y);
y += 20;
g.DrawString("總價:NT$200", font, brush, 10, y);
y += 30;
// 繪製方形區塊(模擬框)
Pen pen = new Pen(Color.Black, 1);
Rectangle rect = new Rectangle(5, y, 200, 300);//3.937pixel≒1mm (200=50nn,300=76mm)
g.DrawRectangle(pen, rect);
g.DrawString("感謝您的購買!", font, brush, 10, y + 15);
e.HasMorePages = false;
};
try
{
printDoc.Print();
Console.WriteLine("列印工作已送出!");
}
catch (Exception ex)
{
Console.WriteLine("列印失敗:" + ex.Message);
}
}
}