确定控制台应用程序中文本块的高度
Determining height of a block of text in a console application
我正在尝试确定文本块所需的文本框大小。然后将其导出用于 InDesign 脚本以创建页面。全部在控制台应用程序中。
我尝试创建一个 WPF TextBlock
并分配 Text
和 Width
,但是 Height
和 ActualHeight
是 NaN。
如何确定某些文本所需的文本框大小?使用 WPF/Winforms 文本块是最佳解决方案(尝试利用现有代码),还是有其他更好的工作流程?
C#中有两个类是用来绘制文字的。 TextRenderer 和图形。
TextRenderer 使用 GDI 呈现文本,而 Graphics 使用 GDI+。两者使用略有不同的方法来布置文本。
你可以利用Graphics.MeasureString or TextRenderer.MeasureText
例子
using( Graphics g = Graphics.FromHwnd(IntPtr.Zero) )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
对于您的情况,我建议使用 TextRenderer。文本换行示例 -
var size = TextRenderer.MeasureText(text, font, new Size(width, height), TextFormatFlags.WordBreak);
第三个参数是绘图矩形的大小。如果您不知道,可以将高度作为 0
传递。
我正在尝试确定文本块所需的文本框大小。然后将其导出用于 InDesign 脚本以创建页面。全部在控制台应用程序中。
我尝试创建一个 WPF TextBlock
并分配 Text
和 Width
,但是 Height
和 ActualHeight
是 NaN。
如何确定某些文本所需的文本框大小?使用 WPF/Winforms 文本块是最佳解决方案(尝试利用现有代码),还是有其他更好的工作流程?
C#中有两个类是用来绘制文字的。 TextRenderer 和图形。
TextRenderer 使用 GDI 呈现文本,而 Graphics 使用 GDI+。两者使用略有不同的方法来布置文本。
你可以利用Graphics.MeasureString or TextRenderer.MeasureText
例子
using( Graphics g = Graphics.FromHwnd(IntPtr.Zero) )
{
SizeF size = g.MeasureString("some text", SystemFonts.DefaultFont);
}
对于您的情况,我建议使用 TextRenderer。文本换行示例 -
var size = TextRenderer.MeasureText(text, font, new Size(width, height), TextFormatFlags.WordBreak);
第三个参数是绘图矩形的大小。如果您不知道,可以将高度作为 0
传递。