2009-06-29 5 views
11

Gibt es Bibliotheken, die MathML (oder noch besser OMML) verwenden und eine .PNG-Datei ausgeben?MathML oder OMML zu PNG mit .NET?

Ich stelle einen Export-Prozess für .docx-Dateien zusammen, und als Teil dieses Prozesses möchte ich Gleichungen extrahieren und sie als .PNG-Dateien rendern. Word 2007 tut dies nativ, wenn Sie ein Dokument für das Web speichern, aber bis jetzt konnte ich keine Möglichkeit finden, dies programmatisch zu tun (wenn jemand eine Antwort dafür hat, wäre es sogar noch besser). Die nächstbeste Lösung ist also, die OMML zu verwenden und die von Microsoft bereitgestellten XSL-Stylesheets zu verwenden und diese in MathML umzuwandeln.

Leider konnte ich keine (funktionierende) Rendering-Bibliotheken für MathML oder OMML finden.

Wenn es keine reinen .NET-Bibliotheken dafür gibt, werde ich mich für alles entscheiden, was ich von einer Kommandozeile aus aufrufen kann, um ein .PNG entweder aus MathML oder OMML auszugeben.

+0

wollte nur folgen, um zu sehen, ob das unten Ihre Frage beantwortet. –

Antwort

1

Ich habe ein ähnliches Bedürfnis. Hier ist ein Fragment, das funktioniert für mich:

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

Einige in Ordnung Nachrichten, einige nicht so gute Nachricht und einige seltsame Nachrichten:

Die Ordnung Nachricht ist die Bibliothek, die Sie suchen sind, ist bei http://msdn.microsoft.com/en-us/library/documentformat.openxml.math%28office.14%29.aspx. Zumindest denke ich, dass Sie danach suchen.

Die nicht so toll Nachrichten ist, dass der Code unten nicht genau wie erhofft funktioniert - es kopiert die meisten Zeichen als "?" und das resultierende Bild ist ziemlich Mist.

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 

Die seltsam Nachricht ist, dass OMML tut Kopieren/Einfügen in Powerpoint nur fein wie ein Bild, das als PNG kann dann gespeichert werden. Etwas umständlich, aber es kann mit VSTO gemacht werden.

+0

Kopieren/Einfügen funktioniert möglicherweise nicht gut, aber speichern Sie, da es gute Ergebnisse für mich liefert –

2

Wir machen eine DLL-Bibliothek namens Equation Composer, die viele mit .NET verwenden, um MathML in PNG zu konvertieren. Es ist auch als ausführbare Befehlszeile verfügbar. Es ist nicht kostenlos, aber das bedeutet, dass Sie technischen Support und Fehlerbehebungen erhalten. Mehr Infos gibt es hier: http://dessci.com/en/products/mathflow/mf_components.htm

0

Wenn Sie mögen, was Microsoft Word tut, wird der Code verwenden sie tun es aus der Entscheidung Wissenschaft zur Verfügung ... http://dessci.com/ ... ich ihre MathFlow Produkt evaluieren werden bald, aber noch nicht ... also kann ich noch nicht bestätigen, dass die PNG-Generation gut funktioniert.