<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    The filter "writer_pdf_Export" does not works while another filter
    "MS Word 97" does, using the java Uno&nbsp; framework within Tomcat.
    <br>
    e.g. the conversion odt &gt; doc or docx &gt; doc works well
    <br>
    Simply changing&nbsp; the filter name from "MS Word 97" to
    "writer_pdf_Export" and the target file extensions doc to pdf does
    not work!
    <br>
    The conversion to pdf produce a
    com.sun.star.task.ErrorCodeIOException ...&nbsp; as shonw below.<br>
    <br>
    The same code executed has a standalone java application using the
    loader com.sun.star.lib.loader.Loader is working for both filters!
    We have checked all possible write permission and found no possible
    issue since all processes belong to the same user.<br>
    <br>
    Context: MacOS Lion, LibreOffice3.5.4 Java-Tomcat
    <br>
    <br>
    Note that&nbsp; the command line with the writer_pdf_Export filter pdf
    works well!:
    <br>
    /Applications/LibreOffice.app/Contents/MacOS/soffice --headless
    --convert-to pdf:writer_pdf_Export *.docx
    <br>
    <br>
    Libreoffice&nbsp; is launched with the command line:
    <br>
    /Applications/LibreOffice.app/Contents/MacOS/soffice --norestore
    --nofirststartwizard --nologo --headless
    --accept=socket,host=localhost,port=7396;urp
    <br>
    <br>
    The code follows after the exception.<br>
    <br>
    The exception:
    <br>
    com.sun.star.task.ErrorCodeIOException:
    <br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:177)<br>
    &nbsp;&nbsp;&nbsp; at
    com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:143)
    <br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:338)<br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:307)<br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:91)<br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:640)<br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:150)<br>
    &nbsp;&nbsp;&nbsp; at
com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:132)<br>
    &nbsp;&nbsp;&nbsp; at $Proxy8.storeAsURL(Unknown Source)
    <br>
    &nbsp;&nbsp;&nbsp; at
com.artegis.rs.pdf.PdfGenerator.convert2pdfWithDaemon(PdfGenerator.java:622)<br>
    &nbsp;&nbsp;&nbsp; at
    com.artegis.rs.pdf.PdfGenerator.getPdfFile(PdfGenerator.java:299)
    <br>
    &nbsp;&nbsp;&nbsp; at
    com.artegis.rs.servlet.UploadServlet.doPost(UploadServlet.java:442)
    <br>
    &nbsp;&nbsp;&nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    <br>
    &nbsp;&nbsp;&nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    <br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)<br>
    &nbsp;&nbsp;&nbsp; at
    com.artegis.infra.classes.PageForwarder.forward(PageForwarder.java:234)
    <br>
    &nbsp;&nbsp;&nbsp; at
com.artegis.infra.servlet.ControllerServlet.doControl(ControllerServlet.java:1453)<br>
    &nbsp;&nbsp;&nbsp; at
