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

问题描述

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

    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”。

解决方法

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

        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));