Impressao de Nota Fiscal em Formulario Continuo

04/02/2009

Olá Bom eu tenho a seguinte situação, estou precisando programar um rotina de impressão de nota fiscal e não sei por onde começar, eu tive a idéia inicial de usar o PrintDocument Bom a questão e a seguinte será que vcs não teria o caminho das pedras para que eu possa começar a programar essa rotina? Detalhe eu estou trabalhando com Windows Form e optei por postar aqui por acreditar que vcs tenham mais experiência nesse tipo de situação. Fico no aguardo de uma resposta, e agradeço desde já
Daniel Porfirio

Daniel Porfirio

Curtidas 0

Respostas

Luiz Maia

Luiz Maia

04/02/2009

Olá Daniel, tudo bom?   Caso seja um impressora fiscal alguns fornecedores fornecem DLLs e componentes para que seja feito a implementação no sistema.   Caso seja uma impressora normal e a folha tenha um desenho próprio você pode utilizar o próprio comando objeto printer e ir na base da tentativa e erro para achar as posições corretas.   Se vc estiver criando uma nova class apartir da PrintDocument. ai vai ...       public partial class NotaFiscal : Form
    {
        class ImprimeNF : PrintDocument
        {
            public Single linesPerPage;
            public Single yPos;
            public Int32 count;
            public Single leftMargin;
            public Single topMargin;
            public Font printFont;
            public DataTableReader dr;
            public bool fimRelatorio = false;
            public PrintPageEventArgs imprime_ev;             public string Codigo
            {
                get { return this.dr.GetString(0).ToString(); }
            }             public ImprimeNF(DataTable Tabela)
            {
                linesPerPage = 0;
                yPos = 0;
                count = 0;
                leftMargin = 0;
                topMargin = 0;
                printFont = new Font("arial", 10);
                dr = new DataTableReader(Tabela);
            }
            internal void Cabec()
            {
                string line = "";
                for (int i = 0; i < dr.FieldCount; i++)
                {
                    line += dr.GetName(i) + " ";
                }
                ImprimeLinha(line);
                count = 2;
                yPos = topMargin + (count * printFont.GetHeight(imprime_ev.Graphics));             }
            internal void Imprime()
            {
                ImprimeLinha(Codigo);
                count++;
                yPos = topMargin + (count * printFont.GetHeight(imprime_ev.Graphics));
            }
            private void ImprimeLinha(string line)
            {
                imprime_ev.Graphics.DrawString(line, printFont, Brushes.Black,
                    leftMargin, yPos, new StringFormat());
            }
            internal void Rodape()
            {
               
            }
        }
        DataSet.DadosNF dadosNF;
        public NotaFiscal()
        {
            InitializeComponent();
        }         private void NotaFiscal_Load(object sender, EventArgs e)
        {
            this.dadosNFTableAdapter.Fill(this.dataSet.DadosNF);
            dadosNF = this.dataSet.DadosNF;         }         private void button1_Click(object sender, EventArgs e)
        {
            Imprime();
        }
        private void Imprime()
        {
            ImprimeNF pd = new ImprimeNF(dadosNF);
            pd.PrintPage += new PrintPageEventHandler(pd_PrintPage);
            pd.DocumentName = "Nota Fiscal";
            pd.fimRelatorio = false;
            pd.Print();
            pd = null;
        }         void pd_PrintPage(object sender, PrintPageEventArgs ev)
        {
            bool temItens = false;
            ImprimeNF pd = (ImprimeNF)sender;
            pd.imprime_ev = ev;             // Calcula o numero de linhas por pagina
            pd.linesPerPage = ev.MarginBounds.Height /
               pd.printFont.GetHeight(ev.Graphics);
            pd.leftMargin = ev.MarginBounds.Left;
            pd.topMargin = ev.MarginBounds.Top;             pd.Cabec();             temItens = pd.dr.Read ();             while ( temItens )
            {
                pd.Imprime();
                pd.count++;
                if (pd.count > pd.linesPerPage)
                {
                    break;
                }
                temItens = pd.dr.Read ();
            }
            pd.Rodape();             if (temItens) ev.HasMorePages = true;
            else ev.HasMorePages = false;
        }
    }     A Classe ImprimeNF precisa de um objecto DataTable. Uma Nota fiscal usa varias tabelas, acima é so um exemplo básico. Fique avontade para alterá-lo.   Espero que ajude e aguardo seu retorno.   Abraços   Att Luiz Maia  
GOSTEI 0
Luiz Maia

Luiz Maia

04/02/2009

Olá Daniel,   Como não obtivemos resposta ou feedback, estamos concluindo o chamado. Lembrando que continuamos a sua disposição.   Abraços Att, Luiz Maia
GOSTEI 0
POSTAR