Einzelnen Beitrag anzeigen

Benutzerbild von Aenogym
Aenogym

Registriert seit: 7. Mär 2004
Ort: Schwerin
1.089 Beiträge
 
Delphi 7 Enterprise
 
#1

[MathType API] Word-Formelfelder zu MathML konvertieren

  Alt 25. Jul 2006, 09:17
hi ihr,

mithilfe von MathType kann man in Word-Dokumenten ja so ganz tolle Mathematische Formeln erstellen und anzeigen (besser, als die einfachen selbstgetippten Formelfelder àlà EQ \F(2;3) oder der integrierte Formeleditor).
Ich möchte nun aus einem Worddokument sämtliche Formelfelder (nicht die OLE-Objekte des Formeleditors, sondern die einfachen WordEquations, die in Textform eingegeben werden) konvertieren, um sie in MathML auszeichnen zu können.
Das ganze Funktioniert auch prächtig mit dem Programm MathType von DesignScience. MathType bietet auch eine API, mit der ich das ganze über mein Programm automatisieren kann etc.
Nur leider funktionieren die API-Aufrufe nicht wirklich

Es gibt die Datei "MathPage.wll", die praktisch eine normale DLL mit Word-spezifischen Dinge ist. Ich habe die Funktion MTXFormEqn() aus dieser DLL in meinem Programm aufgerufen. Jedoch bekomme ich, anstelle des MathML-Codes, immer einen leeren String als Ergebnis.

Hier mal ein wenig Code:

Delphi-Quellcode:
//Deklaration der externen Funktion
function MTXFormEqn(src: Integer; srcFmt: Integer; srcData: PChar;
           srcDataLen: Cardinal; dst: Integer; dstFmt: Integer;
           out dstData: PChar; dstDataLen: Cardinal; dstPath: PChar;
           out dims: MTAPI_DIMS): Cardinal; external 'MathPage.wll';

//Aufruf in meinem Programm
var AWordEQ: string;
    pEqnOut: PChar;
    rDims: MTAPI_DIMS;
begin
  pEqnOut := '';
  AWordEQ := ' EQ \F(2;3) '; //entspricht dem Bruch 2/3

  MTXFormEqn(mtxfmLOCAL, mtxfmTEXT, PChar(AWordEQ), Length(AWordEQ), mtxfmLOCAL,
             mtxfmTEXT, pEqnOut, 1, nil, rDims);
  //in pEqnOut sollte jetzt der MathML-Code stehen.....
end;
Die Deklaration und den Aufruf habe ich nach bestem Wissen und Gewissen dem SDK nachempfunden (welches leider nur VBA behandelt).
Hier mal ein Auszug:

Zitat:
MTXFormEqn

Code:
Public Function MTXFormEqn (
    src As Integer,
    srcFmt As Integer,
    srcData As String,
    srcDataLen As Long,
    dst As Integer,
    dstFmt As Integer,
    dstData As String,
    dstDataLen As Long,
    dstPath As String,
    dims As MTAPI_DIMS
) As Long
Transforms an equation (uses options specified via MTXFormAddVarSub, MTXFormSetTranslator, and MTXFormSetPrefs)

Note: Variations involving mtxfm_PICT or dstFmt=mtxfm_HMTEF are not callable from VBA.
Parameterssrc [in] Equation data source, either:
mtxfmPREVIOUS => data from previous result
mtxfmCLIPBOARD => data on clipboard
mtxfmLOCAL => data passed (i.e. in srcData)

Note: srcFmt, srcData, and srcDataLen are used only if src is mtfxmLOCAL
srcFmt [in] Equation source data format (mtxfmXXX, see next)
srcData [in] Depends on data source (src)
mtxfmMTEF => MTEF-binary
mtxfmPICT => PICT
mtxfmTEXT => either MTEF-text or plain text
srcDataLen [in] # of bytes in srcData
dst [in] Equation data destination, either
mtxfmCLIPBOARD => transformed data placed on clipboard
mtxfmFILE => transformed data in the file specified by dstPath
mtxfmLOCAL => transformed data in dstData

Note: dstFmt, dstData, and dstDataLen are used only if dst is mtfxmLOCAL (data placed on the clipboard is either an OLE object or translator text)
dstFmt [in] Equation data format (mtxfmXXX, see next)
dstData

[out] Depends on data destination (dstFmt)
mtxfmMTEF => MTEF-binary
mtxfmHMTEF => handle to MTEF-binary
mtxfmPICT => PICT data
mtxfmTEXT => translated text or, if no translator, MTEF-text
mtxfmHTEXT => handle to translated text or, if no translator, MTEF-text

Note: If translator specified dstFmt must be either mtxfmTEXT or mtxfmHTEXT for the translation to be performed
dstDataLen [in] # of bytes in dstData (used for mtxfmLOCAL only)
dstPath [in] destination pathname (used if dst == mtxfmFILE only, may be NULL if not used)
dims [out] pict dimensions, may be NULL (valid only for dst = mtxfmPICT). See MTAPI_DIMS definition above in Types section.
Habt ihr vielleicht schon einmal mit der MathType-API gearbeitet und könnt mir weiterhelfen? Oder habt ihr vielleicht nützliche Links, die einem da helfen können (ich hab mich schon dämlich gesucht )

danke, wie immer, im voraus,
aeno
Steffen Rieke
Was nicht buzzt, wird buzzend gemacht!
http://blog.base-records.de
http://www.base-records.de
  Mit Zitat antworten Zitat