【发布时间】:2023-03-31 03:41:01
【问题描述】:
我想使用等宽字体打印文本,宽 80 个字符,高 66 个字符。目标是模拟将原始文本发送到冲击式打印机。
这里有一些代码:
public void Print(string printerName, string text, string desc = "")
{
PrintDialog dialog = new PrintDialog();
PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName);
dialog.PrintQueue = queue;
PageImageableArea area = queue.GetPrintCapabilities(dialog.PrintTicket).PageImageableArea;
TextBlock block = new TextBlock();
block.FontFamily = new FontFamily("Courier New");
block.Margin = new Thickness(area.OriginWidth, area.OriginHeight, area.OriginWidth, area.OriginHeight);
block.FontSize = ???
block.Text = text;
block.Measure(new Size(area.ExtentWidth, area.ExtentHeight));
block.Arrange(new Rect(new Point(0, 0), block.DesiredSize));
dialog.PrintVisual(block, desc);
}
据我了解,PageImageableArea 给了我area.ExtentWidth 和area.ExtentHeight,这是我的实际打印尺寸(以像素为单位),area.OriginWidth 和area.OriginHeight 是我的边距大小(以像素为单位)。
如果我想在整个页面中准确放置 80 个字符,则每个字符的宽度应为 area.ExtentWidth / 80,以像素为单位。我的打印机的area.ExtentWidth 是 768,所以每个字符应该是 9.6 像素宽。
此外,如果我想在我的页面上精确放置 66 行,则每行应为 area.ExtentHeight / 66 高,以像素为单位。我的打印机的area.ExtentHeight 是 1038.66,所以每行应该是 15.7 像素高。
使用这些输入,我如何选择一个 FontSize,其中每个字符的宽度为 X 像素,并且在包裹时使每行的高度为 Y 像素?
【问题讨论】: