Ciao a tutti! 
Ho fatto un semplice programma di base, pensato per un negozio, in cui l'utente inserisce in un TextBox i codici dei prodotti, che vengono aggiunti ad una lista e vengono decrementate le scorte di magazzino registrate in un DB SQL Server 2008. Quando l'utente clicca sul pulsante Termina, voglio che venga stampato lo scontrino.
E' la prima volta che provo a fare un programma del genere, quindi non ho idea di come implementare la stampa di uno scontrino in maniera professionale. Al momento sto usando questo codice:
codice:
private void btnTermina_Click(object sender, EventArgs e)
{
dc.SubmitChanges();
CreaScontrino();
try
{
printDocument1.Print();
}
catch (Exception ex)
{
MessageBox.Show("Impossibile stampare lo scontrino.\n\nDettagli:\n"+ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
}
private void CreaScontrino()
{
PaperSize ps = new PaperSize();
ps.PaperName = "Scontrino";
ps.RawKind = (int)PaperKind.Custom;
ps.Width = 154;
ps.Height = 254;
printDocument1.DefaultPageSettings.PaperSize = ps;
}
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
StringFormat sf = new StringFormat();
//sf.Alignment = StringAlignment.Center;
Font grassetto = new Font(this.Font, FontStyle.Bold);
e.Graphics.DrawString("*** INTESTAZIONE ***", grassetto, new SolidBrush(Color.Black), new Rectangle(5, 5, e.PageBounds.Width, 5), sf);
int nriga = 1;
foreach (ProdottoAcquistato pa in spesa)
{
string riga = pa.Nome + " x " + pa.Quantita + " " + char.ToString((char)8364) + (pa.Prezzo * pa.Quantita).ToString("F2");
e.Graphics.DrawString(riga, this.Font, new SolidBrush(Color.Black), new Rectangle(5, 10 + 5*nriga, e.PageBounds.Width, 10), sf);
nriga++;
}
e.Graphics.DrawString("Totale: " + char.ToString((char)8364) + labelTotale.Text, grassetto, new SolidBrush(Color.Black), new Rectangle(5, 10 + 5 * nriga + 5, e.PageBounds.Width, 10), sf);
e.HasMorePages = false;
}
Mi rendo conto che è un modo molto approssimativo, perchè in un caso reale io non posso sapere quanto sarà lungo lo scontrino, quindi non posso determinare a priori la proprietà paperSize.Height.
Devo utilizzare delle API specifiche per una stampante fiscale?
Inoltre, come faccio a centrare l'intestazione e ad allineare a sinistra i nomi dei prodotti e a destra il prezzo? E per andare a capo se il nome del prodotto e troppo lungo?
Vi ringrazio in anticipo per il vostro aiuto!