【问题标题】:Graphics.TextRenderingHint property doesn't change in printingGraphics.TextRenderingHint 属性在打印时不会改变
【发布时间】: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+ 调用将转换为在打印机上使用高分辨率字体的打印机命令,这通常不会使用我们在显示器上需要的原始抗锯齿功能。

标签: c# printing gdi+


【解决方案1】:

我遇到了类似的问题。我试图让 ClearTypeGridFit 显示,但只显示 SingleBitPerPixelGridFit。我发现我没有在显示设置中启用 ClearType。启用 ClearType 后,TextRenderingHint 开始工作。只是需要检查一下。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2017-02-25
    相关资源
    最近更新 更多