MathML или OMML в PNG с .NET?
Существуют ли библиотеки, которые принимают MathML (или, что еще более желательно, OMML) и выдает файл .PNG?
Я собираю процесс экспорта файлов .docx и, как часть этого процесса, хотел бы извлечь уравнения и сделать их как .PNG файлы. Word 2007 делает это изначально, когда вы сохраняете документ для Интернета, но до сих пор я не смог найти способ сделать это программно (если у кого есть ответ на это, было бы еще лучше). Итак, самое лучшее - взять OMML и использовать предоставленные Microsoft XSL-таблицы стилей и преобразовать их в MathML.
К сожалению, я не смог найти какие-либо (рабочие) библиотеки рендеринга для MathML или OMML.
Если для этого нет каких-либо чистых .NET-библиотек, я соглашусь на все, что я могу вызвать из командной строки для вывода .PNG из MathML или OMML.
Ответы
Ответ 1
У меня такая же потребность. Здесь фрагмент, который работает для меня:
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);
}
Ответ 2
Вы можете попробовать SVGMath для преобразования mathml в SVG, а затем некоторый инструмент для преобразования svg в png, например.
http://harriyott.com/2008/05/converting-svg-images-to-png-in-c.aspx
или используйте rsvg lib для преобразования svg в png файлы.
Ответ 3
Мы создаем библиотеку DLL, которая называется Equation Composer, которую многие используют с .NET для преобразования MathML в PNG. Он также доступен как исполняемый файл командной строки. Это не бесплатно, но это означает, что вы получаете техническую поддержку и исправления ошибок. Дополнительная информация доступна здесь: http://dessci.com/en/products/mathflow/mf_components.htm
Ответ 4
Вы можете попробовать Java-библиотеку JEuclid:
http://jeuclid.sourceforge.net/
Ответ 5
Некоторые хорошие новости, некоторые не очень хорошие новости и некоторые странные новости:
Хорошие новости - это библиотека, которую вы ищете, в 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.
Ответ 6
Если вам нравится, что делает Microsoft Word, то код, который они используют для этого, доступен из Science Dec... http://dessci.com/.. Я буду оценивать их продукт MathFlow в ближайшее время, но еще не... поэтому я еще не могу проверить, что генератор PNG работает хорошо.