问题标签 [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 投票
1 回答
732 浏览

c# - 为什么当我在 mono3.2.3 c# 中使用 PrivateFontCollection.Dispose() 时应用程序崩溃?

我正在用C#编写一个库,允许我将 HTML 转换为 PDF。显然,这个想法是它是跨平台的,也是我使用单声道的原因。为此,我必须使用System.Drawing.Text.PrivateFontCollection类加载卖方字体。

当应用程序完成执行所有代码时,应用程序意外退出。经过多次测试,我意识到问题在于何时调用Dispose 方法System.Drawing.Text.PrivateFontCollection或何时调用Dispose()of System.Drawing.FontFamily

这个问题在Windows中(我有 Windows 7 32 位),在linux 中我没有问题

这是测试代码

0 投票
1 回答
777 浏览

c++ - 调用 Gdiplus::PrivateFontCollection.AddMemoryFont 时出现访问冲突错误

按照这个演练,展示如何使用字体而无需在 C++ 中安装它:http: //www.codeproject.com/Articles/42041/How-to-Use-a-Font-Without-Installing-it我得到一个ntdll.dll 中的地址冲突错误 (0xc0000005)

DialogEx::OnInitDialog() 继承函数中的调用代码如下:

我调试了电话,一切对我来说都很好。长度匹配并且没有 NullPointers...

异常发生在被调用方法的某处gdiplusfontcollection.h

这是无法进一步调试的......

任何想法如何找出函数调用中出了什么问题?

0 投票
1 回答
1678 浏览

.net - PrivateFontCollection.AddMemoryFont 在 Windows Server 2012 R2 上产生随机错误

我有一个 .NET 3.5 应用程序,它使用 PrivateFontCollection.AddMemoryFont 将字体加载到内存中并使用它们来生成图像。我最近在 Windows Server 2012 R2 上安装了它,它正在产生间歇性错误。

这个方法说明了这个问题:

在 Windows 7 上,这始终有效。在 Windows Server 2012 R2 上,如果使用不止一种字体重复调用它会失败。例如:

即使调用了数百次,但使用不止一种字体调用:

将适用于前几次调用(大约 20 个),但随后会开始产生随机结果(第二次调用有时会返回一个带有侧翼文本的图像 - 即它混合了字体)。

我也偶尔(很少)在 DrawString 调用中收到“GDI+ 中发生一般错误”。

这些错误都不会在 Windows 7 上发生。

我尝试了各种清理方法,但都没有成功。

作为一种解决方法,我尝试将字体文件写入磁盘,然后使用 AddFontFile 加载,但是(在 Windows 2012 R2 上)字体文件在整个过程中被锁定,因此无法删除。这使得这个选项不可接受。

任何有关使 AddMemoryFont 始终如一地工作或让 AddFontFile 解锁文件的帮助,将不胜感激。

0 投票
1 回答
364 浏览

c# - 使用不同权重的自定义字体?

我有一个 asp.net 应用程序,并且我使用的是自定义字体,但是我需要同时使用字体的粗体版本和浅色版本。它们都来自同一个字体系列。我像这样添加它们:

虽然我添加了两个字体文件,但 pfc 的 Families 数组中只有一个项目,因此无论我指定什么 FontStyle,所有内容都会打印为粗体。我怎样才能使用我添加的两个文件,怎样才能让一些东西加粗,一些东西变浅?

0 投票
1 回答
952 浏览

asp.net - .NET PrivateFontCollection - 完成后如何释放文件锁

我有一个返回 PrivateFontCollection 的函数:

然后我按如下方式使用该函数:

我希望这些文件会被释放,但它们仍然被锁定:我收到以下错误:'操作无法完成,因为文件在系统中打开。关闭文件并重试。

在 IIS 中关闭网站无济于事;我们必须回收应用程序池才能发布。

谁能建议如何使用 PrivateFontCollection 以使文件在使用之间释放?

0 投票
1 回答
1538 浏览

c# - 如何删除 PrivateFontCollection.AddFontFile 的文件?

我们为短期使用创建了大量字体。字体嵌入在文档中。如果不再使用,我想删除字体文件。我们应该怎么做?以下简化代码不起作用:

由于文件被锁定,文件删除失败。我还能做些什么来释放文件锁?

PS:在我们使用 AddMemoryFont 之前。这适用于 Windows 7。但在 Windows 8 .NET 中,在处置第一个 FontFamily 后使用错误的字体文件。因为每个 Document 都可以包含其他字体,所以我们需要大量的字体并且不能包含对所有字体的引用。

0 投票
0 回答
97 浏览

c# - PrivateFontCollection 挂在初始化

我有一个客户端服务器应用程序。我想从服务器部分的文件中加载字体。这是我的代码。但不幸的是它会挂在 new PrivateFontCollection(); 线!!!!请注意,这部分正在另一个线程中运行。

请帮助我摆脱困境。有没有其他方法可以从文件中加载字体?

实际上,我确实编写了一个控制台应用程序,它只执行上面的代码,一切正常!我从 msdn 和 stackoverflow 获得了这个示例代码,但我不知道为什么它在我的服务器端应用程序中不起作用!!!它不会产生错误,我在该行设置了一个断点,然后按 F10 或 F11 然后它会执行该行但永远不会返回执行下一行!并且线程仍然处于运行状态,没有终止或其他什么......!而已!!!

0 投票
1 回答
531 浏览

.net - 带有 gdi+ 的 PrivateFontCollection 有时在 WINdows 8 或更高版本中使用错误的 FontStyle

如果您有一个从 PrivateFontCollection 创建的字体并尝试使用 GDI+ 用它绘制字符串,它有时会使用错误的 FontStyle。

我已经观察到从内存加载到 PrivateFontCollection 的字体和从文件加载到 PrivateFontCollection 的字体。

在下面的示例中,我正在从文件中加载字体。我将它们全部放在一个名为 Fonts 的文件夹中。如果我们像下面这样加载它们。

然后尝试使用以下代码绘制字符串 OnPaint

然后在大多数情况下,字符串将被绘制为对应于 FontStyle.Regular 的字体。我注意到如果您注意先加载 Regular 字体,那么 FontFamily 会伪造除 FontStyle.Regular 之外的任何 FontStyle。无论您是否已将它们加载到 PrivateFontCollection 中。

以下是我在其中看到过这种行为的一些字体。

  • 余哥特式
  • 加州脸书
  • TW CEN MT
  • Gill Sans MT
  • 柏林 Sans FB
  • 布罗瓦利亚UPC
  • 传统阿拉伯语

在 graphicsPath 上执行 Graphics.DrawString() 和 AddString 时,我看到了这种行为。使用 TextRenderer.DrawText() 将正确绘制字体。

您应该能够在 Windows 8 或 10 中轻松地重新创建此行为,只需使用他们的 PrivateFontCollection 示例代码https://msdn.microsoft.com/en-us/library/windows/desktop/ms533820(v=vs.85)。 aspx

根据我与 Microsoft 就此行为的通信,他们认为这是 gdi+ 的问题。

0 投票
1 回答
3367 浏览

c# - C#在知道字体名称时获取字体系列

我有PrivateFont这样声明

然后我通过索引获取字体信息:

现在,我想通过字体名称获取字体系列。我能怎么做?

0 投票
0 回答
1286 浏览

c# - 将字体从资源加载到 PrivateFontCollection 会导致损坏

我在将字体从资源加载到 PrivateFontCollection 时遇到了一些困难。

当我开始这个时,我成功地从文件中加载了字体,但是我希望将字体嵌入到我的项目中(因此用户端的文件混乱更少,应用程序运行时的 IO 也更少)。

下面的代码将加载字体,获取正确的名称,并允许缩放,但是没有一个字符正确显示。

示例用法:

这是从内存加载的样子: 从内存加载

这是从文件加载的样子: 从文件加载

我在嵌入式资源和基于文件的测试中都使用了当前的 FontAwesome TTF 文件。似乎嵌入时,翻译或从嵌入加载时丢失或打乱了某些东西。我需要帮助来完成这项工作,以便我可以将嵌入资源中的字体加载到 PrivateFontCollection 中。

我在 SO 上查看了一些“解决方案”,但是它们已经过时了,并且 Visual Studio 2013 中不再提供部分或全部命令/访问器(文章解决方案来自 4-5 年前)。一些示例“解决方案”以及为什么它们不起作用:

解决方案 #1 - 这不起作用,因为字体的访问器字符串返回 null。就我而言,访问器是MyProject.Properties.Resources.fontawesome_webfont

解决方案 #2 - 此解决方案最接近,但再次用于访问资源的方法不再有效。我上面的代码实现了一个收获版本,去掉了将 byte[] 数组传递到内存然后从内存加载的核心概念。由于在我的情况下,资源的 get{} 属性已经返回了一个 byte[] 数组,因此无需将其“转换”为字节数组,因此我(似乎)能够安全地删除该部分代码更新它以使用较新的访问器。

无论哪种情况,我都想要一个解决这个问题的方法,它允许我将嵌入资源中的字体文件加载到 PrivateFontCollection 中。