123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- //
- //DokeosConverter using JODConverter - Java OpenDocument Converter
- //Eric Marguin <e.marguin@elixir-interactive.com>
- //
- //This library is free software; you can redistribute it and/or
- //modify it under the terms of the GNU Lesser General Public
- //License as published by the Free Software Foundation; either
- //version 2.1 of the License, or (at your option) any later version.
- //
- //This library is distributed in the hope that it will be useful,
- //but WITHOUT ANY WARRANTY; without even the implied warranty of
- //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- //Lesser General Public License for more details.
- //http://www.gnu.org/copyleft/lesser.html
- //
- import java.util.Map;
- import org.apache.commons.io.FilenameUtils;
- import com.artofsolving.jodconverter.DocumentConverter;
- import com.artofsolving.jodconverter.DocumentFormatRegistry;
- import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
- import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException;
- import com.artofsolving.jodconverter.openoffice.converter.StreamOpenOfficeDocumentConverter;
- import com.sun.star.beans.PropertyValue;
- import com.sun.star.frame.XComponentLoader;
- import com.sun.star.frame.XController;
- import com.sun.star.frame.XDesktop;
- import com.sun.star.frame.XModel;
- import com.sun.star.frame.XStorable;
- import com.sun.star.lang.XComponent;
- import com.sun.star.text.XPageCursor;
- import com.sun.star.text.XText;
- import com.sun.star.text.XTextCursor;
- import com.sun.star.text.XTextViewCursor;
- import com.sun.star.text.XTextViewCursorSupplier;
- import com.sun.star.uno.UnoRuntime;
- /**
- * Default file-based {@link DocumentConverter} implementation.
- * <p>
- * This implementation passes document data to and from the OpenOffice.org
- * service as file URLs.
- * <p>
- * File-based conversions are faster than stream-based ones (provided by
- * {@link StreamOpenOfficeDocumentConverter}) but they require the
- * OpenOffice.org service to be running locally and have the correct
- * permissions to the files.
- *
- * @see StreamOpenOfficeDocumentConverter
- */
- public class WoogieDocumentConverter extends AbstractDokeosDocumentConverter {
-
- public WoogieDocumentConverter(OpenOfficeConnection connection, int width, int height) {
- super(connection, width, height);
- }
- public WoogieDocumentConverter(OpenOfficeConnection connection, DocumentFormatRegistry formatRegistry, int width, int height) {
- super(connection, formatRegistry, width, height);
- }
- protected void loadAndExport(String inputUrl, Map/*<String,Object>*/ loadProperties, String outputUrl, Map/*<String,Object>*/ storeProperties) throws Exception {
- XComponentLoader desktop = openOfficeConnection.getDesktop();
- XComponent document = desktop.loadComponentFromURL(inputUrl, "_blank", 0, null);
-
-
- if (document == null) {
- throw new OpenOfficeException("conversion failed: input document is null after loading");
- }
-
- refreshDocument(document);
-
- try {
-
- // filter
- PropertyValue[] loadProps = new PropertyValue[4];
-
- // type of image
- loadProps[0] = new PropertyValue();
- loadProps[0].Name = "MediaType";
- loadProps[0].Value = "image/png";
-
- // Height and width
- PropertyValue[] filterDatas = new PropertyValue[4];
- for(int i = 0; i<4 ; i++){
- filterDatas[i] = new PropertyValue();
- }
-
- filterDatas[0].Name = "PixelWidth";
- filterDatas[0].Value = new Integer(this.width);
- filterDatas[1].Name = "PixelHeight";
- filterDatas[1].Value = new Integer(this.height);
- filterDatas[2].Name = "LogicalWidth";
- filterDatas[2].Value = new Integer(2000);
- filterDatas[3].Name = "LogicalHeight";
- filterDatas[3].Value = new Integer(2000);
- filterDatas[3].Name = "CharacterSet";
- filterDatas[3].Value = "iso-8859-15";
- // query its XDesktop interface, we need the current component
- XDesktop xDesktop = (XDesktop)UnoRuntime.queryInterface(
- XDesktop.class, desktop);
-
- XModel xModel = (XModel)UnoRuntime.queryInterface(XModel.class, document);
- // the model knows its controller
- XController xController = xModel.getCurrentController();
- XTextViewCursorSupplier xViewCursorSupplier = (XTextViewCursorSupplier) UnoRuntime.queryInterface(XTextViewCursorSupplier.class, xController);
-
- // get the cursor
- XTextViewCursor xViewCursor = xViewCursorSupplier.getViewCursor();
-
- XPageCursor xPageCursor = (XPageCursor)UnoRuntime.queryInterface(
- XPageCursor.class, xViewCursor);
-
- XText xDocumentText = xViewCursor.getText();
-
- XTextCursor xModelCursor = xDocumentText.createTextCursorByRange(xViewCursor);
-
-
- do{ // swith to the next page
-
- // select the current page of document with the cursor
- xPageCursor.jumpToEndOfPage();
- xModelCursor.gotoRange(xViewCursor,false);
- xModelCursor.setString("||page_break||");
- } while(xPageCursor.jumpToNextPage());
-
-
- } finally {
- // store the document
- XStorable storable = (XStorable) UnoRuntime.queryInterface(XStorable.class, document);
- storeProperties.put("CharacterSet", "UTF-8");
- storable.storeToURL(outputUrl, toPropertyValues(storeProperties));
- document.dispose();
- }
- }
- }
|