1

以下のコードを使用して、Brother QL ラベル プリンターにラベルを直接印刷しています。問題は、プリンターが、実行時に c# を介して設定しようとしているカスタムの長さを無視して、ラベルが長くなったり短くなったりするように見えることです。Windows のプリンター設定でページの長さを変更できますが、特定のラベルにレンダリングする情報の量に依存するカスタム ラベルの長さを実行時に設定することができません。bPac を使用して可変長のラベルを印刷できることはわかっていますが、bPac のテンプレートを使用することは避けたいと考えています。それらが不必要に面倒であることがわかりました。カスタムの長さを設定できない場合を除き、不要です。

任意の提案をいただければ幸いです。

読んでくれてありがとう。

私が使用しているコードは次のとおりです。

private void SingleLabel()
{
    label = new PrintDocument();

    PaperSize pS = new PaperSize("Custom Size", 242, 55);
    label.DefaultPageSettings.PaperSize = pS;
    label.PrinterSettings.PrinterName = "Label_1";
    label.PrinterSettings.DefaultPageSettings.PaperSize = pS;
    label.PrintPage += new PrintPageEventHandler(label_PrintPage);
    label.Print();
}

private void label_PrintPage(object sender, PrintPageEventArgs e)
{
    SolidBrush brush = new SolidBrush(Color.Black);
    Font header = new Font(FontFamily.GenericSansSerif, 12.0F, FontStyle.Bold);

    e.Graphics.DrawString("Hello World", header, brush, 0, 0);
}
4

1 に答える 1

1

そんな感じで作りました

   public void OnPagePrint(object sender, PrintPageEventArgs e)
   {
        var availableWidth = 220;
        var printAreaSize = DrawReceipt(availableWidth, e.Graphics, GetReceiptContent());
        e.PageSettings.PaperSize = new PaperSize("CustomPaperSize", (int)printAreaSize.Width + 10, (int)printAreaSize.Height);
    }

    public SizeF DrawReceipt(float availableWidth, Graphics graphics, StringBuilder sb)
    {
        var printText = new PrintText(sb.ToString(), new Font("Consolas", 8));
        var layoutArea = new SizeF(availableWidth, 0);
        SizeF stringSize = graphics.MeasureString(printText.Text, printText.Font, layoutArea, printText.StringFormat);
        RectangleF rectf = new RectangleF(new PointF(), new SizeF(availableWidth, stringSize.Height));
        graphics.DrawString(printText.Text, printText.Font, Brushes.Black, rectf, printText.StringFormat);

        foreach (var img in images)
        {
            graphics.DrawImage(img.Image, img.Location);
        }

        return stringSize;
    }
于 2016-12-15T20:59:49.993 に答える