【发布时间】:2015-08-14 14:28:08
【问题描述】:
我有一个应用程序,它的工作是在预先存在的预印标签上打印,因此以精确的方式打印文本非常重要,就像用户在编辑期间放置它时的样子。 我使用 GDI+ 方法来做到这一点。
我注意到打印的字体与预览中显示的字体之间存在差异,并且我发现在打印期间无法将 Graphics.TextRenderingHint 属性设置为 SingleBitPerPixelGridFit 以外的任何值。我尝试将 TextRenderingHint 的值设置为 AntiAlias,但它没有改变。
下面是代码示例:
private void printDoc_PrintPage(object sender, PrintPageEventArgs e)
{
PrintDocument printDoc = (PrintDocument)sender;
e.Graphics.PageUnit = GraphicsUnit.Millimeter;
//I try to set the value of TextRenderingHint to AntiAlias, but it doesn't change
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
string line = "Line of text";
System.Drawing.Font textFont = new System.Drawing.Font("Arial", 5f, FontStyle.Regular);
StringFormat sf = new StringFormat(StringFormatFlags.NoWrap);
e.Graphics.DrawString(line, textFont, Brushes.Black, position.X, position.Y, sf);
}
我认为我应该使用独立于网格拟合的 TextRenderingHint 选项,以使打印的文档与预览完全相同。
我怎样才能做到这一点?
【问题讨论】:
-
我尝试将 TextRenderingHint 的值设置为 AntiAlias,但它没有改变。 你什么意思?设置不卡?还是结果不变?
-
我的意思是即使我用这行代码设置它:
e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;e.Graphics.TextRenderingHint 的值始终是 SingleBitPerPixelGridFit。所以设置不粘。 -
Looks like this is right 并且不会消失。您只是无法像在屏幕上显示像素那样消除锯齿打印像素
-
有一种方法可以获得相同的输出,那就是创建一个高分辨率位图并打印出来。但是,如果您渲染到打印机,GDI+ 调用将转换为在打印机上使用高分辨率字体的打印机命令,这通常不会使用我们在显示器上需要的原始抗锯齿功能。