這應該可以做到。除以變量轉換爲整數時要小心。如果Width
屬性小於1,那麼您將自己打開分割零,這將被截斷爲零。您的應用程序中可能不會有這麼小的字體,但這仍然是一個好習慣。
private void document_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
if((int)e.Graphics.MeasureString("m", txtMain.Font).Width > 0)
{
int charPerLine =
e.MarginBounds.Width/(int)e.Graphics.MeasureString("m", txtMain.Font).Width;
}
}
但真正的問題是爲什麼你甚至需要知道每行字符數。除非您嘗試進行某種ASCII藝術處理,否則您可以使用Graphics.DrawString
的不同重載,讓GDI +在邊界矩形內爲您排列文本,而無需知道一行中有多少個字符。
This sample from MSDN告訴您如何做到這一點:
// Create string to draw.
String drawString = "Sample Text";
// Create font and brush.
Font drawFont = new Font("Arial", 16);
SolidBrush drawBrush = new SolidBrush(Color.Black);
// Create rectangle for drawing.
float x = 150.0F;
float y = 150.0F;
float width = 200.0F;
float height = 50.0F;
RectangleF drawRect = new RectangleF(x, y, width, height);
// Draw rectangle to screen.
Pen blackPen = new Pen(Color.Black);
e.Graphics.DrawRectangle(blackPen, x, y, width, height);
// Set format of string.
StringFormat drawFormat = new StringFormat();
drawFormat.Alignment = StringAlignment.Center;
// Draw string to screen.
e.Graphics.DrawString(drawString, drawFont, drawBrush, drawRect, drawFormat);
所以,如果你要打印文本的頁面,你可以設置drawRect
到e.MarginBounds
和插件文本的網頁值得在drawString
。另一件事,如果你試圖打印表格數據,你可以將頁面分割成矩形 - 每列/行(不過你需要它),並使用重載打印表格邊界。
如果您發佈更多關於您實際嘗試實現的細節,我們可以提供更多幫助。
來源
2012-02-19 03:17:43
ose
您的字體是固定寬度還是可變寬度字體?如果它是可變寬度的字體,您將無法準確執行測量。 – AndyGeek 2012-02-18 23:29:29
如果您僅打印'|'s 1000,而是'@'500 :) – 2012-02-18 23:29:55
我正在用快遞新字體進行測試,我認爲它是固定寬度 – 2012-02-18 23:58:20