c++用liberoffice的api操作docx文件

目录

一.打开或创建文档

二.向文档末尾拆入文本

三.向文档末尾插入表格

 四.向文档末尾插入图片

五.导出为docx文档


一.打开或创建文档

//获取UNO组件上下文
Reference< XComponentContext > xContext(::cppu::bootstrap());

// 获取服务工厂
Reference< XMultiComponentFactory > xMcf(xContext->getServiceManager());
Reference < XMultiServiceFactory> xMsf(xMcf, UNO_QUERY_THROW);
Reference<XInterface> desktop = xMcf->createInstanceWithContext(
        OUString::createFromAscii("com.sun.star.frame.Desktop"),
        xContext);

Reference<XDesktop> xDesktop(desktop, UNO_QUERY_THROW);

// 打开 Word 
OUString sTemplateFileUrl("file://127.0.0.1/E:/Desktop/qwer.docx");
Reference<XComponentLoader> xCompLoader(xDesktop, UNO_QUERY);
Reference<XComponent> xComponent = xCompLoader->loadComponentFromURL(
        sTemplateFileUrl, "_blank", 0, Sequence<PropertyValue>());
//创建文档
/*
Reference<XComponent> Component = xCompLoader->loadComponentFromURL(
        "private:factory/swriter", "_blank", 0, Sequence<PropertyValue>());
*/
​

二.向文档末尾拆入文本

Reference<XTextDocument> xTextDocument(xComponent , UNO_QUERY);
Reference <XText> xText = xTextDocument->getText();
Reference<XTextCursor> xCursor=xText->createTextCursorByRange(xText ->getEnd());
xCursor->getEnd()->setString(text);

三.向文档末尾插入表格

Reference<XMultiServiceFactory> xDocFactory(xComponent, UNO_QUERY_THROW);
//创建表格
Reference< XTextTable > newTable(xDocFactory->createInstance("com.sun.star.text.TextTable")
, UNO_QUERY);
//设置表格的行数rowCount和列数colCount,自己根据情况设置
newTable->initialize(rowCount, colCount);
//获得文本
Reference<XTextDocument> xTextDocument(xComponent , UNO_QUERY);
Reference <XText> xText = xTextDocument->getText();
Reference <XTextContent> newTableContent(newTable, UNO_QUERY)
//将表格插入文本末尾;
xText->insertTextContent(xText->getEnd(), newTableContent, false);
//依次设置单元格内容
Reference< XCellRange > xCellRange(newTable, UNO_QUERY);
for (sal_Int32 row = 0; row < rowCount; ++row) {
    for (sal_Int32 col = 0; col < colCount; ++col) {
        Reference< XCell > xCell = xCellRange->getCellByPosition(col, row);
        Reference< XText > xCellText(xCell , UNO_QUERY);
        //通过获得的xCellText去设置内容
    }
}

 四.向文档末尾插入图片

Reference<XMultiServiceFactory> xDocFactory(xComponent, UNO_QUERY_THROW);
//创建图片
Reference<XShape> xShape(docMSF->createInstance("com.sun.star.text.TextGraphicObject")
, UNO_QUERY);
//设置图片路径
OUString path("file:///path/to/your/image.jpg");
Reference<XGraphicProvider> xGraphicProvider(xComponentContext->getServiceManager()->createInstanceWithContext("com.sun.star.graphic.GraphicProvider", xComponentContext), UNO_QUERY);
Sequence<PropertyValue> aMediaProps(1);
aMediaProps[0].Name = "URL";
aMediaProps[0].Value <<= path
Reference<XGraphic> xGraphic = xGraphicProvider->queryGraphic(aMediaProps);
//设置图片的大小
Size aNewSize;
aNewSize.Width = 1000;
aNewSize.Height= 1000
xShape->setSize(aNewSize);
Reference<XTextContent> xTextContent(xShape, UNO_QUERY);

Reference<XTextDocument> xTextDocument(xComponent , UNO_QUERY);
Reference <XText> xText = xTextDocument->getText();
Text->insertTextContent(xText->getEnd(), xTextContent, true);

五.导出为docx文档

Sequence<PropertyValue> aSaveOptions(1);
aSaveOptions[0].Name = "FilterName";
aSaveOptions[0].Value <<= OUString("MS Word 2007 XML");

// 指定保存路径和文件名
OUString sOutputFileUrl = "file:///path/to/your/xxx.docx";

// 保存文档
Reference<XStorable> xStorable(xComponent, UNO_QUERY_THROW);
xStorable->storeToURL(sOutputFileUrl, aSaveOptions);
xComponent->dispose();

六.导出为pdf

Sequence<PropertyValue> aSaveOptions(1);
aSaveOptions[0].Name = "FilterName";
aSaveOptions[0].Value <<= OUString("writer_pdf_Export");

// 指定保存路径和文件名
OUString sOutputFileUrl = "file:///path/to/your/xxx.pdf";

// 保存文档
Reference<XStorable> xStorable(xComponent , UNO_QUERY_THROW);
xStorable->storeToURL(sOutputFileUrl, aSaveOptions);
xComponent->dispose();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远辰与鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值