目录
一.打开或创建文档
//获取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();