2009-06-09 13 views
4

私はMS Word文書にXML & MathMLからコンバータを書いています。私はMFCとWordのオートメーションを使用していますので、このような書き込みテキストには問題はありません
MS WordでMathMLをMathTypeに変換する

_Application app; 
COleVariant vtOpt(DISP_E_PARAMNOTFOUND, VT_ERROR), 
      vtTrue((short)TRUE), 
      vtFalse((short)FALSE); 
app.CreateDispatch("Word.Application",NULL); 
Documents docs = app.GetDocuments(); 
_Document doc = docs.Add (vtOpt, vtOpt, vtOpt, vtOpt); 
Range range = doc.Range (vtOpt, vtOpt); 
range.InsertAfter (_T("Hello Word!")); 

は、今の問題は、埋め込まれたMathTypeのオブジェクトにはMathML式を変換しています。私が見つけた可能な方法の1つは、TeXに方程式を書き、MathType OLEオブジェクトでTeXを置き換えるMTCommand_TeXToggle(WordのMathType 6.5ライブラリにあります)マクロをプログラムで呼び出すことです。しかし、それから、MathMLを何とかTeXに変換しなければなりません。そう簡単ではありません。

私はMathTypeのOLEオブジェクトは、生のMathMLのデータを受け入れる必要があることを、知っているが、私はプログラムでOLEオブジェクトを作成し、アクセスしようとしているとき:

InlineShapes shapes = doc.GetInlineShapes(); 
InlineShape control = shapes.AddOLEObject (COleVariant("Equation.DSMT4"), vtOpt, vtFalse, vtFalse, vtOpt, vtOpt, vtOpt, vtOpt); 
OLEFormat fm = control.GetOLEFormat(); 
COleDispatchDriver drv = fm.GetObject(); 

私はそれを養うために合理的なインターフェースで終わりますMathMLデータ。 質問: 1)OLEオブジェクトを制御してMathMLデータを送信する方法はありますか? または 2)MathMLからMathType OLEオブジェクトへの選択を変換するMS Word VBマクロを取得する方法はありますか?事前に

おかげで、 ニック止血

答えて

2

ひびが入った!

COleClientItemオブジェクトを使用して、コード内でMathType OLEコントロールのインスタンスを取得できます。これは、MathType SDK MFCサンプルに示されています。次に、COleDataSourceを操作し、コントロールにMathMLデータを渡してCOleClientItem::CopyToClipboard();を呼び出します。OLEオブジェクトとしてコントロール自体を表すデータが、WordオートメーションクラスからRange::Paste(opt1, opt2);呼び出しで使用できるようになりました。少し奇妙に見えますが、私のために働いた:)そして、サンプルにもう1行、つまりCopyToClipboardメソッドを追加するだけです。

+0

'vba'マクロを投稿してください。私はVBAで新しく、 'MathML2MathType' OLE形式を変換したいと思います。 – Balaji

0

は、私が提供できる唯一のアドバイスは、私は常にデザイン科学のサポートは非​​常に良いことが判明したことです。あなたのOLEインターフェースがMathMLをサポートしているかどうかを尋ねたいかもしれません。

私はまだWord 2007の方程式エディタを調査していません。おそらく、異なる自動化インターフェースを持っていれば、他のフォーマットをより簡単にインポートすることができます。

3

ニック、私たちのMathType SDKを試してみてください。 「そのまま」提供されていますが、無料です:http://www.dessci.com/en/reference/sdk/

Roel、種類の言葉をありがとう。私はこれをサポートチームに渡します。

ボブ・マシューズ デザイン科学

更新:ここでMathTypeのSDKをしようとする私の推薦についてのいくつかの明確化と、追加情報があります。 MathType 6.5からは、MathTypeオブジェクトのIDataObjectインターフェイスを使用してMathMLを渡すことができます。 MathMLがエンコードする式は、現在のカーソル位置に挿入されます。したがって、一般的には、空のMathType方程式を挿入し、それをアクティブにし、IDataObjectインターフェイスを取得し、MathMLを介して数式を設定し、再度式を閉じます。

MathType SDKには、さらに詳細なドキュメントと、テクニックを示すサンプル「OLECont」アプリケーションが含まれています。ここに投稿した内容に基づいて、コードをうまく動かすことができます。

+0

あなたの答えをありがとう。実際には、私はその時点でSDKを持っていましたが、C#ではなくC++で書いていたので、IDataObjectの実装方法を理解できませんでした。その代わりに、私はあなたのMFCサンプルを使用しました。それは次のようになります:私はclsidからCOleClientItemを取得し、mathmlでフィードしてから、CopyToClipboardを呼び出して、ドキュメントのどこかに貼り付けます。少し奇妙に見えますが、私は知っています。それでも、それは私のために完璧に働いた。そして私は無料のmathml-> TeXコンバータを手に入れました!あなたに素晴らしい製品をありがとう! – stanch

+0

さて、OLEContは私があなたに言ったこととまったく同じことを覚えています。だから私は昨日の2日前にあなたのアドバイスを期待したようです:) – stanch

+0

それはあなたのために働いてうれしい。更新していただきありがとうございます。 - Bob –

関連する問題