WinformsでC#を使用しています。請求書をロール紙に印刷しようとしています。紙の幅は3インチですが、紙の長さは動的です(ロール紙)。長さは、リストにあるアイテムの数によって異なります。例えば。購入時に100個のアイテムが販売されている場合、それはかなり長いロールになりますが、購入された単一のアイテムの場合は短い長さになります。
レポートを印刷するとき、ジョブの終了後、プリンターは必要以上に最後のページを排出します。 A4サイズの用紙を排出します。必要な行を印刷してから、印刷を停止したい。私はA4やA3ではなくロール紙とEpsonLQ-300 + IIプリンターを使用しています。
具体的には、印刷は常にページサイズの単位で行われます。ページを3inx 8inに設定すると、常に8inの倍数の長さのプリントアウトになります。 9インチの請求書を印刷する場合、16インチの印刷物になり、7インチの紙が無駄になります。最後のページを必要な長さだけにして印刷するにはどうすればよいですか?
コードは次のとおりです。
private void printDoc_PrintPage(Object sender, PrintPageEventArgs e)
{
Font printFont = new Font("Courier New", 12);
int y = 15;
e.Graphics.DrawString("a Line", printFont, Brushes.Black, 0, y); y = y + 20;
e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 25;
e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 35;
e.Graphics.DrawString(" Line", printFont, Brushes.Black, 0, y); y = y + 45;
}
「1行」しかないページを使ってみましたか?
上下の境界線を省略すれば、ノンストップで印刷できます。
次に、ビットを追加して(ページを切り離すことができるように)、それを取り出します。
これを試して:
PaperSize pkCustomSize1 = new PaperSize("First custom size", 100, 200);
printDoc.DefaultPageSettings.PaperSize = pkCustomSize1
参照: http://msdn.Microsoft.com/en-us/library/system.drawing.printing.pagesettings.papersize.aspx
用紙サイズをその場で調整することもできます。 1ページに1行の作業は少なくて済みますが、誰かがそうする理由があれば、これにより印刷プレビューがより良くなると思います。
printdoc.DefaultPageSettings.PaperSize.Height += lineheight;
カスタム用紙サイズを定義してレポートで使用する方法は次のとおりです。
(コントロールパネルから)プリンタフォルダを開きます。
ファイルメニューからサーバープロパティを開きます。 プリンタとサーバーのプロパティダイアログボックスが開きます。
チェックを選択新しいフォームを作成
ページ幅の高さを指定します。身長を3インチにすることをお勧めします。
フォームの保存ボタンをクリックします。
カスタムページの準備が整いました。
レポートとプリンタのプロパティの両方で、この用紙をデフォルトの用紙サイズとして設定します。
今、あなたは行ってもいいです。
印刷プレビューオプションを使用して、このプロセスを完了することもできます。
// This is for the print preview event
private void printPreviewDialog1_Load(object sender, EventArgs e)
{
int j = 0;
z = 185;
while (j < dataGridView1.Rows.Count)
{
j += 1;
z += 30;
}
z += 60;
PaperSize pkCustomSize1 = new PaperSize("First custom size", 350, z);
printDocument1.DefaultPageSettings.PaperSize = pkCustomSize1;
}
// This is the loop for generating print Document
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int i = 0; //For Gridview Row Count
int sno = 1; //For Grid Serial Number
e.Graphics.DrawString(
"HEADING",
new Font("Calibri", 20, FontStyle.Bold),
Brushes.Black,
new Point(100, 5));
e.Graphics.DrawString(
"Address",
new Font("Calibri", 12, FontStyle.Bold),
Brushes.Black,
new Point(75, 35));
int y = 185; //For Grid y axis start to print
while (i < dataGridView1.Rows.Count)
{
e.Graphics.DrawString(
sno.ToString(),
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(10, y)); //For Serial Number
e.Graphics.DrawString(
dataGridView1.Rows[i].Cells[1].FormattedValue.ToString(),
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(240, y));
//This is for Trim content to next line
Graphics df1 = e.Graphics;
SizeF ef1 = df1.MeasureString(
dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(),
new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold),
200); //160
df1.DrawString(
dataGridView1.Rows[i].Cells[0].FormattedValue.ToString(),
new Font(new FontFamily("Calibri"), 12F, FontStyle.Bold),
Brushes.Black,
new RectangleF(new PointF(60.0F, y), ef1), //350.0
StringFormat.GenericTypographic);
i += 1;
sno += 1;
y += 30;
}
e.Graphics.DrawString(
"------------------------------------------------------------------------------------",
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(0, y));
e.Graphics.DrawString(
"Total Amount-:" + TotalAmnt_txt.Text,
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(150, y+=20));
e.Graphics.DrawString(
"------------------------------------------------------------------------------------",
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(0, y+=20));
e.Graphics.DrawString(
"***Care For You ****",
new Font("Calibri", 10, FontStyle.Bold),
Brushes.Black,
new Point(150, y += 20));
i = 0;
sno = 1;
}