Dan*_*Dan 9 c# wpf fonts drawing
我目前正在使用字体CarlitoFormattedText在WPF中渲染一些字体,以便随后打印最终图像:
DrawingVisual vis = new DrawingVisual();
DrawingContext dc = vis.RenderOpen();
...
FormattedText someText = new FormattedText("Delightful", System.Globalization.CultureInfo.CurrentCulture, FlowDirection.LeftToRight, typefaceCarlito, 52, brushBlack);
dc.DrawText(someText, new Point(rightX - someText.Width, 2900 - (someText.Height / 2)));
...
dlg.PrintVisual(vis, "Test print"));
Run Code Online (Sandbox Code Playgroud)
我在这里特别选择了文本"Delightful",因为它包含了一个似乎给我一个奇怪问题的连字('tf').没有这样的连字,打印工作正常,打印到PDF显示它作为向量发送:
但是,如果我(重新)引入连字,会发生以下情况:
文本变为光栅化(忽略像素化线,这是背景图像),并完成短路.在某些情况下,它会停在结扎位置.在其他方面,它很快就会中断.
所有字体都不会出现这种情况 - 大多数系统字体都很好,我选择使用的是另一种第三方字体 - 但我仍然需要能够阻止这种情况发生.像素化不是一个问题,但截止是.
有没有办法可以强制FormattedText不将连续的字符转换为它们的连字符,或者更好的是还能阻止这种情况发生?
小智 0
FormattedText的区域性不应从当前线程中获取,因为它并不完全准确,请尝试如下所示获取 WPF UI 区域性:-
var someText = new FormattedText(
"Delightful",
//CultureInfo.CreateSpecificCulture("en-US"),
//System.Globalization.CultureInfo.CurrentCulture,
this.Language.GetEquivalentCulture(),
FlowDirection.LeftToRight,
new Typeface("Carlito"),
52,
Brushes.Black,
VisualTreeHelper.GetDpi(this).PixelsPerDip);
Run Code Online (Sandbox Code Playgroud)
另外,建议使用额外的 DPI 参数,因为旧的构造函数现在已过时。
WPF UI 区域性不一定采用默认的操作系统区域性,它需要使用 FrameworkElement 上的 Language 属性或通过附属程序集显式设置!
请参阅以下内容以获取进一步说明:- 全球化和本地化概述 - WPF .NET Framework | 微软文档 https://learn.microsoft.com/en-us/dotnet/api/system.windows.frameworkelement.language?view=net-5.0