C#-Druckbeleg, Vorkalkulation, RechnungC#

Ein Treffpunkt für C#-Programmierer
Guest
 C#-Druckbeleg, Vorkalkulation, Rechnung

Post by Guest »

Wenn ich weniger oder gleich 15 Elemente hinzufüge, ist es in Ordnung, aber wenn ich mehr als 15 Elemente hinzufüge, sollte es zur nächsten Seite gehen, aber das Programm erstellt unendlich viele Seiten und wenn ich Esc drücke, stoppt es, erstellt aber nur Kopien der ersten Seite, nicht 16. 17.... Element auf der nächsten Seite, kopiert nur die erste Seite unendlich oft. Es gibt keine weiteren Probleme, es druckt gut, die Verbindung zum Drucker funktioniert einwandfrei.
private void btnPrint_Click(object sender, EventArgs e)
{
// Podesite PrintDocument
printDocument1.PrintPage += new PrintPageEventHandler(PrintDocument1_PrintPage);

// Podesite PrintPreviewDialog
PrintPreviewDialog previewDialog = new PrintPreviewDialog();
previewDialog.Document = printDocument1;

// Otvaranje prozora za pregled prije štampanja
previewDialog.StartPosition = FormStartPosition.CenterScreen;
previewDialog.Width = 800; // Širina prozora
previewDialog.Height = 600; // Visina prozora
previewDialog.ShowDialog();
}

private void PrintDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
// Definišite fontove i stilove
Font headerFont = new Font("Arial", 16, FontStyle.Bold);
Font headerFont2 = new Font("Arial", 14, FontStyle.Bold | FontStyle.Underline);
Font headerFont3 = new Font("Arial", 14, FontStyle.Bold);
Font regularFont = new Font("Arial", 12);
Font regular2Font = new Font("Arial", 12, FontStyle.Bold);

Pen pen = new Pen(Color.Black, 2);

int maxRowsPerPage = 15; // Maksimalan broj redova po stranici
int rowsPrinted = 0; // Brojač ispisanih redova
int currentRowIndex = 0;

e.Graphics.DrawString("", regular2Font, Brushes.Black, e.MarginBounds.Right - 70, e.MarginBounds.Top - 85);
e.Graphics.DrawString("", regular2Font, Brushes.Black, e.MarginBounds.Right - 130, e.MarginBounds.Top - 65);
e.Graphics.DrawString("", regular2Font, Brushes.Black, e.MarginBounds.Right - 130, e.MarginBounds.Top - 45);
e.Graphics.DrawString("", regular2Font, Brushes.Black, e.MarginBounds.Right - 148, e.MarginBounds.Top - 25);

string dashedLine = "----------------------------------------------------------------------------------------------------------------------------------------";

// Logo
Image logo = Image.FromFile("");

e.Graphics.DrawImage(logo, e.MarginBounds.Left - 70, e.MarginBounds.Top, 130, 70);
e.Graphics.DrawString("", headerFont, Brushes.Black, e.MarginBounds.Left + 50, e.MarginBounds.Top + 25);

// Informacije o kupcu i datumima
e.Graphics.DrawString("Naziv kupca: ", regularFont, Brushes.Black, e.MarginBounds.Left - 40, e.MarginBounds.Top + 100);
e.Graphics.DrawString(txtKupac.Text, regular2Font, Brushes.Black, e.MarginBounds.Left - 40, e.MarginBounds.Top + 120);
e.Graphics.DrawString("Kontakt: ", regularFont, Brushes.Black, e.MarginBounds.Left - 40, e.MarginBounds.Top + 145);
e.Graphics.DrawString(txtKupacKontakt.Text, regular2Font, Brushes.Black, e.MarginBounds.Left - 40, e.MarginBounds.Top + 165);
e.Graphics.DrawString("Datum: ", regularFont, Brushes.Black, e.MarginBounds.Right - 90, e.MarginBounds.Top + 100);
e.Graphics.DrawString(textBoxDatum.Text, regular2Font, Brushes.Black, e.MarginBounds.Right - 90, e.MarginBounds.Top + 120);
e.Graphics.DrawString("Datum DPO: ", regularFont, Brushes.Black, e.MarginBounds.Right - 90, e.MarginBounds.Top + 145);
e.Graphics.DrawString(textBoxDatumDPO.Text, regular2Font, Brushes.Black, e.MarginBounds.Right - 90, e.MarginBounds.Top + 165);

