MathML или OMML для PNG с .NET? - PullRequest
11 голосов
/ 30 июня 2009

Существуют ли библиотеки, которые принимают MathML (или, еще более предпочтительно, OMML) и выводят файл .PNG?

Я собираю процесс экспорта для файлов .docx и, как часть этого процесса, я хотел бы извлечь уравнения и отобразить их как файлы .PNG. Word 2007 делает это изначально, когда вы сохраняете документ для Интернета, но до сих пор я не смог найти способ сделать это программно (если у кого-то есть ответ на это, было бы еще лучше). Итак, следующая лучшая вещь - это взять OMML и использовать предоставленные Microsoft таблицы стилей XSL и преобразовать их в MathML.

К сожалению, я не смог найти (работающих) библиотек рендеринга ни для MathML, ни для OMML.

Если для этого нет чистых библиотек .NET, я соглашусь на все, что я могу вызвать из командной строки для вывода .PNG из MathML или OMML.

Ответы [ 6 ]

3 голосов
/ 13 марта 2010

Вы можете попробовать SVGMath для преобразования mathml в SVG, а затем какой-нибудь инструмент для преобразования svg в png, например

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

или используйте rsvg lib для преобразования svg в png файлы.

2 голосов
/ 15 марта 2010

Мы создаем библиотеку DLL под названием Equation Composer, которую многие используют с .NET для преобразования MathML в PNG. Это также доступно как исполняемый файл командной строки. Это не бесплатно, но это означает, что вы получаете техническую поддержку и исправления ошибок. Более подробная информация доступна здесь: http://dessci.com/en/products/mathflow/mf_components.htm

1 голос
/ 29 мая 2010

У меня есть аналогичная потребность. Вот фрагмент, который работает для меня:

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);
}
1 голос
/ 13 марта 2010

Некоторые хорошие новости, некоторые не очень хорошие новости и некоторые странные новости:

Новости окей - это библиотека, которую вы ищете в http://msdn.microsoft.com/en-us/library/documentformat.openxml.math%28office.14%29.aspx. По крайней мере, я думаю, что вы ищете.

Не очень хорошие новости заключаются в том, что приведенный ниже код работает не совсем так, как ожидалось, - он копирует большинство символов как "?" и получающееся изображение в значительной степени дерьмо.

Sub SaveOMML()
Dim rng As Range
Dim Equation As OMath

Set rng = Selection.Range
rng.Text = "Celsius = (5/9)(Fahrenheit – 32)"
Set rng = Selection.OMaths.Add(rng)
Set Equation = rng.OMaths(1)
Equation.BuildUp
Equation.Range.Select

With Selection.Range
        .CopyAsPicture
        .PasteSpecial DataType:=wdPasteMetafilePicture
End With

End Sub

Странные странные новости заключаются в том, что OMML делает копирование / вставку в PowerPoint так же хорошо, как изображение, которое затем можно сохранить в формате PNG. Немного громоздко, но это можно сделать с помощью VSTO.

1 голос
/ 13 марта 2010

Вы можете попробовать библиотеку Java JEuclid: http://jeuclid.sourceforge.net/

0 голосов
/ 01 октября 2011

Если вам нравится то, что делает Microsoft Word, код, который они используют для этого, доступен в Decision Science ... http://dessci.com/ ... Скоро я буду оценивать их продукт MathFlow, но пока нет ... так что я пока не могу убедиться, что генерация PNG работает хорошо.

...