开发者

OpenOffice API: Saving Impress (presentation) document as self-contained file

When I save a with the 'MS PowerPoint 97' filter, image files used in GraphicObjectShape objects are just linked, not contained in the file.

Is there a property of this filter or a document-property to make OOo create a self-contained file (image files embedded instead of linked)?

Edit:

The XLinkageSupport object h开发者_如何学Pythonas a breakLink function. Any clues how to obtain these interfaces?


You can embed images into an OOo document thru the com.sun.star.drawing.BitmapTable object. The following function will take the document (its XMultiServiceFactory interface), a File object pointing to the image file of your choice and an internalName which has to be unique, embeds the image and returns the URL pointing to the embedded instance.

/**
 * Embeds an image into the document and gets back the new URL.
 *
 * @param factory Factory interface of the document.
 * @param file Image file.
 * @param internalName Name of the image used inside the document.
 * @return URL of the embedded image.
 */
public static String embedLocalImage(XMultiServiceFactory factory, File localFile, String internalName) {

    // future return value
    String newURL = null;

    // URL of the file (note that BitmapTable expects URLs starting with
    // "file://" rather than just "file:". Also note that getRawPath() will
    // return an encoded URL (with special character in the form of %xx).
    String imageURL = "file://" + localFile.toURI().getRawPath();

    try {

        // get a BitmapTable object from the document (and get interface)
        Object bitmapTable = factory.createInstance("com.sun.star.drawing.BitmapTable");
        XNameContainer bitmapContainer = (XNameContainer)UnoRuntime.queryInterface(XNameContainer.class, bitmapTable);

        // insert image by URL into the table
        bitmapContainer.insertByName(internalName, imageURL);

        // get interface
        XNameAccess bitmapAccess = (XNameAccess)UnoRuntime.queryInterface(XNameAccess.class, bitmapTable);

        // get the embedded URL back
        newURL = (String)bitmapAccess.getByName(internalName);

    } catch (Exception e) {
        throw new RuntimeException(e);
    }

    // return the new (embedded) url
    return newURL;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