Как встроить шрифт в решение для использования в PDF с RDLC

У меня есть отчет RDLC, созданный с помощью Webforms.LocalReport, в котором используются несколько пользовательских шрифтов, которые я установил на своем компьютере разработчика. Это хорошо работает и встраивает шрифты в 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

Заранее спасибо!

1 ответ

Прежде всего убедитесь, что шрифт, который вы используете, позволяет встраивать. В вашем случае вы можете проверить это из файла PDF, сгенерированного вашим устройством разработчика, на вкладке "Файл"> "Свойства"> "Шрифты". Права на встраивание шрифта предоставляются автором шрифта. Установленные шрифты включают свойство, указывающее, намерен ли автор шрифта встраивать шрифт в документ. Если значением свойства является EMBED_NOEMBEDDING, шрифт не внедряется в файл PDF. Для получения дополнительной информации см. "TTGetEmbeddingType" на msdn.microsoft.com.

Во-вторых, убедитесь, что шрифт установлен на вашем сервере веб-хостинга.

Если это так, то анализатор PDF средства просмотра отчетов автоматически встраивает шрифт в каждый созданный PDF-файл, и нет необходимости распространять этот шрифт каждому пользователю.

Другие вопросы по тегам