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

另外,请注意,当我打开带有插入图像的创建文档时,如果我选择其中一张图片,我无法将其居中;而使用插入菜单,我可以选择图片并将其居中。

有没有办法让我插入的任何图片居中Word

4

2 回答 2

1

当您将图像插入 Word 时,它可以浮动在文本上方或位于段落中。(文字换行)

您应该检查图像是否插入到段落中或漂浮在上方。

*Select Image -> Formatting -> Wrap Text*

在我看来,您为段落对齐设置了样式,但图像浮动在文本上方。

于 2014-12-11T13:02:07.497 回答
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我现在不是查询对象,而是查询对象InlineShapes。这很重要,因为现在我可以使用选择对象(现在指向插入图片的位置)并通过ParagraphFormat子对象指定它的对齐方式。

之后,我用图片更新选择以在图片Range之后开始输入并将对齐设置回对齐。

于 2014-12-19T09:41:34.160 回答