将 System.Drawing.Font 转换为 PdfSharp.Drawing.XFont

问题描述 投票:0回答:2

如何正确创建与 Font.Size 大小对应的 XFont 对象? 我有 XGraphics、System.Drawing.Font 和 FontFamily“Tahoma”,尺寸为 6。 当我像示例中那样创建 XFont 时,我在渲染的 PDF 页面上得到非常大的文本。 我认为 Font.Size iz Points 单位,并且 XFont 需要使用“emSize”创建。

    void PDFCreateObjectOnLabel(XGraphics graphics, ObjectBase formatObject, string objectText)
    {
       XStringFormat objFormat = new XStringFormat();
       objFormat.Alignment = XStringAlignment.Center;
       XFont xFont = new XFont(formatObject.Font.FontFamily.Name, formatObject.Font.Size);
       graphics.DrawString(objectText, xFont, someBrush, someRect, objFormat);
    }

当我尝试像这样创建 XFont 时:

XFont xFont = new XFont(new Font(formatObject.Font.FontFamily.Name, formatObject.Font.Size, formatObject.Font.Style));

我收到异常“字体必须使用 GraphicsUnit.World。” 当我尝试传递 GraphincUnit.World 时,我得到非常大的文本。 参数“formatObject”是从另一个程序集传递的,它不是我的代码。 “formatObject”中的字体对象保存单位类型“Point”。

c# fonts pdfsharp
2个回答
0
投票

我设法获得正确的字体大小,如代码示例所示:

        double emSize = formatObject.Font.Size * 0.35277777777778;//1 point (computer) = 0.35277777777778 millimeter [mm]
        XFont xFont = new XFont(new Font(formatObject.Font.FontFamily.Name, (float)emSize, formatObject.Font.Style, GraphicsUnit.World));

0
投票

您不需要将字体大小转换为em。 对于整个转换:

var newFont = new XFont(formatObject.Font.FontFamily.Name, formatObject.Font.Size, (XFontStyle)formatObject.Font.Style); 

至少对于 PdfScharp 8.0 及更高版本而言。

© www.soinside.com 2019 - 2024. All rights reserved.