我有一些打印字符串的代码,但是如果字符串是:“Blah blah blah”...并且没有换行符,则文本占用一行。我希望能够塑造这个字符串,使它的文字包裹在纸张的尺寸上。
private void PrintIt(){
PrintDocument document = new PrintDocument();
document.PrintPage += (sender, e) => Document_PrintText(e, inputString);
document.Print();
}
static private void Document_PrintText(PrintPageEventArgs e, string inputString) {
e.Graphics.DrawString(inputString, new Font("Courier New", 12), Brushes.Black, 0, 0);
}
我想我可以弄清楚一个角色的长度,并手动包装文本,但如果有一种内置的方法来做到这一点,我宁愿这样做。谢谢!
答案 0 :(得分:12)
是的,DrawString能够自动对文字进行自动换行。您可以使用MeasureString方法检查指定的字符串是否可以在页面上完全绘制或不在页面上以及需要多少空间。
还有专门用于此目的的TextRenderer课程。
这是一个例子:
Graphics gf = e.Graphics;
SizeF sf = gf.MeasureString("shdadj asdhkj shad adas dash asdl asasdassa",
new Font(new FontFamily("Arial"), 10F), 60);
gf.DrawString("shdadj asdhkj shad adas dash asdl asasdassa",
new Font(new FontFamily("Arial"), 10F), Brushes.Black,
new RectangleF(new PointF(4.0F,4.0F),sf),
StringFormat.GenericTypographic);
这里我指定最多60个像素作为宽度然后测量字符串将给我绘制此字符串所需的大小。现在,如果您已经有一个尺寸,那么您可以与返回的尺寸进行比较,看它是否会被正确绘制或截断
答案 1 :(得分:11)
我发现了这个:How to: Print a Multi-Page Text File in Windows Forms
private void printDocument1_PrintPage(object sender, PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;
// Sets the value of charactersOnPage to the number of characters
// of stringToPrint that will fit within the bounds of the page.
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);
// Draws the string within the bounds of the page
e.Graphics.DrawString(stringToPrint, this.Font, Brushes.Black,
e.MarginBounds, StringFormat.GenericTypographic);
// Remove the portion of the string that has been printed.
stringToPrint = stringToPrint.Substring(charactersOnPage);
// Check to see if more pages are to be printed.
e.HasMorePages = (stringToPrint.Length > 0);
}
答案 2 :(得分:-1)
Dude我在HTML中打印,总是噩梦。我想说在我看来你应该尝试使用别的东西来打印文本等传递参数到报告服务并弹出一个用户可以打印的PDF。
或者您可能需要计算字符数并明确指定换行符!