如何使用 RDLC 在 PDF 中嵌入字体

Posted

技术标签:

【中文标题】如何使用 RDLC 在 PDF 中嵌入字体【英文标题】:How to embed a Font in a PDF with RDLC 【发布时间】:2010-10-18 00:51:00 【问题描述】:

我正在使用 Microsoft.Reporting.WebForms.LocalReport 生成一些 PDF,一切都像魅力一样,但现在邪恶的营销想要使用自定义字体(他们正在使用诸如“企业身份”之类的疯狂论点)。

我已经看过了,现在我知道了

我需要 ReportViewer 2008 SP1 或更高版本 字体必须标记为允许嵌入 字体必须是 TrueType

但它仍然不起作用。 我相信 RDLC 不支持此功能,有人知道是否是这种情况吗? 不幸的是,我无法使用服务器端报告,因为我缺少报告服务器。

tia

【问题讨论】:

找到解决方案了吗?遇到同样的问题... 这对我们有用 - 我们正在使用与 Visual Studio 2010 捆绑的 Microsoft Reporting 版本。 【参考方案1】:

为了补充 marc.d 的出色答案,我可以确认,在我的情况下,我还必须完全重新启动服务器。我还要补充一点,检查字体是否可嵌入的方法是执行我在下面描述的两种方法之一。

方法一)如果你的字体已经安装了

在 Windows 资源管理器中浏览到 C:\Windows\Fonts\,找到您感兴趣的字体。请注意,同一家族中的字体将被组合在一起,因此您需要双击一个组才能导航到单个字体文件。在资源管理器窗口底部的属性列表中,您将看到“可嵌入性”:

方法 2)如果您在其他位置有 TTF 文件

使用 Windows 资源管理器,打开文件属性并切换到详细信息选项卡:

您可能会看到字体的可能值是:

无嵌入 - 字体供应商不允许嵌入。这些字体非常少见。 打印和预览 - 字体供应商允许嵌入,但文档被锁定且无法编辑。大多数第三方字体都有此设置。 可编辑 - 字体供应商允许将字体嵌入到文档中,并允许使用嵌入的字体编辑文档 Installable - 这是最宽松的设置。字体供应商允许将字体嵌入文档中,并允许文档查看应用程序将字体永久安装在用户的计算机上。大多数应用程序将这些字体视为设置为可编辑嵌入的字体。

来源:https://www.microsoft.com/en-us/microsoft-365/blog/2015/07/06/document-font-embedding-demystified/

【讨论】:

【参考方案2】: 字体必须标记为允许嵌入 字体必须是 TrueType 类型 将您的字体添加到 Windows 服务器字体中

如果您执行了上述所有操作并且字体未显示在 Pdf 报告 RDLC 文件中,

也许你必须重新启动服务器,它确实对我有用

【讨论】:

【参考方案3】:

我遇到了同样的问题,但我发现不需要嵌入字体。问题在于 html 中的 Font Face 属性。我们使用的 HTML 编辑器生成了这样的 Font 标签:

<font face="Impact,Charcoal,sans-serif" size="6">Impact </font>

这对于报告查看器来说很好,但要生成 PDF 文件,它需要如下所示:

<font face="Impact" size="6">Impact </font>

所以我添加了代码来替换绑定到报表之前的属性值:

htmlValue = htmlValue.Replace("Impact,Charcoal,sans-serif", "Impact")
               .Replace("Arial,Helvetica,sans-serif", "Arial")
               .Replace("Georgia,serif", "Georgia")
               .Replace("Verdana,Geneva,sans-serif", "Verdana")
               .Replace("'Courier New',Courier,monospace", "Courier New")
               .Replace("'Lucida Console',Monaco,monospace", "Lucida Console")
               .Replace("Tahoma,Geneva,sans-serif", "Tahoma")
               .Replace("'Times New Roman',Times,serif", "Times New Roman")
               .Replace("'Trebuchet MS',Helvetica,sans-serif", "Trebuchet MS");

【讨论】:

【参考方案4】:

嵌入字体适用于 Microsoft Reporting 2010 或更高版本,以下限制仍然适用

字体必须标记为允许嵌入 字体必须是 TrueType 类型

您可能会遇到字体被嵌入但 PDF 仍以 Arial 显示文本的问题。这发生在我在 Windows Server 2008 R2 上安装了一些新字体之后,重新启动 AppPool (ASP.NET MVC) 并没有解决这个问题,需要重新启动服务器。

【讨论】:

【参考方案5】:

我在 Visual Studio 2008 中使用 Arial Narrow 字体做了一个简单的测试,效果很好。 我已经在没有字体的虚拟 XP 机器上测试了生成的 PDF,并且渲染正常。 可能是字体的问题?

嗯,也许是这样 - 在我的测试中,我使用了 Winforms.LocalReport 而不是 WebForms。也许这就是诀窍?

【讨论】:

以上是关于如何使用 RDLC 在 PDF 中嵌入字体的主要内容,如果未能解决你的问题,请参考以下文章

如何在现有 PDF 中嵌入字体?

如何从 PDF 中提取嵌入字体作为有效字体文件?

如何修复 PDF 文件并嵌入丢失的字体

如何替换或修改嵌入在 PDF 文件中的字体或字形?

Word转PDF文件,如何在PDF中嵌入字体

使用 iText 将字体嵌入 PDF 文件