// Naslov predračuna
e.Graphics.DrawString("PONUDA / PREDRAČUN", headerFont, Brushes.Black, e.MarginBounds.Left + 180, e.MarginBounds.Top + 215);

// Tabela artikala/usluga
int startX = e.MarginBounds.Left -50; // Početna X koordinata
int startY = e.MarginBounds.Top + 250; // Početna Y koordinata
int cellHeight = 30; // Visina ćelija
int colNazivWidth = 210; // Širina kolone "Naziv"
int colJedinicaWidth = 125; // Širina kolone "Jedinica mjere"
int colCijenaWidth = 125; // Širina kolone "Cijena"
int colKolicinaWidth = 125; // Širina kolone "Količina"
int colUkupnoWidth = 125; // Širina kolone "Ukupno"

// Pozadinska boja za zaglavlje
Brush headerBackgroundBrush = new SolidBrush(Color.LightGray); // Svijetlo siva pozadina
Brush headerTextBrush = Brushes.Black; // Crni tekst

// Crtanje zaglavlja tabele s pozadinom u boji
e.Graphics.FillRectangle(headerBackgroundBrush, startX, startY, colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth + colUkupnoWidth, cellHeight);
e.Graphics.DrawRectangle(pen, startX, startY, colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth + colUkupnoWidth, cellHeight);

e.Graphics.DrawString("Naziv", regularFont, headerTextBrush, startX + 10, startY + 5);
e.Graphics.DrawString("Jed. mj.", regularFont, headerTextBrush, startX + colNazivWidth + 10, startY + 5);
e.Graphics.DrawString("Cijena", regularFont, headerTextBrush, startX + colNazivWidth + colJedinicaWidth + 10, startY + 5);
e.Graphics.DrawString("Količina", regularFont, headerTextBrush, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + 10, startY + 5);
e.Graphics.DrawString("Ukupno", regularFont, headerTextBrush, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth + 10, startY + 5);

// Ispis redova tabele
while (currentRowIndex < dataGridViewSelectedUsluge.Rows.Count)
{
if (rowsPrinted >= maxRowsPerPage)
{
// Ako je broj redova ispisanih na stranici dostigao limit, pređi na sledeću stranicu
e.HasMorePages = true;
return;
}

DataGridViewRow row = dataGridViewSelectedUsluge.Rows[currentRowIndex];
if (row.IsNewRow)
{
currentRowIndex++;
continue;
}

// Crtanje linija za kolone u zaglavlju
e.Graphics.DrawLine(pen, startX + colNazivWidth, startY, startX + colNazivWidth, startY + cellHeight);
e.Graphics.DrawLine(pen, startX + colNazivWidth + colJedinicaWidth, startY, startX + colNazivWidth + colJedinicaWidth, startY + cellHeight);
e.Graphics.DrawLine(pen, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth, startY, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth, startY + cellHeight);
e.Graphics.DrawLine(pen, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth, startY, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth, startY + cellHeight);

startY += cellHeight;

// Ispis redova tabele

string naziv = row.Cells["Naziv"].Value.ToString();
string jedinicaMjere = row.Cells["Jedinica Mjere"].Value.ToString();
decimal cijena = Convert.ToDecimal(row.Cells["Cijena"].Value);
int kolicina = Convert.ToInt32(row.Cells["Količina"].Value);
decimal ukupno = kolicina * cijena;

// Crtanje ćelija
e.Graphics.DrawRectangle(pen, startX, startY, colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth + colUkupnoWidth, cellHeight);
e.Graphics.DrawString(naziv, regularFont, Brushes.Black, startX + 10, startY + 5);
e.Graphics.DrawString(jedinicaMjere, regularFont, Brushes.Black, startX + colNazivWidth + 10, startY + 5);
e.Graphics.DrawString(cijena.ToString("0.00"), regularFont, Brushes.Black, startX + colNazivWidth + colJedinicaWidth + 10, startY + 5);
e.Graphics.DrawString(kolicina.ToString(), regularFont, Brushes.Black, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + 10, startY + 5);
e.Graphics.DrawString(ukupno.ToString("0.00"), regularFont, Brushes.Black, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth + 10, startY + 5);

// Crtanje linija za kolone u redovima
e.Graphics.DrawLine(pen, startX + colNazivWidth, startY, startX + colNazivWidth, startY + cellHeight);
e.Graphics.DrawLine(pen, startX + colNazivWidth + colJedinicaWidth, startY, startX + colNazivWidth + colJedinicaWidth, startY + cellHeight);
e.Graphics.DrawLine(pen, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth, startY, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth, startY + cellHeight);
e.Graphics.DrawLine(pen, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth, startY, startX + colNazivWidth + colJedinicaWidth + colCijenaWidth + colKolicinaWidth, startY + cellHeight);

rowsPrinted++;
currentRowIndex++;

}

