Si vous pouvez le charger dans un flux, essayez d'utiliser un PrivateFontCollection. Exemple de code dans my answer to another question.
EDIT: Voir System.Net.WebRequest.GetRequestStream, charger l'URI dans un flux, puis charger ce flux dans le PFC comme mentionné dans le code lié.
En outre, je voudrais enregistrer le fichier localement, et le chercher d'abord, de sorte que vous n'avez pas à le télécharger chaque fois que vous exécutez le programme.
ÉDITER À NOUVEAU: Désolé, pas WebRequest.GetRequestStream, vous voulez WebResponse.GetResponseStream(). Voici quelques exemples de code pour faire exactement ce que vous cherchez.
using System;
using System.Drawing;
using System.Drawing.Text;
using System.IO;
using System.Net;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace RemoteFontTest
{
public partial class Form1 : Form
{
readonly PrivateFontCollection pfc = new PrivateFontCollection();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
WebRequest request = WebRequest.Create(@"http://somedomain.com/foo/blah/somefont.ttf");
request.Credentials = CredentialCache.DefaultCredentials;
WebResponse response = request.GetResponse();
using (Stream fontStream = response.GetResponseStream())
{
if (null == fontStream)
{
return;
}
int fontStreamLength = (int)fontStream.Length;
IntPtr data = Marshal.AllocCoTaskMem(fontStreamLength);
byte[] fontData = new byte[fontStreamLength];
fontStream.Read(fontData, 0, fontStreamLength);
Marshal.Copy(fontData, 0, data, fontStreamLength);
pfc.AddMemoryFont(data, fontStreamLength);
Marshal.FreeCoTaskMem(data);
}
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
using (SolidBrush brush = new SolidBrush(Color.Black))
{
using (Font font = new Font(pfc.Families[0], 32, FontStyle.Regular, GraphicsUnit.Point))
{
e.Graphics.DrawString(font.Name, font, brush, 10, 10, StringFormat.GenericTypographic);
}
}
}
}
}
: S Y a-t-il un moyen plus simple? Le problème est que je ne peux pas le faire fonctionner quand j'ai la police dans "Ressources", donc je cherche la solution la plus simple. – ozke
Je ne voulais pas le charger à partir d'une ressource, mais essayer de comprendre comment télécharger votre police à partir de l'URL spécifiée dans une sorte de Stream (FileStream, MemoryStream, etc ...), puis le charger dans le PFC . Ne vous inquiétez pas de la partie ressource du code que j'ai lié. –