Ovo je klasa za rad sa klasicnim matricnim stampacem:
Code:
public class StampaMatricni
{
public struct SpecijalniKarakteri
{
public static byte[] NormalScript = new byte[] { 27, 18 };
public static byte[] SuperScript = new byte[] { 27, 83,0 };
public static byte[] SubScript = new byte[] { 27, 83, 1 };
public static byte[] NormalHeight = new byte[] { 27, 119, 0 };
public static byte[] Condensed = new byte[] { 27, 15 };
public static byte[] NoviRed = new byte[] { 13, 10 };
public static byte[] NovaStrana = new byte[] { 13, 12 };
public static byte[] UnderlineON = new byte[] { 27, 80, 5 };
public static byte[] UnderlineOFF = new byte[] { 27, 80, 6 };
public static byte[] BoldON = new byte[] { 27, 80, 1 };
public static byte[] BoldOFF = new byte[] { 27, 80, 2 };
public static byte[] ItalicsON = new byte[] { 27, 80, 3 };
public static byte[] ItalicsOFF = new byte[] { 27, 80, 4 };
}
public static FileStream Printer;
public string LPTPort;
[DllImport("Kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern SafeFileHandle CreateFile(
string fileName,
[MarshalAs(UnmanagedType.U4)] FileAccess fileAccess,
[MarshalAs(UnmanagedType.U4)] FileShare fileShare,
IntPtr securityAttributes,
[MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
[MarshalAs(UnmanagedType.U4)] FileAttributes flags,
IntPtr template);
/// <summary>
///
/// Konstruktor klase
/// </summary>
/// <param name="LPTPort">LPT port na kome se nalazi stampac</param>
public StampaMatricni(string LPTPort)
{
this.LPTPort = LPTPort;
}
/// <summary>
///
/// Default konstruktor, podrazumeva da je port LPT1
/// </summary>
public StampaMatricni()
{
this.LPTPort = "LPT1";
}
/// <summary>
/// Kreira fajl za upis tj. zapocinje stampu na stampacu...
///
/// Posle zavrsene stampe MORA se pozvati f-ja
///
/// ZavrsiStampu()
/// </summary>
public void ZapocniStampu()
{
SafeFileHandle ptr = CreateFile(LPTPort, //lpt name
FileAccess.ReadWrite, //za stampac bi bilo normalno da se koristi samo GENERIC_WRITE, ali zbog mogucnosti koriscenja preko mreze mora i GENERIC_READ
0, //Share Mode
IntPtr.Zero, //Security attributes
FileMode.Open, //Creation disposition
0, //flags&attributes
IntPtr.Zero); //template
if (ptr.IsInvalid) //Ako je doslo do greske
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error()); //Prosledi Win32 gresku pri otvaranju u C# Exception
else
Printer = new FileStream(ptr, FileAccess.ReadWrite);
}
/// <summary>
/// Stampa text na stampac
/// </summary>
/// <param name="str">String za stampu</param>
public void OdstampajString(string str)
{
byte[] Buff = Encoding.ASCII.GetBytes(str);
Printer.Write(Buff, 0, Buff.Length);
Printer.Flush();
}
/// <summary>
/// Stampa text na stampac i prelazi u novi red
/// </summary>
/// <param name="str">String za stampu</param>
public void OdstampajLiniju(string str)
{
byte[] Buff = Encoding.ASCII.GetBytes(str);
Printer.Write(Buff, 0, Buff.Length);
this.OdstampajSpecijalneKaraktere(SpecijalniKarakteri.NoviRed);
Printer.Flush();
}
/// <summary>
/// Stampanje specijalnog niza karaktera, za formatiranje izlaza stampaca
/// </summary>
/// <param name="niz">niz bajtova(karaktera) za formatiranje</param>
public void OdstampajSpecijalneKaraktere(byte[] niz)
{
Printer.Write(niz, 0, niz.Length);
}
/// <summary>
/// Zatvara LPT port...
/// </summary>
public void ZavrsiStampu()
{
Printer.Close();
}
}
Npr
http://www.superwarehouse.com/...x_Printer/C11C640001/p/1488975
E sad ako mislis na fiskalne racune, tu su stvari komplikovanije posto to zavisi od modela do modela fiskalne kase, mada za svaku bi trebao da postoji drajver , odnosto third party program preko kog ide komunikacija sa kasom...