0

Qt's Active Qtモジュールを介してWord文書を生成しています。

ドキュメントに書き込み、その書き込みの "スタイル" (太字、イタリック、両端揃えなど) を指定し、ドキュメントのさまざまな部分をクエリすることができます。

現在、画像を表示してページの中央に配置しようとしています。

画像を挿入する場合:

QAxObject word( "Word.Application" );

QAxObject* activeDocument = word.querySubObject("ActiveDocument");
QAxObject* activeWindow = activeDocument->querySubObject( "ActiveWindow" );
QAxObject* selection = activeWindow->querySubObject( "Selection" );

selection->dynamicCall( "Collapse(int)", 0 );
const int pos = selection->dynamicCall( "End" ).toInt();

QAxObject* shapes = activeDocument->querySubObject( "Shapes" );
QAxObject* shape = shapes->dynamicCall( "AddPicture(QString,bool,bool,float,float,float,float)",
                     picPath,
                     true, true );

これにより、ページの左側に画像が挿入されます。ではWord、画像を挿入して選択し、その配置 (私の場合は中央揃え) を指定できますが、コードでこれを行うことはできません。

写真のアンカーを中央に設定しようとしましたが、ページの左側に表示されます。

shape->querySubObject( "Anchor" )->querySubObject( "ParagraphFormat" )->setProperty( "Alignment", 1);    // 1 == wdAlignParagraphCenter

と:

shape->querySubObject( "Anchor" )->dynamicCall("InsertAlignmentTab(int)",1); // 1 == center

また、画像が挿入された作成済みのドキュメントを開くときに、画像の 1 つを選択すると、中央に配置できないことに注意してください。一方、 [挿入] メニューを使用すると、画像を選択して中央に配置できます。

挿入した画像を中央に配置する方法はありWordますか?

4

2 に答える 2

0

問題の画像を中央に配置する方法を見つけました。

QAxObject* shapes = selection->querySubObject( "InlineShapes" );
QAxObject* inlineShape = shapes->querySubObject(
            "AddPicture(const QString&,bool,bool,QVariant)",
             picPath, false, true )
;
inlineShape->dynamicCall( "ScaleHeight", height );
inlineShape->dynamicCall( "ScaleWidth", width );

selection->querySubObject( "ParagraphFormat" )->setProperty( "Alignment", 1 );

QAxObject* range = shape->querySubObject( "Range" );

const int start = range->property( "Start" ).toInt();
const int end = range->property( "End" ).toInt();
selection->dynamicCall( "SetRange(int,int)", start, end );
selection->dynamicCall( "Collapse(int)", 0 );

selection->querySubObject( "ParagraphFormat" )->setProperty( "Alignment", 3 );

オブジェクトをクエリする代わりに、ShapesオブジェクトをクエリしますInlineShapesParagraphFormat選択オブジェクト (挿入された画像の位置を指している) を使用して、サブオブジェクトを介して配置を指定できるようになったため、これは重要です。

その後、選択範囲を画像で更新して、画像のRange後に入力を開始し、配置を両端揃えに戻します。

于 2014-12-19T09:41:34.160 に答える