[ w3bl0rd @ 11.01.2010. 08:38 ] @
dobio sam neku ponudu da izradim program, sve mi je jasno unaprijed i znam kako napraviti sve osim jedne stavke pa me zanima mišljenje iskusnijih jer to još nisam radio...
Naime zanima me ispis standardnog računa kakav se dobije u dučanu, birtiji, ne znam...
znači to je u večini slučajeva onaj stari matrični printer. Moje pitanje je dali tu treba nešt posebno postavljati ispis ili je postupak potpuno jednak ko i za normalni printer samo bi trebalo prilagoditi dimenzije?
Nemogu probat jer nemam matrični printer :)
projekt ću raditi u .NET-u

@mods:
sorry nisam znao kamo da stavim pa sam puknuo tu...
[ Igor Gajic @ 11.01.2010. 17:35 ] @
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...
[ w3bl0rd @ 12.01.2010. 06:51 ] @
puno hvala!!! budem kasnije pogledao to malo, nek zanima me ima li možda i koji emulator il nešt da to puca u pdf il neku sliku da ja vidim kak će to opće izgledati bez printanja?
[ Igor Gajic @ 12.01.2010. 07:20 ] @
Mozes pozvati konstruktor klase sa:

StampaMatricni("c:\\testPrint.txt");


i onda ce sva stampa ici u taj fajl a ne na LPT port.

Iako deluje da ti ovo resava sve probleme, ne preporucujem ti pravljenje programa bez da odstampas nekoliko stranica na pravom matricnom stampacu.
[ w3bl0rd @ 12.01.2010. 08:14 ] @
naravno :) ok zahvaljujem još jednom