如何在解决方案中嵌入字体以用于带有 RDLC 的 PDF

Posted

技术标签:

【中文标题】如何在解决方案中嵌入字体以用于带有 RDLC 的 PDF【英文标题】:How to embed a Font in solution to use for PDF with RDLC 【发布时间】:2013-10-14 18:53:25 【问题描述】:

我有一个通过 Webforms.LocalReport 创建的 RDLC 报告,它使用了我在开发机器上安装的一些自定义字体。这很好用,并将字体嵌入到 PDF 中,以便其他人不需要安装字体即可查看。

我的问题是,在部署到我们的生产环境时,有许多机器可能会运行报告。我不想在每台“潜在”机器上安装字体 - 有没有办法将(.TTF)字体文件附加到(VB.NET)解决方案,并从这里提取字体,而不是从本地机器?

希望这是有道理的!

如果有帮助,下面是我正在使用的代码示例

    Dim PDFfile As FileInfo
    Dim deviceInfo As String = String.Empty
    Dim PDF() As Byte
    Dim reportParams As List(Of ReportParameter)

    Using report As New LocalReport

        ' Set up report
        ' Report device information to create PDF with A4 sized pages
        deviceInfo = "<DeviceInfo>" & _
                     "  <OutputFormat>EMF</OutputFormat>" & _
                     "  <Orientation>Portrait</Orientation>" & _
                     "  <PageWidth>21cm</PageWidth>" & _
                     "  <PageHeight>29.7cm</PageHeight>" & _
                     "  <MarginTop>0cm</MarginTop>" & _
                     "  <MarginLeft>0cm</MarginLeft>" & _
                     "  <MarginRight>0cm</MarginRight>" & _
                     "  <MarginBottom>0cm</MarginBottom>" & _
                     "</DeviceInfo>"
        With report
            .DisplayName = "Display Name"
            report.ReportEmbeddedResource = "ReportName.rdlc"

            ' Add all necessary parameters
            reportParams = New List(Of ReportParameter)
            reportParams.Add(...)

            .SetParameters(reportParams)
        End With

        PDF = report.Render("PDF", deviceInfo)
        PDFfile = New FileInfo("C:\")

        Using stream As FileStream = PDFfile.Create
            stream.Write(PDF, 0, PDF.Length)
        End Using
    End Using

提前致谢!

【问题讨论】:

欢迎来到 SO,user2364304。 哈,干杯,用户名更新了! 【参考方案1】:

首先确保您使用的字体允许嵌入。 在您的情况下,您可以从文件>属性>字体选项卡中的开发机器生成的 PDF 文件中验证它。字体嵌入权限由字体作者授予。已安装的字体包含一个属性,该属性指示字体作者是否打算允许在文档中嵌入字体。如果属性值为 EMBED_NOEMBEDDING,则字体不会嵌入 PDF 文件中。有关详细信息,请参阅 msdn.microsoft.com 上的“TTGetEmbeddingType”。

其次,确保您的网络托管服务器上安装了字体。

如果是这样,那么报表查看器 PDF 解析器会自动将字体嵌入到生成的每个 PDF 中,并且不需要将字体分发给每个用户。

【讨论】:

谢谢@Syed - 不幸的是(实际上,很高兴!)我不再为这家公司工作......但我很确定字体允许嵌入。此外,它是一个桌面应用程序,因此没有要安装的网络服务器。我希望它可以打包到应用程序的 exe 中(这可能还不清楚......)

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

如何在 RDLC 的文本框中设置上标

动态设置 RDLC 报告中的图像源

如何在 UIView 中嵌入表格视图,类似于在 iBooks 中用于字体选择的方式?

如何将 RDLC 中的日期时间格式化为以本地日期时间格式显示?

未嵌入字体的 Ghostscript 和 PDF

c# winform 如何给report.rdlc 图像控件,添加我电脑里保存的图片?