问题标签 [privatefontcollection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
111 浏览

.net - 使用 PrivateFontCollection 的 AddMemoryFont() 优于 AddFontFile() 有什么好处

经过多次试验和错误,我终于让我的应用程序在开发机器以外的机器上使用自定义字体,但是,我不确定我已经开始使用的两种方法中的哪一种是首选的做事方式。

将字体作为资源嵌入并使用Assembly.GetManifestResourceStream()将字体文件数据推送到非托管内存中并将其添加到PrivateFontCollection使用中AddMemoryFont(),如下所示:

(删除所有错误处理和多余代码)

或者通过简单地将字体包含在应用程序中,而不是将其作为资源嵌入并使用PrivateFontCollection.AddFontFile()

在这两种方法中,字体集合都需要在表单的整个生命周期中保留,并且我必须重复代码并为应用程序中的每个表单设置字体对象,这样我就不会践踏非托管内存。

除了第二种方法允许用户访问您的字体文件这一事实之外,第一种方法还有其他好处吗?

或者,是否有另一种我不知道的首选方法?

0 投票
0 回答
71 浏览

vb.net - 如何在 VB.net 应用程序中使用 PrivateFontCollection 以在 PrintDocument VB.NET 中使用

我试图让 privatefontcollection 工作。但到目前为止它不起作用,不是错误的意思,只是屏幕上看到的字体是 MS Sans Serif 而不是我试图加载的字体。到目前为止,我已经尝试了两种不同的方法,但似乎都不适合我。

首先我试过:

我从打印子程序中调用了这个函数:

但我在 printdocument 打印预览中看到的只是 MS 无衬线字体。不是我加载到资源中的字体。

然后我尝试了这种方法:

我又得到了同样的结果

有什么我想念的东西才能让它工作吗?对此提出的其他问题似乎表明这应该可行。

我应该提一下,最终用户将在系统管理员锁定的 PC 上运行应用程序,因此无法选择“安装”字体。只有在应用程序运行时/调用子例程时,我才需要使用字体。

0 投票
0 回答
77 浏览

vb.net - AddFontResource / PrivateFontCollection 不会使字体立即可用于我的应用程序

我正在尝试为我的应用程序使用 PrivateFontCollection,以便它可以打印具有特定字体的文档。请注意,我无法“安装”字体,因为 Windows 目录受管理员保护。

我的代码可以工作,只要我关闭我的应用程序并重新启动它,当我重新启动它时,它会识别出字体在那里并且可以使用。但是,如果我单击命令按钮将字体安装为 privatefontcollection,然后刷新我的 PrintDocument,它不会使用新安装的字体显示它。我必须关闭应用程序并打开它,然后它就可以了。

下一个子程序是绘制文档的子程序。我有一个功能来检查字体是否已安装,如果没有,则使用替代字体。

检查字体是否已安装的功能。

上面的这个函数可能是问题,因为它返回 false。请注意,如果我关闭应用程序并重新启动它,那么这个相同的函数将检测 privatefontcollection 并返回 true,我可以使用我的字体成功打印我的文档。

我确实尝试将安装字体子例程添加到我的应用程序的开头。然后如果安装了字体则引发一个标志,然后尝试调用 Application.Restart() 方法,以便在启动画面启动时它可以安装字体,然后立即重新启动应用程序,这当然会锁定到安装了字体,但这种方法只是让应用程序处于打开和关闭的循环中。