`
lfy1987
  • 浏览: 1209 次
文章分类
社区版块
存档分类
最新评论

Openoffice 插入html图片 并保存在文档中

阅读更多


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();
    }
    }

}

分享到:
评论

相关推荐

    OpenOffice.org2.0教程

    - **插入图片**: 将图像插入到文档中。 - **编辑图片**: 调整图片大小、位置和格式。 **7.2 绘图** - **绘制图形**: 使用绘图工具创建自定义图形。 - **编辑图形**: 调整图形的颜色、线条样式等。 **7.3 图表** ...

    openoffice操作与office的差别.pdf

    - **网页发布**:OpenOffice和Microsoft Office都支持将文档导出为HTML格式以便在网络上发布,但在导出选项和生成的HTML代码质量方面可能会有不同表现。 #### 文档属性与搜索功能 - **文档属性**:OpenOffice和...

    OpenOffice Write 教程

    可以从本地文件插入图片,或者在线搜索并插入。此外,还能添加形状、箭头、文本框等图形元素。 10. **页眉与页脚** 通过“插入”&gt;“页眉和页脚”添加文档的头部和尾部信息,如页码、日期等。 11. **引用与索引**...

    使用OpenOffice_Writer写书

    - **导出文档**:除了保存文档外,还可以将其导出为PDF、HTML等多种格式,便于在不同设备上查看。 - **打印文档**:提供详尽的打印选项,确保文档的高质量打印输出。 总之,**OpenOffice Writer**不仅是一款高效的...

    TinyMCE + 插件powerpaste实现word直接粘贴富文本,同时上传图片.zip

    对于图片处理,PowerPaste还可能支持自动上传粘贴的图片到服务器,并生成合适的HTML代码插入到编辑器中。这样,用户无需手动保存图片,再通过上传工具上传,极大地简化了工作流程。 总的来说,TinyMCE结合...

    SpringBoot实现的在线实时编辑文档SpringBoot(30) 整合PageOffice实现在线编辑Word和Excel

    在打开文档的方法中,PageOfficeController提供了打开本地文件或URL的功能,使得用户可以在浏览器中直接编辑。 ```java @RestController @RequestMapping("/pageoffice") public class PageOfficeController { @...

    Ubuntu桌面版使用手册-部分3

    7. **插入图片**:在插入图片对话框中选择所需的图片,并将其插入到幻灯片中。 #### 四、扩展知识点:OpenOffice.org 的其他组件 除了 **Impress** 外,**OpenOffice.org** 套装还包括其他几个重要的应用程序: -...

    freemarker生成doc方案.pdf(内附代码下载地址)

    比如,使用Freemarker生成Word文档时,需要特别注意图片在循环嵌套使用时的集合处理。另外,虽然doc格式的文档在2003-2007版本中使用较为广泛,但docx格式由于其更好的兼容性,逐渐成为了主流。最后,可以使用开源...

    RTF编辑器,用来写RTF格式的文档

    2. **图片插入与编辑**:RTF格式支持嵌入图片,RTF编辑器允许用户插入、调整和格式化图片,以适应文档的视觉需求。 3. **表格与列表**:RTF编辑器通常具备创建和编辑表格的功能,用户可以创建多行多列的表格,并对...

    freemarker导出Excel、Word、HTMLdemo

    - 在Java代码中,创建`Document`对象,加载模板,设置字体、字号等样式,然后将数据模型与模板合并,生成Word文档。 3. **导出HTML** - HTML导出是Freemarker最自然的应用场景,因为它的语法和HTML非常接近。你...

    实现word直接粘贴富文本,同时上传图片.zip

    在Word文档处理中,直接粘贴富文本和上传图片是一项常用功能,特别是在处理大量文本和图像数据时。然而,原生的Microsoft Word可能并不支持...通过学习和掌握这些技巧,你可以更高效地处理Word文档中的富文本和图片。

    有用的doc文档,真的很有用

    9. **文档最佳实践**:在创建和管理doc文档时,应遵循良好的文件命名规则,避免使用特殊字符,定期保存并备份,以防止数据丢失。同时,保持文档结构清晰,合理使用标题、段落和列表,使内容易于阅读和理解。 综上所...

    一次jacob操作word的总结

    这些方法只是操作Word文档的基础,实际上,Jacob还支持许多其他功能,例如添加文本、设置格式、插入图片、保存文档为不同格式等。例如,可以使用`Dispatch.call()`方法调用Word的API,如`TypeText`来插入文本,`Font...

    利用java后端实现文件在线预览

    首先,我们需要理解文件预览的基本原理:用户通过浏览器发送请求到服务器,服务器处理请求并返回文件内容,然后在浏览器中以适合的方式展示这些内容。为了实现这一过程,我们需要考虑以下几个关键步骤: 1. **文件...

    OnlineOfficeEdit

    2. **编辑界面**:前端展示一个模拟的Office界面,利用HTML5的Canvas或SVG元素实现富文本编辑功能,用户可以直接在浏览器中进行文字输入、格式调整、图片插入等操作。 3. **实时同步**:使用WebSocket等实时通信...

    酒店服务员代表发言稿.docx

    - **宏与脚本**:在Word等编辑软件中可以通过编写宏或脚本来实现文档处理的自动化,例如自动填充数据、格式调整等操作。 #### 4. 文档安全性 - **加密保护**:可以对`.docx`文件进行密码加密,防止未经授权的访问。...

    爬取百度PPT源码.zip

    这个脚本可能涉及的是PPT操作,特别是在已有的PPT文件中自动插入图片的功能。Python有多种库可以操作PPT文件,如python-pptx,它可以创建、修改和展示PowerPoint文件。使用这个库,脚本可以读取PPT模板,然后根据...

    jacob-1.20-x86-x64

    4. **保存**:保存文档到指定位置,支持不同的文件格式。 5. **打印**:无须用户交互,直接通过编程控制Word文档的打印任务。 6. **转换**:将Word文档转换为其他格式,如PDF或HTML。 在实际应用中,Jacob常用于...

    endnote 教程

    - **图片和图表插入**: 在参考文献中插入图片或图表,增强文档的表达能力。 - **图表档案**: 支持插入各种图表文件,便于撰写科研报告。 #### 七、搜寻在线资料库 - **操作窗口**: 切换到不同的操作窗口,选择需要...

    JAVA动态生成word和pdf.pdf

    在IT行业中,生成文档是常见的需求,特别是在报告、合同、报表等领域。本文主要讨论如何使用Java动态生成Word和PDF文件,以及各种方案的优缺点。 首先,针对Java生成Word文档,有以下几种常见方法: 1. **Jacob**...

Global site tag (gtag.js) - Google Analytics