現在C#・VisualStudioにおいてレジシステムの開発を行っています。
その中でレシートの印刷を行いたいのですが、現状印刷をするとお店のロゴマーク(画像ファイル)と商品やお金の情報が重なって印刷されてしまいます。
理想では
ロゴ
商品情報(会計)
の順に表示をしたいと考えています。
コードは以下のようになっています
private void pd_Print_img(object sender, PrintPageEventArgs e) { //画像を読み込む Image img = Properties.Resources.ロゴ_レシート; //画像を描画する e.Graphics.DrawImage(img, 0, 0, 270, 90); //次のページがないことを通知する e.HasMorePages = false; //後始末をする img.Dispose(); printingPosition = 0; } private void pd_Print_Info(object sender, PrintPageEventArgs e) { string pText = ""; if (printingPosition == 0) { //改行記号を'\n'に統一する pText = HeadText.Replace("\r\n", "\n"); pText = HeadText.Replace("\r", "\n"); } int bwidth = e.MarginBounds.Width; //1ページに収まらなくなるか、印刷する文字がなくなるかまでループ while (e.MarginBounds.Bottom > y + printFont.Height && printingPosition < pText.Length) { string line = ""; for (; ; ) { //印刷する文字がなくなるか、 //改行の時はループから抜けて印刷する if (printingPosition >= pText.Length || pText[printingPosition] == '\n') { if (e.Graphics.MeasureString(line, printFont).Width < width) { int l = 0; double p = (width - e.Graphics.MeasureString(line, printFont).Width) / 2; int xp = (int)(Math.Floor(p) / e.Graphics.MeasureString(" ", printFont).Width); while (l < xp) { line = line.Insert(0, " "); l++; } } printingPosition++; break; } //一文字追加し、印刷幅を超えるか調べる line += pText[printingPosition]; if (e.Graphics.MeasureString(line, printFont).Width > width) { //印刷幅を超えたため、折り返す line = line.Substring(0, line.Length - 1); break; } //印刷文字位置を次へ printingPosition++; } //一行書き出す e.Graphics.DrawString(line, printFont, Brushes.Black, x, y); //次の行の印刷位置を計算 y += (int)printFont.GetHeight(e.Graphics); } e.HasMorePages = true; printingPosition = 0; y += (int)printFont.GetHeight(e.Graphics); }
回答3件
あなたの回答
tips
プレビュー