e.Graphics.DrawString("", regular2Font, Brushes.Black, e.MarginBounds.Left - 40, e.MarginBounds.Bottom + 25);
e.Graphics.DrawLine(pen, e.MarginBounds.Left - 70, e.MarginBounds.Top + 80, e.MarginBounds.Right + 70, e.MarginBounds.Top + 80);
e.Graphics.DrawLine(pen, e.MarginBounds.Left - 70, e.MarginBounds.Top + 200, e.MarginBounds.Right + 70, e.MarginBounds.Top + 200);
e.Graphics.DrawLine(pen, e.MarginBounds.Left - 70, e.MarginBounds.Top + 200, e.MarginBounds.Right + 70, e.MarginBounds.Top + 200);
e.Graphics.DrawLine(pen, e.MarginBounds.Left - 70, e.MarginBounds.Bottom + 20, e.MarginBounds.Right + 70, e.MarginBounds.Bottom + 20);

startY += cellHeight;
// Ukupna suma
if (currentRowIndex < dataGridViewSelectedUsluge.Rows.Count)
{
e.HasMorePages = true; // Postavi zastavicu za sljedeću stranicu
}
else
{
e.HasMorePages = false; // Završeno
currentRowIndex = 0; // Resetovanje samo kada se završi ispis svih stranica

// Dodavanje dijela za ukupan iznos, PDV i za naplatu samo na posljednjoj stranici
startY += 20;
e.Graphics.DrawString("IZNOS BEZ PDV-a: ", regular2Font, Brushes.Black, e.MarginBounds.Left + 370, startY);
e.Graphics.DrawString(textBoxBezPDV.Text + " KM", regular2Font, Brushes.Black, e.MarginBounds.Left + 570, startY);
e.Graphics.DrawString("IZNOS PDV-a (17%): ", regular2Font, Brushes.Black, e.MarginBounds.Left + 370, startY + 30);
e.Graphics.DrawString(textBoxPDV.Text + " KM", regular2Font, Brushes.Black, e.MarginBounds.Left + 570, startY + 30);
e.Graphics.DrawString("ZA NAPLATU: ", headerFont2, Brushes.Black, e.MarginBounds.Left + 370, startY + 60);
e.Graphics.DrawString(textBoxTotal.Text + " KM", headerFont3, Brushes.Black, e.MarginBounds.Left + 570, startY + 60);

e.Graphics.DrawString("Cus:", regular2Font, Brushes.Black, e.MarginBounds.Left + 20, e.MarginBounds.Bottom - 150);
e.Graphics.DrawLine(pen, e.MarginBounds.Left - 70, e.MarginBounds.Bottom - 80, e.MarginBounds.Right - 450, e.MarginBounds.Bottom - 80);
e.Graphics.DrawString("Direc:", regular2Font, Brushes.Black, e.MarginBounds.Right - 90, e.MarginBounds.Bottom - 150);
e.Graphics.DrawLine(pen, e.MarginBounds.Left + 450, e.MarginBounds.Bottom - 80, e.MarginBounds.Right + 70, e.MarginBounds.Bottom - 80);
}
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post