2015-08-26 10 views
16

Ich versuche MathType-Gleichung zu konvertieren, die als OLE-Binärdatei in MathML mit MathType SDK gespeichert wird.MathType-Gleichung in OLE-Binärdatei in MathML konvertieren

Die Eingabedatei für mein Programm ist eine DocX, die eingebettete MathType-Gleichungen enthalten würde. Ich suche nach einer Lösung, die unabhängig von MS Word ist. DocX ist eine Zip-Datei, und sobald es extrahiert ist, können wir die Binärdatei für jedes OLE-Objekt im Ordner "word/embeddings /" finden. Normalerweise würde der Dateiname oleObject1.bin, oleObject2.bin usw.

Als ich eincheckte mit MathType SDK hat es eine Klasse „ConvertEquation“, die folgende Methode:

virtual public bool Convert(EquationInput ei, EquationOutput eo) 

EquationInput ist eine abstrakte Klasse für Folgende konkrete Klassen werden zur Verfügung gestellt:

In den oben aufgeführten Klassen scheint keiner von ihnen OLE-Binärcode zu unterstützen.

Entsprechend dem SDK-Dokument von MathType werden MTEF-Daten als systemeigenes Datenformat des Objekts gespeichert. Wenn ein Gleichungsobjekt in einen OLE- "Stream" geschrieben werden soll, wird ein 28-Byte-Header geschrieben, gefolgt von den MTEF-Daten. Ich denke, das ist genau das, was in dieser Binärdatei vorhanden ist. Aber nur scheinbar gibt es keine Möglichkeit, wie dieses Format verwendet werden kann, um vom SDK verwendet zu werden, um es in MathML zu konvertieren. Irgendwelche Gedanken?

Dank

+0

Obwohl keine vollständige Antwort, können Sie einige Inspiration in der folgenden Frage finden. Ein Link zum Herunterladen des vorgeschlagenen Codes finden Sie im letzten Kommentar der Antwort. Es hängt zwar von Word ab, aber es könnte Ihnen helfen, den Anfang zu machen. http://stackoverflow.com/questions/15320088/parse-mathtype-mtef-data-frome-binary-string – DanL

+0

Danke. Das habe ich schon gesehen. Damit bin ich nur so weit gekommen. Aber ich kann nicht weiter von dem ausgehen, was ich oben gesagt habe. –

+0

Wenn Sie die Bytestreams physisch erhalten können, würde ich Folgendes versuchen: Erstellen Sie eine App, die OLE das Objekt aktivieren kann. Dann haben Sie den Verweis auf das interne Objekt, das Sie dann an die Konvertierungsfunktion übergeben können. Ihre App würde tun, was Word tut, wenn es das Objekt aktiviert. Ich würde darüber nachdenken, dies in VB6 zumindest als Test zu machen. –

Antwort

0

Sie mathtype wmf-Datei mathml wie folgt konvertieren: ConvertEquation conv = new ConvertEquation(); var input = GleichungInputFileWMF ("mathTYpe.wmf"); var output = EquationOutputFileText ("MathMLName.txt", "MathML2 (m Namespace) .tdl")); conv.Convert (Eingang, Eingang);

Die Zeichenfolge "MathML2 (m Namespace) .tdl" steht für "tdl" -Datei, die in "MathType \ Translators" Pfad enthält, wenn Sie den Translators-Pfad öffnen, können Sie viele Typen finden.

+0

Danke. Ich werde es versuchen. –

0

Sie können MathMagic Gleichung Editor (Windows-Version) versuchen. MathMagic kann alle eingebetteten Word-Gleichungen aus den Dokumenten (.doc oder .docx) extrahieren und sie in ein anderes Format speichern (zB JPG, PNG, BMP, PDF, TeX, LaTeX, MathML,. ..) als Batch-Konvertierung Job. Leider unterstützt ihre Testversion diese Stapelkonvertierung nicht. Eine gültige Lizenz (sogar 1-Monats- oder 2-Monats-Lizenz) ist erforderlich, um die Konvertierungsfunktion zu aktivieren.