com.artegis.infra.servlet.ControllerServlet.doPost(ControllerServlet.java:775)<br>
    &nbsp;&nbsp;&nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    <br>
    &nbsp;&nbsp;&nbsp; at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    <br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)<br>
    &nbsp;&nbsp;&nbsp; at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)<br>
    &nbsp;&nbsp;&nbsp; at
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    <br>
    &nbsp;&nbsp;&nbsp; at java.lang.Thread.run(Thread.java:680)
    <br>
    <br>
    The Java code:
    <br>
    /*
    <br>
    &nbsp;* java -Dcom.sun.star.lib.loader.unopath="<i class="moz-txt-slash"><span
        class="moz-txt-tag">/</span>Applications/LibreOffice.app/Contents/MacOS<span
        class="moz-txt-tag">/</span></i>" -classpath
:Users/bv/apache-tomcat-6.0.29/lib/ridl.jar:Users/bv/apache-tomcat-6.0.29/lib/unoil.jar:Users/bv/apache-tomcat-6.0.29/lib/juh.jar:Users/bv/apache-tomcat-6.0.29/lib/jurt.jar:.:<i
      class="moz-txt-slash"><span class="moz-txt-tag">/</span>Users/bv/Downloads<span
        class="moz-txt-tag">/</span></i> com.sun.star.lib.loader.Loader
    test.Test
    <br>
    &nbsp;*/
    <br>
    package test;
    <br>
    import java.io.File;
    <br>
    import com.sun.star.beans.PropertyValue;
    <br>
    import com.sun.star.beans.XPropertySet;
    <br>
    import com.sun.star.bridge.XUnoUrlResolver;
    <br>
    import com.sun.star.comp.helper.Bootstrap;
    <br>
    import com.sun.star.frame.XComponentLoader;
    <br>
    import com.sun.star.frame.XStorable;
    <br>
    import com.sun.star.lang.XComponent;
    <br>
    import com.sun.star.lang.XMultiComponentFactory;
    <br>
    import com.sun.star.uno.UnoRuntime;
    <br>
    import com.sun.star.uno.XComponentContext;
    <br>
    <br>
    public class Test {
    <br>
    &nbsp;&nbsp;&nbsp; public static void main(String[] args) {
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File file = new
    File("/opt/regis/base/root/templates/docx/invoice/events/invoice.docx");
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XComponentContext xContext =
    Bootstrap.createInitialComponentContext(null);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMultiComponentFactory xLocalServiceManager =
    xContext.getServiceManager();
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object urlResolver =
    xLocalServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver",
    xContext);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XUnoUrlResolver xUrlResolver = (XUnoUrlResolver)
    UnoRuntime.queryInterface(XUnoUrlResolver.class, urlResolver);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object initialObject =
xUrlResolver.resolve("uno:socket,host=localhost,port=7396;urp;StarOffice.ServiceManager");<br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XMultiComponentFactory xOfficeFactory =
    (XMultiComponentFactory)
    UnoRuntime.queryInterface(XMultiComponentFactory.class,
    initialObject);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object desktop =
    xOfficeFactory.createInstanceWithContext("com.sun.star.frame.Desktop",
    xContext);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XComponentLoader xCompLoader = (XComponentLoader)
    UnoRuntime.queryInterface(XComponentLoader.class, desktop);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sOutputDir = "/tmp/PDFdaemon";
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File outdir = new File(sOutputDir);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sOutUrl = <a class="moz-txt-link-rfc2396E"
      href="file:///">"file:///"</a>+outdir.getAbsolutePath().replace('\\',
    '/');
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sUrl = <a class="moz-txt-link-rfc2396E"
      href="file:///">"file:///"</a>+file.getAbsolutePath().replace('\\',
    '/');
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Loading the wanted document
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PropertyValue propertyValues[] = new PropertyValue[1];
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[0] = new PropertyValue();
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[0].Name = "Hidden";
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[0].Value = new Boolean(true);
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object oDocToStore =
    xCompLoader.loadComponentFromURL(sUrl, "_blank", 0, propertyValues);
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Getting an object that will offer a simple way to
    store
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // a document to a URL.
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XStorable xStorable = (XStorable)
    UnoRuntime.queryInterface(XStorable.class, oDocToStore);
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Preparing properties for converting the document
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues = new PropertyValue[2];
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Setting the flag for overwriting
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[0] = new PropertyValue();
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[0].Name = "Overwrite";
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[0].Value = new Boolean(true);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Setting the filter name
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[1] = new PropertyValue();
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[1].Name = "FilterName";
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; propertyValues[1].Value = "MS Word 97"; // OK
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; String sExtension = "doc";
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; propertyValues[1].Value = "writer_pdf_Export";
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sExtension = "pdf";
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Appending the favoured extension to the origin
    document name
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int index1 = sUrl.lastIndexOf('/');
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int index2 = sUrl.lastIndexOf('.');
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String sStoreUrl = sOutUrl+sUrl.substring(index1,
    index2+1)+sExtension;
    <br>
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; Storing and converting the document
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xStorable.storeAsURL(sStoreUrl, propertyValues);
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e) {
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e.printStackTrace();
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
    <br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.exit(0);
    <br>
    &nbsp;&nbsp;&nbsp; }
    <br>
    }
  </body>
</html>