Как внедрить мой пользовательский шрифт (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);
}