import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import ooo.connector.BootstrapSocketConnector;
import com.sun.star.awt.Size;
import com.sun.star.beans.PropertyValue;
import com.sun.star.beans.XPropertySet;
import com.sun.star.container.XNameAccess;
import com.sun.star.document.XDocumentInsertable;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.frame.XStorable;
import com.sun.star.graphic.XGraphicProvider;
import com.sun.star.lang.XComponent;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.text.XSentenceCursor;
import com.sun.star.text.XText;
import com.sun.star.text.XTextCursor;
import com.sun.star.text.XTextDocument;
import com.sun.star.text.XTextGraphicObjectsSupplier;
import com.sun.star.uno.Exception;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
public class Export{
private XComponentContext mxRemoteContext;
private XMultiComponentFactory mxRemoteServiceManager;
private XTextCursor mxDocCursor;
private XText mxDocText;
private XTextDocument mxDoc;
private XSentenceCursor xSentenceCursor;
private XPropertySet propertySet;
private Object desktop;
private XComponent xEmptyWriterComponent;
/**
* get the remote service manager
*
* @return
* @throws java.lang.Exception
*/
private XMultiComponentFactory getRemoteServiceManager()
throws java.lang.Exception {
if (mxRemoteContext == null && mxRemoteServiceManager == null) {
// get the remote office context
String oooExeFolder = "D:/Program Files/OpenOffice.org 3/program";
mxRemoteContext = BootstrapSocketConnector.bootstrap(oooExeFolder);
System.out.println("Connected to a running office ...");
mxRemoteServiceManager = mxRemoteContext.getServiceManager();
}
return mxRemoteServiceManager;
}
/**
* get the interfaces to control the UNO
*
* @param docType
* @return
* @throws java.lang.Exception
*/
private XComponent newDocComponent(String docType)
throws java.lang.Exception {
String loadUrl = "private:factory/" + docType;
mxRemoteServiceManager = this.getRemoteServiceManager();
// get the Desktop service
desktop = mxRemoteServiceManager.createInstanceWithContext(
"com.sun.star.frame.Desktop", mxRemoteContext);
// retrieve the current component and access the controller
XComponentLoader xComponentLoader = (XComponentLoader) UnoRuntime
.queryInterface(XComponentLoader.class, desktop);
PropertyValue[] propertyValue = new PropertyValue[1];
propertyValue[0] = new com.sun.star.beans.PropertyValue();
propertyValue[0].Name = "Hidden";// set the OpenOffice not open
propertyValue[0].Value = Boolean.TRUE;
return xComponentLoader.loadComponentFromURL(loadUrl, "_blank", 0,
propertyValue);
}
/**
* editing the export paper
* @throws java.lang.Exception
*/
public void editing() throws java.lang.Exception{
xEmptyWriterComponent = newDocComponent("swriter");
mxDoc = (XTextDocument) UnoRuntime.queryInterface(XTextDocument.class,
xEmptyWriterComponent);
mxDocText = mxDoc.getText();
// the controller gives us the TextViewCursor
mxDocCursor = mxDocText.createTextCursor();
xSentenceCursor = (XSentenceCursor) UnoRuntime.queryInterface(
XSentenceCursor.class, mxDocCursor);
// query its XPropertySet interface, we want to set character and
// paragraph
// properties
propertySet = (XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class, mxDocCursor);
insertHtml();
embedImagesInWriter(xEmptyWriterComponent);
String url = "file:///c:/test.doc";
storeDocComponent(xEmptyWriterComponent, url);
close();
}
private void insertHtml() throws Exception, IOException {
String html = "<img src=\"http://img03.taobaocdn.com/tps/i3/T1eG6FXf4kXXcd9aAM-440-135.png\"/><img src=\"http://img03.taobaocdn.com/tps/i3/T1eG6FXf4kXXcd9aAM-440-135.png\"/><img src=\"http://img03.taobaocdn.com/tps/i3/T1eG6FXf4kXXcd9aAM-440-135.png\"/>";
File textFile = createHtmlTempFile(html);
//now insert that file as HTML into the location
XDocumentInsertable docInsertable = (XDocumentInsertable)
UnoRuntime.queryInterface(XDocumentInsertable.class,
mxDocCursor);
docInsertable.insertDocumentFromURL("file:///c:/temp.html", new PropertyValue[0] );
}
private File createHtmlTempFile(String content) throws Exception, IOException {
//temp files into working directory
File temp = new File("c:/temp.html");
//open file and write HTML content
FileOutputStream fs = new FileOutputStream(temp);
PrintStream ps = new PrintStream(fs);
ps.print( content );
ps.flush();
ps.close();
fs.close();
return temp;
}
private void storeDocComponent(XComponent xDoc, String storeUrl)
throws java.lang.Exception {
XStorable xStorable = (XStorable) UnoRuntime.queryInterface(
XStorable.class, xDoc);
PropertyValue[] storeProps = new PropertyValue[2];
storeProps[0] = new PropertyValue();
storeProps[0].Name = "Overwrite";
storeProps[0].Value = Boolean.TRUE;
storeProps[1] = new PropertyValue();
storeProps[1].Name = "FilterName";
storeProps[1].Value = "MS Word 97";
System.out.println(storeUrl);
xStorable.storeAsURL(storeUrl, storeProps);
}
private void close() throws Exception {
com.sun.star.util.XCloseable xCloseable = (com.sun.star.util.XCloseable) UnoRuntime
.queryInterface(com.sun.star.util.XCloseable.class, mxDoc);
if (xCloseable != null) {
xCloseable.close(false);
} else {
com.sun.star.lang.XComponent xComponent = (com.sun.star.lang.XComponent) UnoRuntime
.queryInterface(com.sun.star.lang.XComponent.class, mxDoc);
xComponent.dispose();
}
}
private final void embedImagesInWriter(XComponent oDoc) throws Exception
{
XTextGraphicObjectsSupplier XTxtGraphObjSupplier = (XTextGraphicObjectsSupplier) UnoRuntime.queryInterface(XTextGraphicObjectsSupplier.class, oDoc);
XNameAccess XNameAcc;
XMultiServiceFactory xMSFDoc = (XMultiServiceFactory) UnoRuntime.queryInterface(XMultiServiceFactory.class, oDoc);
Object oGraphic=null;
// XComponentContext xComponentContext = openOfficeConnection.getComponentContext();
XMultiComponentFactory xMCF = mxRemoteContext.getServiceManager();
Object graphicProviderObject = null;
graphicProviderObject = xMCF.createInstanceWithContext("com.sun.star.graphic.GraphicProvider", mxRemoteContext);
XGraphicProvider XGraphProv = (XGraphicProvider) UnoRuntime.queryInterface(XGraphicProvider.class, graphicProviderObject);
oGraphic = xMSFDoc.createInstance("com.sun.star.text.TextGraphicObject");
String[] allImages = null;
int x = 0;
PropertyValue[] aMediaProperties = new PropertyValue[1];
XNameAcc = XTxtGraphObjSupplier.getGraphicObjects();
allImages = XNameAcc.getElementNames();
for (x = 0; x < allImages.length; x++)
{
oGraphic = XNameAcc.getByName(allImages[x]);
XPropertySet xPropSet = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, oGraphic);
aMediaProperties = MakePropertyValue("URL", xPropSet.getPropertyValue("GraphicURL").toString());
xPropSet.getPropertyValue("IsPixelContour");
System.out.println(xPropSet.getPropertyValue("GraphicURL").toString());
System.out.println(((Size)xPropSet.getPropertyValue("ActualSize")).Height);
xPropSet.setPropertyValue("Graphic", XGraphProv.queryGraphic(aMediaProperties));
}
}
private final PropertyValue[] MakePropertyValue(String cName, Object uValue)
{
PropertyValue[] tempMakePropertyValue = new PropertyValue[1];
tempMakePropertyValue[0] = new PropertyValue();
tempMakePropertyValue[0].Name = cName;
tempMakePropertyValue[0].Value= uValue;
return tempMakePropertyValue;
}
public static void main(String[] args) {
Export export = new Export();
try {
export.editing();
} catch (java.lang.Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
分享到:
相关推荐
- **插入图片**: 将图像插入到文档中。 - **编辑图片**: 调整图片大小、位置和格式。 **7.2 绘图** - **绘制图形**: 使用绘图工具创建自定义图形。 - **编辑图形**: 调整图形的颜色、线条样式等。 **7.3 图表** ...
- **网页发布**:OpenOffice和Microsoft Office都支持将文档导出为HTML格式以便在网络上发布,但在导出选项和生成的HTML代码质量方面可能会有不同表现。 #### 文档属性与搜索功能 - **文档属性**:OpenOffice和...
可以从本地文件插入图片,或者在线搜索并插入。此外,还能添加形状、箭头、文本框等图形元素。 10. **页眉与页脚** 通过“插入”>“页眉和页脚”添加文档的头部和尾部信息,如页码、日期等。 11. **引用与索引**...
- **导出文档**:除了保存文档外,还可以将其导出为PDF、HTML等多种格式,便于在不同设备上查看。 - **打印文档**:提供详尽的打印选项,确保文档的高质量打印输出。 总之,**OpenOffice Writer**不仅是一款高效的...
对于图片处理,PowerPaste还可能支持自动上传粘贴的图片到服务器,并生成合适的HTML代码插入到编辑器中。这样,用户无需手动保存图片,再通过上传工具上传,极大地简化了工作流程。 总的来说,TinyMCE结合...
在打开文档的方法中,PageOfficeController提供了打开本地文件或URL的功能,使得用户可以在浏览器中直接编辑。 ```java @RestController @RequestMapping("/pageoffice") public class PageOfficeController { @...
7. **插入图片**:在插入图片对话框中选择所需的图片,并将其插入到幻灯片中。 #### 四、扩展知识点:OpenOffice.org 的其他组件 除了 **Impress** 外,**OpenOffice.org** 套装还包括其他几个重要的应用程序: -...
比如,使用Freemarker生成Word文档时,需要特别注意图片在循环嵌套使用时的集合处理。另外,虽然doc格式的文档在2003-2007版本中使用较为广泛,但docx格式由于其更好的兼容性,逐渐成为了主流。最后,可以使用开源...
2. **图片插入与编辑**:RTF格式支持嵌入图片,RTF编辑器允许用户插入、调整和格式化图片,以适应文档的视觉需求。 3. **表格与列表**:RTF编辑器通常具备创建和编辑表格的功能,用户可以创建多行多列的表格,并对...
- 在Java代码中,创建`Document`对象,加载模板,设置字体、字号等样式,然后将数据模型与模板合并,生成Word文档。 3. **导出HTML** - HTML导出是Freemarker最自然的应用场景,因为它的语法和HTML非常接近。你...
在Word文档处理中,直接粘贴富文本和上传图片是一项常用功能,特别是在处理大量文本和图像数据时。然而,原生的Microsoft Word可能并不支持...通过学习和掌握这些技巧,你可以更高效地处理Word文档中的富文本和图片。
9. **文档最佳实践**:在创建和管理doc文档时,应遵循良好的文件命名规则,避免使用特殊字符,定期保存并备份,以防止数据丢失。同时,保持文档结构清晰,合理使用标题、段落和列表,使内容易于阅读和理解。 综上所...
这些方法只是操作Word文档的基础,实际上,Jacob还支持许多其他功能,例如添加文本、设置格式、插入图片、保存文档为不同格式等。例如,可以使用`Dispatch.call()`方法调用Word的API,如`TypeText`来插入文本,`Font...
首先,我们需要理解文件预览的基本原理:用户通过浏览器发送请求到服务器,服务器处理请求并返回文件内容,然后在浏览器中以适合的方式展示这些内容。为了实现这一过程,我们需要考虑以下几个关键步骤: 1. **文件...
2. **编辑界面**:前端展示一个模拟的Office界面,利用HTML5的Canvas或SVG元素实现富文本编辑功能,用户可以直接在浏览器中进行文字输入、格式调整、图片插入等操作。 3. **实时同步**:使用WebSocket等实时通信...
- **宏与脚本**:在Word等编辑软件中可以通过编写宏或脚本来实现文档处理的自动化,例如自动填充数据、格式调整等操作。 #### 4. 文档安全性 - **加密保护**:可以对`.docx`文件进行密码加密,防止未经授权的访问。...
这个脚本可能涉及的是PPT操作,特别是在已有的PPT文件中自动插入图片的功能。Python有多种库可以操作PPT文件,如python-pptx,它可以创建、修改和展示PowerPoint文件。使用这个库,脚本可以读取PPT模板,然后根据...
4. **保存**:保存文档到指定位置,支持不同的文件格式。 5. **打印**:无须用户交互,直接通过编程控制Word文档的打印任务。 6. **转换**:将Word文档转换为其他格式,如PDF或HTML。 在实际应用中,Jacob常用于...
- **图片和图表插入**: 在参考文献中插入图片或图表,增强文档的表达能力。 - **图表档案**: 支持插入各种图表文件,便于撰写科研报告。 #### 七、搜寻在线资料库 - **操作窗口**: 切换到不同的操作窗口,选择需要...
在IT行业中,生成文档是常见的需求,特别是在报告、合同、报表等领域。本文主要讨论如何使用Java动态生成Word和PDF文件,以及各种方案的优缺点。 首先,针对Java生成Word文档,有以下几种常见方法: 1. **Jacob**...