我想使用等宽字体打印文本,宽 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 像素高?