[英]Magnetic stripe printing: Where to start?
這是與ID卡打印相關的WPF桌面應用程序。 我們嘗試添加的新功能之一是磁條編碼。 花了幾天后,我仍然不確定從哪里開始。 谷歌搜索更多新問題。 我將在這里對其進行總結。 我很高興收到專家的來信(即使有人可以回答一個/某些問題):
PrintDialog
, FixedDocument
等完成)將磁條數據發送到打印機。 我目前正在從事類似的WPF項目,該項目需要磁編碼以及ID卡上的圖像打印。 我發現只要主機上安裝了具有磁性編碼的打印機驅動程序,磁性編碼就非常簡單。 需要注意的一個重要方面是駕駛員使用的定界符。 可以為NULL,零或空格。 在對特定音軌(即音軌2而不是我們的音軌1)進行編碼時,這會起作用。 我使用NULL設置,該設置僅允許在作業中發送Track 2數據。 在Fargo打印機的打印機首選項(控制面板->硬件和聲音->設備和打印機->右鍵單擊打印機->打印機首選項)中可以找到此設置。 這是這些首選項的示例(請注意ASCII偏移字段):
我不認為您必須為要使用的打印機使用SDK。 我使用的是Fargo打印機,但使用PrintDocument和PrintPage編寫了自己的打印功能,用於磁性編碼和圖像。
一個示例和快速測試是使用Notepad ++(或類似版本)將Track 2數據發送到打印機。 將其復制並粘貼到編輯器的第一行並進行打印(使用證卡打印機)。
~2;000099990000?
驅動程序應了解它是“跟蹤數據”這一事實,並進行相應處理,而無需您進行任何其他輸入。 您可能需要按照說明使用打印機首選項。
〜2; 表示軌道2,后跟12個字符的數據字符串,后跟末尾(?)。 有很多有關在線跟蹤數據和布局的文檔。 這是假設一個空定界符值(在軌道1和軌道2之間)。
在卡的兩面進行打印可能很麻煩,但這似乎不在此問題的范圍內。 我建議在WPF應用程序中使用Windows本機的PrintDocument和PrintPage方法。 無論如何,您下載的SDK可能會在后台使用這些方法。
PrintDocument / PrintPage的示例:
private int PageCount { get; set; }
public void Print()
{
PageCount = 0;
PrintDocument pd = new PrintDocument
{
// Define your settings
PrinterSettings = {
Duplex = Duplex.Horizontal,
PrinterName = ConfigurationManager.AppSettings["PrinterName"]
}
};
Margins margins = new Margins(0, 0, 0, 0);
pd.OriginAtMargins = true;
pd.DefaultPageSettings.Margins = margins;
pd.PrintPage += new PrintPageEventHandler(this.PrintPage);
PrintPreviewDialog ppd = new PrintPreviewDialog();
ppd.Document = pd;
// Uncomment to show a Print Dialog box
//if (ppd.ShowDialog() == DialogResult.OK)
pd.Print();
pd.Dispose();
}
private void PrintPage(object o, PrintPageEventArgs e)
{
PrintDocument p = (PrintDocument)o;
p.DefaultPageSettings.Landscape = true;
p.DefaultPageSettings.Margins = new Margins(0, 0, 0, 0);
p.DefaultPageSettings.PaperSize = new PaperSize("YourPaperSizeName", 340, 215);
p.OriginAtMargins = true;
o = p;
e.PageSettings.PrinterSettings.DefaultPageSettings.Landscape = true;
e.PageSettings.Landscape = true;
// Do Print First Side (MAG ENCODE)
if (PageCount == 0)
{
// Do Side 1 Stuff
// If Two-Sided Printing: true
e.HasMorePages = true;
//If no more, set above to false and PageCount = 0, else...
PageCount++;
}
else
{
// Do Print on Other Side
// STUFF
// STUFF
// Since only two sides/card printing: false
e.HasMorePages = false;
PageCount = 0;
}
}
再次,磁性編碼不應該是特定於品牌的,並且您不必僅依靠其SDK來執行打印作業。
我希望這有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.