Hi,

I am afraid I am stumped and need some help with this. I have a component, a
com.sun.star.text.TextDocument that has only an Xmodel, no Frame or
Controller, that I have populated throupgh a Xloadable.load. The component
has loaded succesfully and I can get its properties through XPropertySet and
XPropertySetInfo. It has content, word count, character count, etc > 0 and I
can extract text through XTextCursor.getString(). I can extract the Xmodel's
URL without a problem.

So far so good. The problem is when I come to print. I get the XPrintable
interface

       XPrintable xPrintable = (XPrintable) UnoRuntime.queryInterface(
XPrintable.class, xComponent );
        if ( xPrintable == null )
            return;

        XPrintJobBroadcaster xPrintJobBroadcaster = (XPrintJobBroadcaster)
UnoRuntime.queryInterface( XPrintJobBroadcaster.class, xPrintable );
        LocalPrintJobListener xPrintJobListener = new
LocalPrintJobListener();
        xPrintJobBroadcaster.addPrintJobListener( xPrintJobListener );

        PropertyValue[] printerDesc = new PropertyValue[1];
        printerDesc[0] = new PropertyValue();
        printerDesc[0].Name = "Name";
        printerDesc[0].Value = printerName;
        xPrintable.setPrinter( printerDesc );

        printerDesc = xPrintable.getPrinter();
        for( int i = 0; i < printerDesc.length; i++ )
        {
            m_lbaLogger.info( "printerDesc[" + i + "] Name " +
printerDesc[i].Name + ", value " + printerDesc[i].Value.toString() );
        }

        dsUrl = dsUrl.replace( '\\', '/' );
        PropertyValue[] printOpts = new PropertyValue[4];
        printOpts[0] = new PropertyValue();
        printOpts[0].Name = "FileName";
        printOpts[0].Value = dsUrl;
        printOpts[1] = new PropertyValue();
        printOpts[1].Name = "CopyCount";
        printOpts[1].Value = new Short( (short)1 );
        printOpts[2] = new PropertyValue();
        printOpts[2].Name = "Pages";
        printOpts[2].Value = "1-999999";
        printOpts[3] = new PropertyValue();
        printOpts[3].Name = "Wait";
        printOpts[3].Value = new Boolean( true );

        xPrintable.print( printOpts );

        int nWait = 0;
        int nMaxWait = 10000;
        m_lbaLogger.info( "Printing to file " + dsUrl + " through printer "
+ printerName );
        while ( xPrintJobListener.getState() == null ||
xPrintJobListener.getState() == PrintableState.JOB_STARTED )
        {
            Thread.sleep( 100 );
            nWait += 100;
            if ( nWait > nMaxWait )
            {
                m_lbaLogger.warning( "Could not print document" );
                break;
            }
        }
        m_lbaLogger.info( "Waited " + nWait + "ms to print document, ending
print state was " + xPrintJobListener.toString() );

        xPrintJobBroadcaster.removePrintJobListener( xPrintJobListener );
 
After xPrintable.setPrinter( printerDesc ), I getPrinter() to see if
anything has been set but the printerDesc array has a length of 0. Then when
I try to print, the PrintJobListner always times out and the
Printer's xPrintJobListener.getState() == null which means the print job did
not even start. The printer name is a valid printer as confirmed by

    private boolean isPrinter( String printerName )
      {
        // Look up all services
        javax.print.PrintService[] services =
javax.print.PrintServiceLookup.lookupPrintServices( null, null );
        for ( int i = 0; i < services.length; i++ )
          {
            if ( services[i].getName().trim().equalsIgnoreCase(
printerName.trim() ) )
              {
                return true;
              }
          }
        return false;
      } // isPrinter

Is there anything evident that I am missing here? Is there any reason that
an Xmodel without a Controller or Frame should not print?

Any help would be greatly appreciated.

Daniel


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to