可以将字符串输出为位图,并在前台页面显示。同时支持自动换行。
调用代码:其中,str为要输出的文本。
Bitmap newBitmap = null;
Graphics g = null;
string str = allTextTrans;
try
{
Font strFont = new Font("宋体", 12);
newBitmap = new Bitmap(800, 1000, PixelFormat.Format32bppArgb);
g = Graphics.FromImage(newBitmap);
Rectangle recangle = new Rectangle(0, 0, 800, 1000);
DrawStringWrap(g, strFont, allTextTrans, recangle);
MemoryStream tempStream = new MemoryStream();
newBitmap.Save(tempStream, ImageFormat.Png);
Response.ClearContent();
Response.ContentType = "image/png";
Response.BinaryWrite(tempStream.ToArray());
Response.End();
}
finally
{
if (g != null) g.Dispose();
if (newBitmap != null) newBitmap.Dispose();
}
绘制和分行函数:
/// <summary>
/// 绘制文本自动换行(超出截断)
/// </summary>
/// <param name=\"graphic\">绘图图面</param>
/// <param name=\"font\">字体</param>
/// <param name=\"text\">文本</param>
/// <param name=\"recangle\">绘制范围</param>
private void DrawStringWrap(Graphics graphic, Font font, string text, Rectangle recangle)
{
List<string> textRows = GetStringRows(graphic, font, text, recangle.Width);
int rowHeight = (int)(Math.Ceiling(graphic.MeasureString("测试", font).Height));
int maxRowCount = recangle.Height / rowHeight;
int drawRowCount = (maxRowCount < textRows.Count) ? maxRowCount : textRows.Count;
//int top = (recangle.Height - rowHeight * drawRowCount) / 2;
int top = 0;
StringFormat sf = new StringFormat();
sf.Alignment = StringAlignment.Near;
sf.LineAlignment = StringAlignment.Center;
for (int i = 0; i < drawRowCount; i++)
{
Rectangle fontRectanle = new Rectangle(recangle.Left, top + rowHeight * i, recangle.Width, rowHeight);
graphic.DrawString(textRows[i], font, new SolidBrush(Color.Black), fontRectanle, sf);
}
}
/// <summary>
/// 将文本分行
/// </summary>
/// <param name=\"graphic\">绘图图面</param>
/// <param name=\"font\">字体</param>
/// <param name=\"text\">文本</param>
/// <param name=\"width\">行宽</param>
/// <returns></returns>
private List<string> GetStringRows(Graphics graphic, Font font, string text, int width)
{
int RowBeginIndex = 0;
int rowEndIndex = 0;
int textLength = text.Length;
List<string> textRows = new List<string>();
for (int index = 0; index < textLength; index++)
{
rowEndIndex = index;
if (index == textLength - 1)
{
textRows.Add(text.Substring(RowBeginIndex));
}
else if (rowEndIndex + 1 < text.Length && text.Substring(rowEndIndex,1) == "\n")
{
textRows.Add(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex));
rowEndIndex = index += 1;
RowBeginIndex = rowEndIndex;
}
else if (graphic.MeasureString(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex + 1), font).Width > width)
{
textRows.Add(text.Substring(RowBeginIndex, rowEndIndex - RowBeginIndex));
RowBeginIndex = rowEndIndex;
}
}
return textRows;
}
}
展示效果:
参考资料:http://blog.163.com/gsrwsh@126/blog/static/75794506201061492755492/