using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Net; using System.Web; namespace TexCompiler { public static class Compiler { private static readonly Encoding ENCODING = Encoding.UTF8; private const string HEADER = @" \documentclass[12pt]{article} \pagestyle{empty} \usepackage[utf8x]{inputenc} \usepackage{ucs} \usepackage[russian]{babel} \usepackage{cmap} \usepackage[T1,T2A]{fontenc} \usepackage{pifont} \usepackage{textcomp} \usepackage{float} \usepackage{amsmath} \usepackage{amsfonts} \usepackage{amsthm} \usepackage{amssymb} \begin{document} "; private const string FOOTER = @" \end{document} "; /// /// http://msdn.microsoft.com/en-us/library/system.io.stream.write.aspx /// private static void CopyTo(this Stream input, Stream output) { const int size = 4096; byte[] bytes = new byte[4096]; int numBytes; while((numBytes = input.Read(bytes, 0, size)) > 0) { output.Write(bytes, 0, numBytes); } } public static MemoryStream GetPngStream(string tex) { Dictionary postData = new Dictionary { { "dev", "png16m" }, { "template", "no" }, { "src", HEADER + tex + FOOTER }, }; string post = string.Join("&", (from kvp in postData select string.Format("{0}={1}", HttpUtility.UrlEncode(kvp.Key, ENCODING), HttpUtility.UrlEncode(kvp.Value, ENCODING))).ToArray()); byte[] postBytes = Encoding.ASCII.GetBytes(post); HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://sciencesoft.at/image/latexurl/img.png"); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded;charset=utf-8"; request.ContentLength = postBytes.Length; using(Stream stream = request.GetRequestStream()) { stream.Write(postBytes, 0, postBytes.Length); } using(HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { try { MemoryStream memoryStream = new MemoryStream(); using(Stream responseStream = response.GetResponseStream()) { responseStream.CopyTo(memoryStream); memoryStream.Seek(0, SeekOrigin.Begin); return memoryStream; } } finally { response.Close(); } } } } }