Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MathML or OMML to PNG w/ .NET?

Are there any libraries which take MathML (or, even more preferably, OMML) and outputs a .PNG file?

I am putting together an export process for .docx files and, as a part of this process, I'd like to extract equations and render them as .PNG files. Word 2007 does this natively when you save a document for the web, but so far, I have not been able to find a way to do this programmatically (if anyone has an answer for that, it would be even better). So the next best thing is to take the OMML and use the Microsoft provided XSL stylesheets and transform them to MathML.

Unfortunately, I haven't been able to find any (working) rendering libraries for either MathML or OMML.

If there aren't any pure .NET libraries for this, I'll settle for just about anything that I can call from a commandline to output a .PNG from either MathML or OMML.

like image 509
Charles Chen Avatar asked Jun 29 '09 21:06

Charles Chen


3 Answers

You can try SVGMath to convert mathml to SVG and then some tool to convert svg to png e.g.

http://harriyott.com/2008/05/converting-svg-images-to-png-in-c.aspx

or use rsvg lib to convert svg to png files.

like image 139
Anurag Uniyal Avatar answered Nov 16 '22 01:11

Anurag Uniyal


We make a DLL library called the Equation Composer that many use with .NET to convert MathML to PNG. It's also available as a commandline executable. It's not free, but that means you get technical support and bug fixes. More info is available here: http://dessci.com/en/products/mathflow/mf_components.htm

like image 29
Autumn Cuellar Avatar answered Nov 15 '22 23:11

Autumn Cuellar


I have a similar need. Here's a fragment that works for me:

public void FormulaToImage(string imageName, string eq)
{
    Application app = new Application();
    Document _doc = app.Documents.Add();
    Range _range = _doc.Range();
    _range.Text = eq; // "Celsius = (5/9)(Fahrenheit – 32)";
    _doc.OMaths.Add(_range);
    _doc.OMaths.BuildUp();
    _doc.SaveAs(@"foo.htm", WdSaveFormat.wdFormatHTML);

    //the gif appears to be better quality than the png
    File.Move(@"foo_files\image002.gif", imageName + ".gif");                
    app.Documents.Close(WdSaveOptions.wdDoNotSaveChanges);
    app.Quit(false);
}
like image 25
Scott Weinstein Avatar answered Nov 16 '22 01:11

Scott Weinstein