2014-03-24 14 views
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

我认为这是设计。谷歌搜索这找到了人们试图解决这个问题的荒原,没有太多的答案。最终,我认为字体需要安装在机器上才能打印。否则,典型的解决方法是将其位图映射到图像中,但质量显然会受到影响。 – LarsTech

+0

@LarsTech:此链接提供了一个工作示例:http://msdn.microsoft.com/en-us/library/y505zzfw(v=vs.110).aspx –

+2

@ Dan-o不适用于PrintPreviewDialog,它不会,这是OP在他遇到问题的地方。我重新编辑了它,它在表单上工作,但不在预览对话框中。 – LarsTech

回答

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;

相关问题