0
次のコードは、私がプリンタにデータを印刷するために使用しようとしているコードです。データは印刷中ですが、タブは印刷されません。私は印刷だと私の文字列は次のようになります。このカスタム印刷クラスを使用して印刷するタブを取得するにはどうすればよいですか?
string textToPrint = "Member Number\tAddress\tCity\tState";
しかし、それは印刷したときに、それがこのMember NumberAddressCityState
ようになります。
インターネット上でこのプリンタクラスが見つかりました。タブを印刷する以外は、動作しているように見えます(文字はレポートに印刷されます)。タブを印刷するにはどうすればよいですか?あなたのフォーマットStringFormat変数の
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Printing;
namespace HighLowReport
{
public class PCPrint : System.Drawing.Printing.PrintDocument
{
//Property variable for the font the user wishes to use
private Font _font;
//Property variable for the text to be printed
private string _text;
//Property to hold the text that is to be printed
public string TextToPrint
{
get { return _text; }
set { _text = value; }
}
//Property to hold the font the user wishes to use
public Font PrinterFont
{
get { return _font; }
set { _font = value; }
}
// Static variable to hold the current character
// we're currently dealing with.
static int curChar;
// Empty constructor
public PCPrint()
: base()
{
// set the file stream
// Instantiate out Text property to an empty string
_text = string.Empty;
}
// Constructor to initialize our printer object
// and the text it's supposed to be printing
public PCPrint(string str)
: base()
{
// Set the file stream
// Set our text property value
_text = str;
}
protected override void OnBeginPrint(System.Drawing.Printing.PrintEventArgs e)
{
// Run base code
base.OnBeginPrint(e);
// Check to see if the user provided a font
// if they didn't the we default to Times New Roman
if (_font == null)
{
_font = new Font("Times New Roman", 10);
}
}
// Override the default OnPrintPage method of the PrintDocument
protected override void OnPrintPage(System.Drawing.Printing.PrintPageEventArgs e)
{
// Run base code
base.OnPrintPage(e);
// declare local variables needed
int printHeight;
int printWidth;
int leftMargin;
int rightMargin;
Int32 lines;
Int32 chars;
// Set print area size and margins
{
printHeight = base.DefaultPageSettings.PaperSize.Height - base.DefaultPageSettings.Margins.Top - base.DefaultPageSettings.Margins.Bottom;
printWidth = base.DefaultPageSettings.PaperSize.Width = base.DefaultPageSettings.Margins.Left - base.DefaultPageSettings.Margins.Right;
leftMargin = base.DefaultPageSettings.Margins.Left; //X
rightMargin = base.DefaultPageSettings.Margins.Right; //Y
}
// Check if the user selected to print in Landscape mode
// if they did then we need to swap height/width parameters
if (base.DefaultPageSettings.Landscape)
{
int tmp;
tmp = printHeight;
printHeight = printWidth;
printWidth = tmp;
}
// Now we need to determine the total number of lines
// we're going to be printing
Int32 numLines = (int)printHeight/PrinterFont.Height;
// Create a rectangle printing area for our document
RectangleF printArea = new RectangleF(leftMargin, rightMargin, printWidth, printHeight);
// Use StringFormat class for the text layout of our document
StringFormat format = new StringFormat(StringFormatFlags.LineLimit);
// Fit as many characters as we can into the print area
e.Graphics.MeasureString(_text.Substring(RemoveZeros(ref curChar)), PrinterFont, new SizeF(printWidth, printHeight), format, out chars, out lines);
// Print the page
e.Graphics.DrawString(_text.Substring(RemoveZeros(ref curChar)), PrinterFont, Brushes.Black, printArea, format);
// Increase current char count
curChar += chars;
// Determine if there is more text to print, if
// there is then tell the printer there is more coming
if (curChar < _text.Length)
{
e.HasMorePages = true;
}
else
{
e.HasMorePages = false;
curChar = 0;
}
}
// Function to replace any zeros in the size to a 1
// Zeros will mess up the printing area
public int RemoveZeros(ref int value)
{
// Check the value passed into the function
// If the value is a 0 (zero) then return a 1,
// otherwise return the value passed in
while (_text[value] == '\0')
{
value++;
}
return value;
}
}
}
を。本当にありがとう! – Kevin