C# TextBlock.FontFamily打印时未使用字体

C# TextBlock.FontFamily打印时未使用字体,c#,wpf,windows-7,C#,Wpf,Windows 7,我正在开发一个简单的POS WPF应用程序,用于在没有打印对话框的情况下打印收据。我需要使用窄字体,所以我选择了。在Windows10上它可以工作,但在Windows7上我仍然只使用默认字体打印。我尝试了目标打印机(Epson TM-T20II),普通打印机和PDF打印,每次都出现问题。我还尝试了一些不同的Windows10和Windows7电脑,W10每次都能工作,而W7每次都失败 到目前为止,我试过: 将字体安装到Windows 7中并直接使用:new FontFamily(“NK57 M

我正在开发一个简单的POS WPF应用程序,用于在没有打印对话框的情况下打印收据。我需要使用窄字体,所以我选择了。在Windows10上它可以工作,但在Windows7上我仍然只使用默认字体打印。我尝试了目标打印机(Epson TM-T20II),普通打印机和PDF打印,每次都出现问题。我还尝试了一些不同的Windows10和Windows7电脑,W10每次都能工作,而W7每次都失败

到目前为止,我试过:

  • 将字体安装到Windows 7中并直接使用:new FontFamily(“NK57 Monospace Cd Bk”)。该字体是在InstalledFontCollection中找到的(可能我使用font.Name==fontName对其进行了测试,但关键是测试通过了),但未在打印中使用
  • 直接从.ttf文件加载字体:new FontFamily(新Uri(AppDomain.CurrentDomain.BaseDirectory+“#NK57 Monospace Cd Bk”、UriKind.Absolute、“NK57 Monospace Cd Bk”)
  • 将字体与应用程序打包:new FontFamily(“pack://application:,,,。/Fonts/#NK57单空间Cd Bk”)或新FontFamily(“pack://application:,,,/字体/#NK57单空间Cd-Bk“
  • 广泛推荐使用PrivateFontCollection,但WPF不支持它
  • 改用新字体(“…”),但我没有找到一个合适的方法将其转换为FontFamily
在Windows7上什么都不起作用,大部分都在Windows10上起作用。下面的简化代码示例(使用PDF打印以节省纸张)

你知道怎么了吗?到目前为止,我唯一可行的解决方案是将客户的系统升级到Windows 10(这迟早会完成,只会延迟其他已完成应用的发布)


非常感谢您的帮助。

在干净的虚拟Windows 7中运行后,我追踪自己,因为我尝试了许多不同的字体样式,我怀疑我最初使用的应用程序的字体是错误的。我确保这次在客户的Windows 7中安装了正确的字体,并将代码恢复为

var fontReg = new FontFamily("NK57 Monospace Cd Bk");
它现在正在工作。无论如何,我声明所有其他方法(使用指向ttf文件的链接,将ttf文件打包到应用程序中)在Windows 7上都不受支持,因为它在Windows 10上工作,但在Windows 7上不工作,并且没有空间来处理同样的错误字体错误


感谢Peter和Heki的建议。

可能不受支持,或者您可能需要检查打印机驱动程序设置,具体取决于您的打印机制造商、型号和驱动程序。有些打印机只打印ROM中已有的字体;他们无法下载TrueType或其他字体格式。通常,在这些情况下,您可以设置打印机驱动程序设置以光栅化文本,但在某些情况下可以禁用此设置。当然,在某些情况下,你没有选择权。您需要仔细查看打印机设置,以了解如何使用此特定驱动程序。考虑使用XPS驱动程序来测试代码问题。@ PtddUnHuo,驱动程序设置是否也适用于PDF?打印成PDF也不起作用。我开始认为W7中真的不支持它,尽管我不考虑边缘情况(真的没有人使用自定义字体从WPF打印吗?)。不管怎样,我都会尝试更多地修改打印机设置,谢谢你的提示。@mikiqex在用常规激光打印机打印自定义字体时,我也遇到过丢失字体的问题。我最终被狠狠地揍了一顿;生成控件的图像并打印该图像。我很想看到你这个问题的答案。使用普通打印机时是否保留字体?我决定将旧的Win 7安装到VMware中,更让人困惑的是,print to PDF(使用PDFill PDF&Image Writer)正在那里工作!:-/我使用了最基本的方法,安装了字体和新的FontFamily(“NK57 Monospace Cd Bk”);“驱动程序设置是否也适用于PDF?”--这取决于驱动程序。IIRC,Win 7没有内置的“打印到PDF”,所以您必须使用第三方驱动程序。每个驱动程序都有自己的特定行为。行为甚至可以配置(包括在文档中嵌入字体的能力)。
var fontReg = new FontFamily("NK57 Monospace Cd Bk");