如何正确创建与 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”。
我设法获得正确的字体大小,如代码示例所示:
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));
您不需要将字体大小转换为em。 对于整个转换:
var newFont = new XFont(formatObject.Font.FontFamily.Name, formatObject.Font.Size, (XFontStyle)formatObject.Font.Style);
至少对于 PdfScharp 8.0 及更高版本而言。