Использование частных TTF-шрифтов в PDFsharp

Я работаю над настольным приложением C# .NET WPF, которое будет генерировать PDF-файл, для которого требуется очень специфический шрифт, который не будет установлен в системе. Я использую PdfSharp-WPF v1.32. Файл importantSc.ttf находится в папке ресурсов проекта.

Лучше всего, если мой путь URI неправильный, но я думаю, что он правильный. У меня правильное имя семейства шрифтов, так как оно работало, когда шрифт был установлен на моем компьютере разработчика.

using System;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using Microsoft.Win32;
using PdfSharp.Drawing.Layout;
using System.Collections.Generic;
using System.Windows.Input;
using System.Windows;

namespace MyProject
{
    public class MyPdfFile
    {
        private PdfDocument doc;

        public void MakePdf()
        {
            Double x1, y1;      
            XBrush brush = XBrushes.Black;
            XGraphics xgf = XGraphics.FromPdfPage(page);
            doc = new PdfDocument();
            PdfPage page = doc.AddPage();

            // Load in a private font to use.
            XPrivateFontCollection privateFontCollection = new XPrivateFontCollection();
            String fontFamilyName = "Important Script AM";
            String fontUriPath = @"pack://application:,,,/importantSc.ttf";

            Uri fontUri = new Uri( fontUriPath );
            privateFontCollection.Add(fontUri, "./#" + fontFamilyName);

            XFont font = new XFont(fontFamilyName, 9, XFontStyle.Regular); // <-- the error happens here

            //Add text to page
            x1 = 1.96 * 72;
            y1 = 3.25 * 72;
            String printString = "I wish this would work!";
            xgf.DrawString(printString, font, brush, x1, y1);

            xgf.Dispose();
        }
    }
}

Я получаю следующую ошибку:

Необработанное исключение типа "System.InvalidOperationException" возникло в PdfSharp-WPF.dll

Дополнительная информация: Не удается получить соответствующий шрифт глифа для шрифта "Важный сценарий AM".

1 ответ

Вы не задаете вопросов.
Вот несколько заметок.

Обработка шрифтов стала намного лучше с PDFsharp 1.50 (в настоящее время бета-версия 3b). Я бы использовал 1,50, потому что я думаю, что новая бета-версия лучше, чем старая "стабильная" версия.
С IFontResolver Вы можете избежать использования синтаксиса ресурса "pack:".

Вы можете использовать такие инструменты, как DotNetPeek от JetBrains, чтобы проверить, действительно ли TTF встроен в сборку и под каким именем.

Вы можете использовать пакет исходного кода PDFsharp и отлаживать через privateFontCollection.Add чтобы увидеть, если он находит шрифты и, если да, какие шрифты.

С MCVE я мог бы помочь вам отладки.
https://stackru.com/help/mcve

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