C# 根据可打印区域和字符/行数计算字体大小
我想用单空格字体打印文本,80个字符宽,66个字符高。目标是模拟将原始文本发送到冲击式打印机 下面是一些代码:C# 根据可打印区域和字符/行数计算字体大小,c#,wpf,printing,font-size,C#,Wpf,Printing,Font Size,我想用单空格字体打印文本,80个字符宽,66个字符高。目标是模拟将原始文本发送到冲击式打印机 下面是一些代码: public void Print(string printerName, string text, string desc = "") { PrintDialog dialog = new PrintDialog(); PrintQueue queue = new LocalPrintServer().GetPrintQueue(printerName); d
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为我提供了面积。ExtentWidth
和面积。ExtentWight
是我的实际打印尺寸(以像素为单位),而面积。OriginWidth
和面积。OriginHeight
是我的页边距大小(以像素为单位)
如果我想在整个页面中正好容纳80个字符,则每个字符的宽度应为area.extendwidth/80
像素。我的打印机的区域.extendwidth
为768,因此每个字符的宽度应为9.6像素
另外,如果我想在我的页面上精确地容纳66行,每行应该是area.extenstheight/66
高,以像素为单位。我的打印机的区域.extenstheight
是1038.66,因此每行的高度应该是15.7像素
使用这些输入,如何选择字体大小,其中每个字符的宽度为X像素,并且在包装时,使每行的高度为Y像素?首先选择一种字体打印,该字体的大小是固定的,例如Courier New。这将为您提供已知的角色尺寸,并大大简化计算。在处理打印机时,最好使用twip而不是“像素”,因为twip/像素比率因监视器/OS设置等的不同而变化很大。这里可以找到有关渲染模式的好文章/答案 在处理打印时使用twips的原因是,它与字体点大小的转换非常接近。字体“点”是1/72英寸。同样,一英寸有1440个细枝。因此,每个字体“点”有20个twip(1440/72) 一旦你有了一个可以精确控制的固定字体大小,你所概述的计算将给出你的字体大小。例如,如果您有648个twips的打印空间,那么除以72,您就可以在应用程序中使用字体“点”9