Как внедрить мой пользовательский шрифт (PrivateFont) в мою работу с помощью C#? (Мой текст встроен как изображение)

Я использую C# для печати документов через установленные очереди печати.

Я хочу использовать свои пользовательские шрифты, не устанавливая их в Windows, потому что это не разрешено политикой безопасности клиента.

Я использую PrivateFontCollection для не установленных шрифтов, но я понял, что качество очень низкое, потому что текст был напечатан как изображение:

  • Когда я печатал в PDF, частные шрифты не были встроены.
  • Когда я печатал в XPS, я нашел изображение, которое было создано из моего текста. (Вы можете переименовать расширение xps в zip, и вы можете увидеть ресурсы).

Мой текст отображается в изображение в документе XPS

Поэтому я ищу способ Как можно печатать документы, используя не установленные шрифты, что будет встроено в задание на печать.

Мой код следующий:

using System.Drawing.Printing;
using System.Drawing.Text;

private void button1_Click(object sender, EventArgs e)
        {
            PrintDocument PD = new PrintDocument();
            PD.PrinterSettings.PrinterName = "Microsoft XPS Document Writer";
            PD.PrintPage += Pd_PrintPage;
            PD.Print();
        }
private void Pd_PrintPage(object sender, PrintPageEventArgs e)
        {
            e.Graphics.PageUnit= GraphicsUnit.Millimeter;

            //Create Fontstyle and StringFormat
            FontStyle FS = FontStyle.Regular;
            StringFormat StrFormat = new StringFormat(StringFormat.GenericTypographic);

            //Create Private Font
            System.Drawing.Text.PrivateFontCollection privateFonts = new PrivateFontCollection();
            string fontsfolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Fonts);
            privateFonts.AddFontFile(fontsfolder + @"\arial.ttf");
            Font Font_Private = new Font(privateFonts.Families[0], 11, FS);

            //Create Installed Font
            Font Font_Installed = new Font("Arial", 11, FS);

            //Write text using Private Font: it will be printed as image
            e.Graphics.DrawString("Private Font", Font_Private, Brushes.Black, new Rectangle(10,10,40,20), StrFormat);

            //Write text using Installed Font: font will be embedded
            e.Graphics.DrawString("Installed Font", Font_Installed, Brushes.Black, new Rectangle(10, 20, 40, 20), StrFormat);


        }

0 ответов

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