Рисование текста с использованием шрифта из файла не работает

6

Я пытаюсь загрузить закрытый шрифт, используя System.Drawing.Text.PrivateFontCollection. Цель не устанавливать шрифт в системе.

Все примеры, которые я нахожу, выглядят довольно просто. Просто загрузите с помощью PrivateFontCollection, а затем создайте из него шрифт.

Ниже моего простого класса, чтобы проверить его.

Работает только при установке шрифта. В нет, текст печатается в предварительном просмотре диалога с использованием некоторого шрифта по умолчанию. Я проверил, что шрифт правильно загружен. Что мне не хватает? Спасибо за любую помощь.

public partial class Test : Form
{
    private PrintDocument printDocument1 = new PrintDocument();
    System.Drawing.Text.PrivateFontCollection privateFonts;
    private Font _barCodeFont;

    public Test()
    {
        InitializeComponent();
    }
    private void Test_Load(object sender, EventArgs e)
    {
        privateFonts = new System.Drawing.Text.PrivateFontCollection();
        privateFonts.AddFontFile("Code128.ttf");
    }

    private void btbTest_Click(object sender, EventArgs e)
    {
        PrintDocument pd = new PrintDocument();

        pd.PrintPage += new PrintPageEventHandler(this.pd_PrintPage);
        pd.DocumentName = "Label";

        PrintPreviewDialog pp = new PrintPreviewDialog();
        pp.Document = pd;
        pp.WindowState = FormWindowState.Normal;
        pp.ShowDialog();

    }
    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
        _barCodeFont = new Font(privateFonts.Families[0], 12, FontStyle.Regular);
        ev.Graphics.DrawString("Should Be a bar code", _barCodeFont, Brushes.Black, 0, 0);
        ev.HasMorePages = false;
    }      
}
  • 1
    Я думаю, что это по замыслу. Погуглив это, вы найдете пустошь людей, пытающихся решить эту проблему без особого количества ответов. В конечном счете, я думаю, что шрифт должен быть установлен на машине, чтобы распечатать его. В противном случае типичным обходным решением является преобразование изображения в изображение, но качество, очевидно, пострадает.
  • 0
    @LarsTech: эта ссылка предоставляет рабочий пример: msdn.microsoft.com/en-us/library/y505zzfw(v=vs.110).aspx
Показать ещё 5 комментариев
Теги:
winforms

1 ответ

0

попробуйте это

 private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
    Font _barCodeFont = new Font(privateFonts.Families[0], 12, FontStyle.Regular);
    ev.Graphics.DrawString("Should Be a bar code", _barCodeFont, Brushes.Black, 0, 0);
    ev.HasMorePages = false;
}    


и удалите
частный шрифт _barCodeFont;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню