Центрируйте изображение после добавления его в Word с помощью Active Qt

Я генерирую документ Word через Qt's Active Qt модуль.

Я могу написать документ, указать «стиль» для этого текста (жирный, курсив, выравнивание и т. Д.) И запросить различные его части.

Прямо сейчас я пытаюсь отобразить картинку и расположить ее прямо в центре страницы.

Для вставки картинки:

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

Также обратите внимание, что когда я открываю созданный документ со вставленными изображениями, если я выбираю одно из изображений, Я не могу это отцентрировать; тогда как используя Вставить В меню я могу выбрать картинку и отцентрировать ее.

Есть ли способ центрировать любую картинку, в которую я вставляю Word?

0

Решение

Когда вы вставляете изображение в Word, оно может всплывать над текстом или находиться в абзаце. (Обтекание текстом)

Вы должны проверить, было ли изображение вставлено в абзац или выше.

*Select Image -> Formatting -> Wrap Text*

Мне кажется, что вы установили стиль для выравнивания абзаца, но изображение плавает над текстом.

1

Другие решения

Я нашел способ центрировать изображение в вопросе.

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 объект, я теперь запрашиваю InlineShapes один. Это важно, так как теперь я могу использовать объект выделения (который теперь указывает на положение вставленного изображения) и указать его выравнивание через ParagraphFormat субобъект.

После этого я обновляю выделение картинкой Range чтобы начать печатать после рис. и установить выравнивание обратно на выравнивание.

0