1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 package convwatch; 25 26 import java.io.File; 27 import java.util.ArrayList; 28 import java.io.FileWriter; 29 30 import com.sun.star.uno.UnoRuntime; 31 import com.sun.star.lang.XMultiServiceFactory; 32 import com.sun.star.document.XTypeDetection; 33 import com.sun.star.container.XNameAccess; 34 import com.sun.star.frame.XDesktop; 35 import com.sun.star.beans.XPropertySet; 36 import com.sun.star.beans.PropertyValue; 37 import com.sun.star.frame.XComponentLoader; 38 import com.sun.star.lang.XComponent; 39 import com.sun.star.frame.XStorable; 40 import com.sun.star.view.XPrintable; 41 import com.sun.star.lang.XServiceInfo; 42 import com.sun.star.frame.XModel; 43 import com.sun.star.uno.AnyConverter; 44 45 import helper.URLHelper; 46 import helper.PropertyHelper; 47 import helper.OSHelper; 48 // import convwatch.FileHelper; 49 // import convwatch.MSOfficePrint; 50 // import convwatch.GraphicalTestArguments; 51 // import convwatch.ConvWatchCancelException; 52 53 // import helper.Parameter; 54 55 /** 56 * This Object is to print a given document with OpenOffice.org / StarOffice 57 * over the normal printer driver 58 * or over it's pdf exporter 59 */ 60 public class OfficePrint { 61 62 63 // static long m_nStartTime; 64 // // static Date m_aDateCache = null; 65 // 66 // /* 67 // simple helper functions to start/stop a timer, to know how long a process need in milliseconds 68 // */ 69 // public static void startTimer() 70 // { 71 // // if (m_aDateCache == null) 72 // // { 73 // // m_aDateCache = new Date(); 74 // // } 75 // // m_nStartTime = m_aDateCache.getTime(); 76 // m_nStartTime = System.currentTimeMillis(); 77 // } 78 // public static long stopTimer() 79 // { 80 // // if (m_aDateCache == null) 81 // // { 82 // // System.out.println("Forgotten to initialise start timer."); 83 // // return 0; 84 // // } 85 // // long m_nStopTime = m_aDateCache.getTime(); 86 // if (m_nStartTime == 0) 87 // { 88 // System.out.println("Forgotten to initialise start timer."); 89 // return 0; 90 // } 91 // long m_nStopTime = System.currentTimeMillis(); 92 // return m_nStopTime - m_nStartTime; 93 // } 94 95 showProperty(PropertyValue _aValue)96 private static void showProperty(PropertyValue _aValue) 97 { 98 String sName = _aValue.Name; 99 String sValue; 100 try 101 { 102 sValue = AnyConverter.toString(_aValue.Value); 103 GlobalLogWriter.get().println("Property " + sName + ":=" + sValue); 104 } 105 catch (com.sun.star.lang.IllegalArgumentException e) 106 { 107 // GlobalLogWriter.get().println("showProperty: can't convert a object to string."); 108 GlobalLogWriter.get().println("Property " + sName + ":= a Object which can't convert by AnyConverter()"); 109 } 110 } 111 112 /** 113 * shows the FilterName and MediaType from the given XComponent 114 */ getDocumentType( XComponent _aDoc )115 static String getDocumentType( XComponent _aDoc ) 116 { 117 XModel xModel = UnoRuntime.queryInterface( XModel.class, _aDoc); 118 PropertyValue[] aArgs = xModel.getArgs(); 119 for (int i=0;i<aArgs.length;i++) 120 { 121 PropertyValue aValue = aArgs[i]; 122 // System.out.print("Property: '" + aValue.Name); 123 // System.out.println("' := '" + aValue.Value + "'"); 124 if (aValue.Name.equals("FilterName") || 125 aValue.Name.equals("MediaType")) 126 { 127 String sNameValue = "'" + aValue.Name + "' := '" + aValue.Value + "'"; 128 return sNameValue; 129 } 130 } 131 return ""; 132 } 133 showDocumentType( XComponent _aDoc )134 static void showDocumentType( XComponent _aDoc ) 135 { 136 String sNameValue = getDocumentType(_aDoc); 137 GlobalLogWriter.get().println(" Property: '" + sNameValue); 138 } 139 /** 140 * load a OpenOffice.org document from a given URL (_sInputURL) 141 * the GraphicalTestArguments must contain a living MultiServiceFactory object 142 * or we crash here. 143 * Be aware, the ownership of the document gets to you, you have to close it. 144 * @param _aGTA 145 * @param _sInputURL 146 * @return 147 */ loadFromURL(GraphicalTestArguments _aGTA, String _sInputURL)148 public static XComponent loadFromURL(GraphicalTestArguments _aGTA, 149 String _sInputURL) 150 { 151 XComponent aDoc = null; 152 try 153 { 154 if (_aGTA.getMultiServiceFactory() == null) 155 { 156 GlobalLogWriter.get().println("MultiServiceFactory in GraphicalTestArgument not set."); 157 return null; 158 } 159 Object oDsk = _aGTA.getMultiServiceFactory().createInstance("com.sun.star.frame.Desktop"); 160 XDesktop aDesktop = UnoRuntime.queryInterface(XDesktop.class, oDsk); 161 162 if (aDesktop != null) 163 { 164 GlobalLogWriter.get().println("com.sun.star.frame.Desktop created."); 165 // String sInputURL = aCurrentParameter.sInputURL; 166 // String sOutputURL = aCurrentParameter.sOutputURL; 167 // String sPrintFileURL = aCurrentParameter.sPrintToFileURL; 168 // System.out.println(_sInputURL); 169 170 171 // set here the loadComponentFromURL() properties 172 // at the moment only 'Hidden' is set, so no window is opened at work 173 174 ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); 175 176 // check which properties should set and count it. 177 // if (_aGTA.isHidden()) 178 // { 179 // nPropertyCount ++; 180 // } 181 // if (_aGTA.getImportFilterName() != null && _aGTA.getImportFilterName().length() > 0) 182 // { 183 // nPropertyCount ++; 184 // } 185 186 // initialize the propertyvalue 187 // int nPropertyIndex = 0; 188 // aProps = new PropertyValue[ nPropertyCount ]; 189 190 // set all property values 191 if (_aGTA.isHidden()) 192 { 193 PropertyValue Arg = new PropertyValue(); 194 Arg.Name = "Hidden"; 195 Arg.Value = Boolean.TRUE; 196 aPropertyList.add(Arg); 197 showProperty(Arg); 198 } 199 if (_aGTA.getImportFilterName() != null && _aGTA.getImportFilterName().length() > 0) 200 { 201 PropertyValue Arg = new PropertyValue(); 202 Arg.Name = "FilterName"; 203 Arg.Value = _aGTA.getImportFilterName(); 204 aPropertyList.add(Arg); 205 showProperty(Arg); 206 } 207 208 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Load document"); 209 // GlobalLogWriter.get().flush(); 210 211 XComponentLoader aCompLoader = UnoRuntime.queryInterface( XComponentLoader.class, aDesktop); 212 213 // XComponent aDoc = null; 214 215 _aGTA.getPerformance().startTime(PerformanceContainer.Load); 216 aDoc = aCompLoader.loadComponentFromURL(_sInputURL, "_blank", 0, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList) ); 217 _aGTA.getPerformance().stopTime(PerformanceContainer.Load); 218 if (aDoc != null) 219 { 220 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Load document done."); 221 showDocumentType(aDoc); 222 _aGTA.setDocumentType(getDocumentType(aDoc)); 223 } 224 else 225 { 226 GlobalLogWriter.get().println(" Load document failed."); 227 if (_aGTA.getImportFilterName() != null && _aGTA.getImportFilterName().length() > 0) 228 { 229 GlobalLogWriter.get().println(" Please check FilterName := '" + _aGTA.getImportFilterName() + "'"); 230 } 231 GlobalLogWriter.get().println(""); 232 } 233 } 234 else 235 { 236 GlobalLogWriter.get().println("com.sun.star.frame.Desktop failed."); 237 } 238 } 239 catch ( com.sun.star.uno.Exception e ) 240 { 241 // Some exception occured.FAILED 242 GlobalLogWriter.get().println("UNO Exception caught."); 243 GlobalLogWriter.get().println("Message: " + e.getMessage()); 244 e.printStackTrace(); 245 aDoc = null; 246 } 247 return aDoc; 248 } 249 exportToPDF(XComponent _xComponent, String _sDestinationName)250 static boolean exportToPDF(XComponent _xComponent, String _sDestinationName) 251 { 252 XServiceInfo xServiceInfo = 253 UnoRuntime.queryInterface( 254 XServiceInfo.class, _xComponent 255 ); 256 257 ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); 258 PropertyValue aFiltername = new PropertyValue(); 259 aFiltername.Name = "FilterName"; 260 aFiltername.Value = getFilterName_forPDF(xServiceInfo); 261 aPropertyList.add(aFiltername); 262 showProperty(aFiltername); 263 boolean bWorked = true; 264 265 try 266 { 267 XStorable store = 268 UnoRuntime.queryInterface( 269 XStorable.class, _xComponent 270 ); 271 store.storeToURL(_sDestinationName, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); 272 } 273 catch (com.sun.star.io.IOException e) 274 { 275 GlobalLogWriter.get().println("IO Exception caught."); 276 GlobalLogWriter.get().println("Message: " + e.getMessage()); 277 bWorked = false; 278 } 279 280 return bWorked; 281 } 282 getFilterName_forPDF(XServiceInfo xServiceInfo)283 static String getFilterName_forPDF(XServiceInfo xServiceInfo) 284 { 285 String filterName = ""; 286 287 if (xServiceInfo.supportsService("com.sun.star.text.TextDocument")) 288 { 289 //writer 290 filterName = "writer_pdf_Export"; 291 } 292 else if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) ) 293 { 294 //calc 295 filterName = "calc_pdf_Export"; 296 } 297 else if ( xServiceInfo.supportsService( "com.sun.star.drawing.DrawingDocument" ) ) 298 { 299 //draw 300 filterName = "draw_pdf_Export"; 301 } 302 else if ( xServiceInfo.supportsService( "com.sun.star.presentation.PresentationDocument" ) ) 303 { 304 //impress 305 filterName = "impress_pdf_Export"; 306 } 307 else if (xServiceInfo.supportsService("com.sun.star.text.WebDocument")) 308 { 309 //html document 310 filterName = "writer_web_pdf_Export"; 311 } 312 else if ( xServiceInfo.supportsService("com.sun.star.text.GlobalDocument") ) 313 { 314 //master document 315 filterName = "writer_globaldocument_pdf_Export"; 316 } 317 else if ( xServiceInfo.supportsService( "com.sun.star.formulaFormulaProperties" ) ) 318 { 319 //math document 320 filterName = "math_pdf_Export"; 321 } 322 323 return filterName; 324 } 325 326 // ----------------------------------------------------------------------------- 327 storeAsPDF(GraphicalTestArguments _aGTA, String _sInputURL, String _sOutputURL)328 public static boolean storeAsPDF(GraphicalTestArguments _aGTA, 329 String _sInputURL, 330 String _sOutputURL) 331 { 332 boolean bBack = false; 333 XComponent aDoc = loadFromURL(_aGTA, _sInputURL); 334 335 if (aDoc == null) 336 { 337 GlobalLogWriter.get().println("Can't load document."); 338 return bBack; 339 } 340 bBack = storeAsPDF(_aGTA, aDoc, _sOutputURL); 341 createInfoFile(_sOutputURL, _aGTA, "as pdf"); 342 343 GlobalLogWriter.get().println("Close document."); 344 aDoc.dispose(); 345 return bBack; 346 } 347 storeAsPDF(GraphicalTestArguments _aGTA, XComponent _aDoc, String _sOutputURL)348 public static boolean storeAsPDF(GraphicalTestArguments _aGTA, 349 XComponent _aDoc, 350 String _sOutputURL) 351 { 352 // try { 353 boolean bBack = true; 354 _aGTA.getPerformance().startTime(PerformanceContainer.StoreAsPDF); 355 bBack = exportToPDF(_aDoc, _sOutputURL); 356 _aGTA.getPerformance().stopTime(PerformanceContainer.StoreAsPDF); 357 358 if (!bBack) 359 { 360 GlobalLogWriter.get().println("Can't store document as PDF."); 361 bBack = false; 362 } 363 return bBack; 364 } 365 366 // ----------------------------------------------------------------------------- 367 368 /** 369 * print the document found in file (_sInputURL) to as postscript to file (_sPrintFileURL) 370 * Due to the fact we use a printer to convert the file to postscript, the default printer 371 * to create such postscript format must be installed, this is not tested here. 372 * 373 * @param _aGTA 374 * @param _sInputURL 375 * @param _sOutputURL 376 * @param _sPrintFileURL 377 * @return true, if print has been done. 378 * Be careful, true means only print returns with no errors, to be sure print is really done 379 * check existence of _sPrintFileURL 380 */ 381 printToFileWithOOo(GraphicalTestArguments _aGTA, String _sInputURL, String _sOutputURL, String _sPrintFileURL)382 public static boolean printToFileWithOOo(GraphicalTestArguments _aGTA, 383 String _sInputURL, 384 String _sOutputURL, 385 String _sPrintFileURL) 386 { 387 // waitInSeconds(1); 388 boolean bBack = false; 389 390 XComponent aDoc = loadFromURL(_aGTA, _sInputURL); 391 if (aDoc != null) 392 { 393 if ( _sInputURL.equals(_sOutputURL) ) 394 { 395 // don't store document 396 // input and output are equal OR 397 GlobalLogWriter.get().println("Warning: Inputpath and Outputpath are equal. Document will not stored again."); 398 _aGTA.disallowStore(); 399 } 400 bBack = impl_printToFileWithOOo(_aGTA, aDoc, _sOutputURL, _sPrintFileURL); 401 402 GlobalLogWriter.get().println("Close document."); 403 aDoc.dispose(); 404 } 405 else 406 { 407 GlobalLogWriter.get().println("loadDocumentFromURL() failed with document: " + _sInputURL); 408 } 409 return bBack; 410 } 411 412 // ----------------------------------------------------------------------------- createInfoFile(String _sFile, GraphicalTestArguments _aGTA)413 public static void createInfoFile(String _sFile, GraphicalTestArguments _aGTA) 414 { 415 createInfoFile(_sFile, _aGTA, ""); 416 } 417 createInfoFile(String _sFile, GraphicalTestArguments _aGTA, String _sSpecial)418 public static void createInfoFile(String _sFile, GraphicalTestArguments _aGTA, String _sSpecial) 419 { 420 String sFilename; 421 if (_sFile.startsWith("file://")) 422 { 423 sFilename = FileHelper.getSystemPathFromFileURL(_sFile); 424 GlobalLogWriter.get().println("CreateInfoFile: '" + sFilename + "'" ); 425 } 426 else 427 { 428 sFilename = _sFile; 429 } 430 String sFileDir = FileHelper.getPath(sFilename); 431 String sBasename = FileHelper.getBasename(sFilename); 432 String sNameNoSuffix = FileHelper.getNameNoSuffix(sBasename); 433 434 String fs = System.getProperty("file.separator"); 435 String ls = System.getProperty("line.separator"); 436 String sInfoFilename = sFileDir + fs + sNameNoSuffix + ".info"; 437 File aInfoFile = new File(sInfoFilename); 438 439 String sBuildID = ""; 440 441 try 442 { 443 FileWriter out = new FileWriter(aInfoFile.toString()); 444 out.write("# automatically created file by graphical compare" + ls); 445 if (_aGTA != null) 446 { 447 if (_sSpecial != null && _sSpecial.equals("msoffice")) 448 { 449 out.write("# buildid from wordloadfile" + ls); 450 sBuildID = _aGTA.getPerformance().getMSOfficeVersion(); 451 out.write("buildid=" + sBuildID + ls); 452 } 453 else 454 { 455 out.write("# buildid is read out of the bootstrap file" + ls); 456 sBuildID = _aGTA.getBuildID(); 457 out.write("buildid=" + sBuildID + ls); 458 } 459 // if (_sSpecial != null && _sSpecial.length() > 0) 460 // { 461 // out.write("special=" + _sSpecial + ls); 462 // } 463 out.write(ls); 464 out.write("# resolution given in DPI" + ls); 465 out.write("resolution=" + _aGTA.getResolutionInDPI() + ls); 466 } 467 else 468 { 469 out.write("buildid=" + _sSpecial + ls); 470 } 471 // long nTime = stopTimer(); 472 // if (nTime != 0) 473 // { 474 // out.write("# time is given in milli seconds" + ls); 475 // out.write("time=" + nTime + ls); 476 // } 477 478 out.write(ls); 479 out.write("# Values out of System.getProperty(...)" + ls); 480 out.write("os.name=" + System.getProperty("os.name") + ls); 481 out.write("os.arch=" + System.getProperty("os.arch") + ls); 482 out.write("os.version=" + System.getProperty("os.version") + ls); 483 484 if (_aGTA != null) 485 { 486 out.write(ls); 487 out.write("# Performance output, values are given in milli sec." + ls); 488 _aGTA.getPerformance().print(out); 489 } 490 491 out.flush(); 492 out.close(); 493 } 494 catch (java.io.IOException e) 495 { 496 GlobalLogWriter.get().println("can't create Info file."); 497 e.printStackTrace(); 498 } 499 500 String sExtension = FileHelper.getSuffix(_aGTA.getInputFile()); 501 if (sExtension.startsWith(".")) 502 { 503 sExtension = sExtension.substring(1); 504 } 505 506 DB.writeToDB(_aGTA.getInputFile(), 507 sNameNoSuffix, 508 sExtension, 509 sBuildID, 510 _aGTA.getReferenceType(), 511 _aGTA.getResolutionInDPI() 512 ); 513 } 514 515 516 517 // ----------------------------------------------------------------------------- impl_printToFileWithOOo(GraphicalTestArguments _aGTA, XComponent _aDoc, String _sOutputURL, String _sPrintFileURL)518 private static boolean impl_printToFileWithOOo(GraphicalTestArguments _aGTA, 519 XComponent _aDoc, 520 String _sOutputURL, 521 String _sPrintFileURL) 522 { 523 boolean bBack = false; 524 boolean bFailed = true; // always be a pessimist, 525 if (_aDoc == null) 526 { 527 GlobalLogWriter.get().println("No document is given."); 528 return bBack; 529 } 530 531 try 532 { 533 if (_sOutputURL != null) 534 { 535 if (_aGTA.isStoreAllowed()) 536 { 537 // store the document in an other directory 538 XStorable aStorable = UnoRuntime.queryInterface( XStorable.class, _aDoc); 539 if (aStorable != null) 540 { 541 PropertyValue [] szEmptyArgs = new PropertyValue [0]; 542 543 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Store document."); 544 _aGTA.getPerformance().startTime(PerformanceContainer.Store); 545 aStorable.storeAsURL(_sOutputURL, szEmptyArgs); 546 _aGTA.getPerformance().stopTime(PerformanceContainer.Store); 547 548 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Store document done."); 549 TimeHelper.waitInSeconds(2, "After store as URL to:" + _sOutputURL); 550 GlobalLogWriter.get().println("Reload stored file test."); 551 XComponent aDoc = loadFromURL(_aGTA, _sOutputURL); 552 if (aDoc == null) 553 { 554 GlobalLogWriter.get().println("Reload stored file test failed, can't reload file: " + _sOutputURL); 555 } 556 } 557 } 558 } 559 } 560 catch ( com.sun.star.uno.Exception e ) 561 { 562 // Some exception occured.FAILED 563 GlobalLogWriter.get().println("UNO Exception caught."); 564 GlobalLogWriter.get().println("Message: " + e.getMessage()); 565 566 e.printStackTrace(); 567 bBack = false; 568 } 569 570 try 571 { 572 573 // System.out.println("Document loaded."); 574 // Change Pagesettings to DIN A4 575 576 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Print document."); 577 XPrintable aPrintable = UnoRuntime.queryInterface( XPrintable.class, _aDoc); 578 if (aPrintable != null) 579 { 580 // System.out.println(" Set PaperFormat to DIN A4"); 581 // { 582 // PropertyValue[] aPrinterProps = aPrintable.getPrinter(); 583 // System.out.println("PrinterProps size: " + String.valueOf(aPrinterProps.length)); 584 // int nPropIndex = 0; 585 // while (!"PaperFormat".equals(aPrinterProps[nPropIndex].Name)) 586 // { 587 // // System.out.println(aPrinterProps[nPropIndex].Name); 588 // nPropIndex++; 589 // } 590 // aPrinterProps[nPropIndex].Value = com.sun.star.view.PaperFormat.A4; 591 // aPrintable.setPrinter(aPrinterProps); 592 // } 593 594 // configure Office to allow to execute macos 595 596 // TODO: We need a possibility to set the printer name also for StarOffice/OpenOffice 597 if (OSHelper.isWindows()) 598 { 599 if (_aGTA.getPrinterName() != null) 600 { 601 ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); 602 // PropertyValue [] aPrintProps = new PropertyValue[1]; 603 PropertyValue Arg = new PropertyValue(); 604 Arg.Name = "Name"; 605 Arg.Value = _aGTA.getPrinterName(); 606 aPropertyList.add(Arg); 607 showProperty(Arg); 608 // GlobalLogWriter.get().println("Printername is not null, so set to " + _aGTA.getPrinterName()); 609 aPrintable.setPrinter(PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); 610 } 611 } 612 613 // set property values for XPrintable.print() 614 // more can be found at "http://api.openoffice.org/docs/common/ref/com/sun/star/view/PrintOptions.html" 615 616 // int nProperties = 1; // default for 'FileName' property 617 // if (_aGTA.printAllPages() == false) 618 // { 619 // // we don't want to print all pages, build Pages string by ourself 620 // nProperties ++; 621 // } 622 // int nPropsCount = 0; 623 624 // If we are a SpreadSheet (calc), we need to set PrintAllSheets property to 'true' 625 XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, _aDoc ); 626 if ( xServiceInfo.supportsService( "com.sun.star.sheet.SpreadsheetDocument" ) ) 627 { 628 XMultiServiceFactory xMSF = _aGTA.getMultiServiceFactory(); 629 Object aSettings = xMSF.createInstance( "com.sun.star.sheet.GlobalSheetSettings" ); 630 if (aSettings != null) 631 { 632 XPropertySet xPropSet = UnoRuntime.queryInterface( XPropertySet.class, aSettings ); 633 xPropSet.setPropertyValue( "PrintAllSheets", new Boolean( true ) ); 634 GlobalLogWriter.get().println("PrintAllSheets := true"); 635 } 636 } 637 638 ArrayList<PropertyValue> aPrintProps = new ArrayList<PropertyValue>(); 639 // GlobalLogWriter.get().println("Property FileName:=" + _sPrintFileURL); 640 641 // PropertyValue [] aPrintProps = new PropertyValue[nProperties]; 642 PropertyValue Arg = new PropertyValue(); 643 Arg.Name = "FileName"; 644 Arg.Value = _sPrintFileURL; 645 // aPrintProps[nPropsCount ++] = Arg; 646 aPrintProps.add(Arg); 647 showProperty(Arg); 648 649 if (_aGTA.printAllPages() == false) 650 { 651 String sPages = ""; 652 if (_aGTA.getMaxPages() > 0) 653 { 654 sPages = "1-" + String.valueOf(_aGTA.getMaxPages()); 655 } 656 if (_aGTA.getOnlyPages().length() != 0) 657 { 658 if (sPages.length() != 0) 659 { 660 sPages += ";"; 661 } 662 sPages += String.valueOf(_aGTA.getOnlyPages()); 663 } 664 665 Arg = new PropertyValue(); 666 Arg.Name = "Pages"; 667 Arg.Value = sPages; 668 aPrintProps.add(Arg); 669 showProperty(Arg); 670 } 671 672 // GlobalLogWriter.get().println("Start printing."); 673 674 _aGTA.getPerformance().startTime(PerformanceContainer.Print); 675 aPrintable.print(PropertyHelper.createPropertyValueArrayFormArrayList(aPrintProps)); 676 TimeHelper.waitInSeconds(1, "Start waiting for print ready."); 677 678 GlobalLogWriter.get().println("Wait until document is printed."); 679 boolean isBusy = true; 680 int nPrintCount = 0; 681 while (isBusy) 682 { 683 PropertyValue[] aPrinterProps = aPrintable.getPrinter(); 684 int nPropIndex = 0; 685 while (!"IsBusy".equals(aPrinterProps[nPropIndex].Name)) 686 { 687 // System.out.println(aPrinterProps[nPropIndex].Name); 688 nPropIndex++; 689 } 690 isBusy = (aPrinterProps[nPropIndex].Value == Boolean.TRUE) ? true : false; 691 TimeHelper.waitInSeconds(1, "is print ready?"); 692 nPrintCount++; 693 if (nPrintCount > 3600) 694 { 695 // we will never wait >1h until print is ready! 696 GlobalLogWriter.get().println("ERROR: Cancel print due to too long wait."); 697 throw new com.sun.star.uno.Exception("Convwatch exception, wait too long for printing."); 698 } 699 } 700 _aGTA.getPerformance().stopTime(PerformanceContainer.Print); 701 GlobalLogWriter.get().println(DateHelper.getDateTimeForHumanreadableLog() + " Print document done."); 702 703 // Create a .info file near the printed '.ps' or '.prn' file. 704 createInfoFile(_sPrintFileURL, _aGTA); 705 } 706 else 707 { 708 GlobalLogWriter.get().println("Can't get XPrintable interface."); 709 } 710 bFailed = false; 711 bBack = true; 712 } 713 catch ( com.sun.star.uno.Exception e ) 714 { 715 // Some exception occured.FAILED 716 GlobalLogWriter.get().println("UNO Exception caught."); 717 GlobalLogWriter.get().println("Message: " + e.getMessage()); 718 719 e.printStackTrace(); 720 bBack = false; 721 } 722 723 if (bFailed == true) 724 { 725 GlobalLogWriter.get().println("convwatch.OfficePrint: FAILED"); 726 } 727 else 728 { 729 GlobalLogWriter.get().println("convwatch.OfficePrint: OK"); 730 } 731 return bBack; 732 } 733 734 735 /** 736 * @param _aGTA 737 * @param _sAbsoluteOutputPath 738 * @param _sAbsoluteInputFile 739 * @return true, if the reference (*.prrn file) based on given output path and given input path exist. 740 * If OVERWRITE_REFERENCE is set, always return false. 741 */ isReferenceExists(GraphicalTestArguments _aGTA, String _sAbsoluteOutputPath, String _sAbsoluteInputFile)742 public static boolean isReferenceExists(GraphicalTestArguments _aGTA, 743 String _sAbsoluteOutputPath, 744 String _sAbsoluteInputFile) 745 { 746 if (! FileHelper.exists(_sAbsoluteInputFile)) 747 { 748 // throw new ConvWatchCancelException("Input file: " + _sAbsoluteInputFile + " does not exist."); 749 return false; 750 } 751 752 String fs = System.getProperty("file.separator"); 753 754 // String sInputFileURL = URLHelper.getFileURLFromSystemPath(_sAbsoluteInputFile); 755 756 String sInputFileBasename = FileHelper.getBasename(_sAbsoluteInputFile); 757 // String sOutputFileURL = null; 758 String sOutputPath; 759 if (_sAbsoluteOutputPath != null) 760 { 761 sOutputPath = _sAbsoluteOutputPath; 762 // FileHelper.makeDirectories("", sOutputPath); 763 } 764 else 765 { 766 String sInputPath = FileHelper.getPath(_sAbsoluteInputFile); 767 sOutputPath = sInputPath; 768 } 769 // sOutputFileURL = URLHelper.getFileURLFromSystemPath(sOutputPath + fs + sInputFileBasename); 770 // sOutputFileURL = null; 771 772 String sPrintFilename = FileHelper.getNameNoSuffix(sInputFileBasename); 773 // String sPrintFileURL; 774 775 String sAbsolutePrintFilename = sOutputPath + fs + sPrintFilename + ".prn"; 776 if (FileHelper.exists(sAbsolutePrintFilename) && _aGTA.getOverwrite() == false) 777 { 778 GlobalLogWriter.get().println("Reference already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); 779 return true; 780 } 781 return false; 782 } 783 784 // ----------------------------------------------------------------------------- 785 /** 786 * create a reference file 787 * _sAbsoluteInputPath contains the source file, if not exists, return with failure. 788 * _sAbsoluteOutputPath contains the destination, where the file will store after load with StarOffice/OpenOffice.org 789 * if is null, print only near the Input file path 790 * _sPrintType ".prn" Print input file with StarOffice/OpenOffice.org and the default printer as PostScript 791 * 792 * @param _aGTA 793 * @param _sAbsoluteOutputPath 794 * @param _sAbsoluteInputFile 795 * @return 796 * @throws ConvWatchCancelException 797 */ buildReference(GraphicalTestArguments _aGTA, String _sAbsoluteOutputPath, String _sAbsoluteInputFile)798 public static boolean buildReference(GraphicalTestArguments _aGTA, 799 String _sAbsoluteOutputPath, 800 String _sAbsoluteInputFile) 801 throws ConvWatchCancelException 802 { 803 if (! FileHelper.exists(_sAbsoluteInputFile)) 804 { 805 throw new ConvWatchCancelException("buildReference(): Input file: " + _sAbsoluteInputFile + " does not exist."); 806 } 807 808 String fs = System.getProperty("file.separator"); 809 810 String sInputFileURL = URLHelper.getFileURLFromSystemPath(_sAbsoluteInputFile); 811 812 String sInputFileBasename = FileHelper.getBasename(_sAbsoluteInputFile); 813 String sOutputFileURL = null; 814 String sOutputPath; 815 if (_sAbsoluteOutputPath != null) 816 { 817 sOutputPath = _sAbsoluteOutputPath; 818 FileHelper.makeDirectories("", sOutputPath); 819 } 820 else 821 { 822 String sInputPath = FileHelper.getPath(_sAbsoluteInputFile); 823 sOutputPath = sInputPath; 824 } 825 // sOutputFileURL = URLHelper.getFileURLFromSystemPath(sOutputPath + fs + sInputFileBasename); 826 sOutputFileURL = null; 827 828 String sPrintFilename = FileHelper.getNameNoSuffix(sInputFileBasename); 829 String sPrintFileURL; 830 831 String sAbsolutePrintFilename = sOutputPath + fs + sPrintFilename + ".prn"; 832 if (FileHelper.exists(sAbsolutePrintFilename) && _aGTA.getOverwrite() == false) 833 { 834 GlobalLogWriter.get().println("Reference already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); 835 return true; 836 } 837 838 if (_aGTA.getReferenceType().toLowerCase().equals("msoffice")) 839 { 840 sPrintFileURL = URLHelper.getFileURLFromSystemPath(sAbsolutePrintFilename); 841 } 842 else if (_aGTA.getReferenceType().toLowerCase().equals("pdf")) 843 { 844 // TODO: If we rename the stored file to *.pdf, we have to be sure that we use *.pdf also as a available reference 845 sPrintFileURL = URLHelper.getFileURLFromSystemPath(sAbsolutePrintFilename ); 846 } 847 else if (_aGTA.getReferenceType().toLowerCase().equals("ooo")) 848 { 849 sPrintFileURL = URLHelper.getFileURLFromSystemPath(sAbsolutePrintFilename ); 850 } 851 else 852 { 853 GlobalLogWriter.get().println("OfficePrint.buildreference(): Unknown print type."); 854 return false; 855 } 856 return printToFile(_aGTA, sInputFileURL, sOutputFileURL, sPrintFileURL); 857 } 858 printToFile(GraphicalTestArguments _aGTA, String _sInputFileURL, String _sOutputFileURL, String _sPrintFileURL)859 public static boolean printToFile(GraphicalTestArguments _aGTA, 860 String _sInputFileURL, 861 String _sOutputFileURL, 862 String _sPrintFileURL) throws ConvWatchCancelException 863 { 864 boolean bBack = false; 865 String sPrintFileURL = null; 866 867 // check if given file is a picture, then do nothing 868 String sDocumentSuffix = FileHelper.getSuffix(_sInputFileURL); 869 if (sDocumentSuffix.toLowerCase().endsWith(".png") || 870 sDocumentSuffix.toLowerCase().endsWith(".gif") || 871 sDocumentSuffix.toLowerCase().endsWith(".jpg") || 872 sDocumentSuffix.toLowerCase().endsWith(".bmp")) 873 { 874 return false; 875 } 876 877 878 // remember the current timer, to know how long a print process need. 879 // startTimer(); 880 881 if (_aGTA.getReferenceType().toLowerCase().equals("ooo")) 882 { 883 bBack = printToFileWithOOo(_aGTA, _sInputFileURL, _sOutputFileURL, _sPrintFileURL); 884 } 885 else if (_aGTA.getReferenceType().toLowerCase().equals("pdf")) 886 { 887 GlobalLogWriter.get().println("USE PDF AS EXPORT FORMAT."); 888 bBack = storeAsPDF(_aGTA, _sInputFileURL, _sPrintFileURL); 889 } 890 else if (_aGTA.getReferenceType().toLowerCase().equals("msoffice")) 891 { 892 if (MSOfficePrint.isMSOfficeDocumentFormat(_sInputFileURL)) 893 { 894 GlobalLogWriter.get().println("USE MSOFFICE AS EXPORT FORMAT."); 895 MSOfficePrint a = new MSOfficePrint(); 896 try 897 { 898 a.printToFileWithMSOffice(_aGTA, FileHelper.getSystemPathFromFileURL(_sInputFileURL), 899 FileHelper.getSystemPathFromFileURL(_sPrintFileURL)); 900 } 901 catch(ConvWatchCancelException e) 902 { 903 e.printStackTrace(); 904 GlobalLogWriter.get().println(e.getMessage()); 905 throw new ConvWatchCancelException("Exception caught. Problem with MSOffice printer methods."); 906 } 907 catch(java.io.IOException e) 908 { 909 GlobalLogWriter.get().println(e.getMessage()); 910 throw new ConvWatchCancelException("IOException caught. Problem with MSOffice printer methods."); 911 } 912 bBack = true; 913 } 914 else 915 { 916 GlobalLogWriter.get().println("This document type is not recognized as MSOffice format, as default fallback StarOffice/OpenOffice.org instead is used."); 917 bBack = printToFileWithOOo(_aGTA, _sInputFileURL, _sOutputFileURL, _sPrintFileURL); 918 } 919 } 920 else 921 { 922 // System.out.println(""); 923 throw new ConvWatchCancelException("OfficePrint.printToFile(): Unknown print type."); 924 } 925 return bBack; 926 } 927 928 // ----------------------------------------------------------------------------- 929 // TODO: move this away! 930 // ----------------------------------------------------------------------------- showType(String _sInputURL, XMultiServiceFactory _xMSF)931 static void showType(String _sInputURL, XMultiServiceFactory _xMSF) 932 { 933 if (_sInputURL.length() == 0) 934 { 935 return; 936 } 937 938 if (_xMSF == null) 939 { 940 GlobalLogWriter.get().println("MultiServiceFactory not set."); 941 return; 942 } 943 XTypeDetection aTypeDetection = null; 944 try 945 { 946 Object oObj = _xMSF.createInstance("com.sun.star.document.TypeDetection"); 947 aTypeDetection = UnoRuntime.queryInterface(XTypeDetection.class, oObj); 948 } 949 catch(com.sun.star.uno.Exception e) 950 { 951 GlobalLogWriter.get().println("Can't get com.sun.star.document.TypeDetection."); 952 return; 953 } 954 if (aTypeDetection != null) 955 { 956 String sType = aTypeDetection.queryTypeByURL(_sInputURL); 957 GlobalLogWriter.get().println("Type is: " + sType); 958 } 959 } 960 961 962 // ----------------------------------------------------------------------------- getInternalFilterName(String _sFilterName, XMultiServiceFactory _xMSF)963 public static String getInternalFilterName(String _sFilterName, XMultiServiceFactory _xMSF) 964 { 965 if (_sFilterName.length() == 0) 966 { 967 // System.out.println("No FilterName set."); 968 return null; 969 } 970 971 if (_xMSF == null) 972 { 973 GlobalLogWriter.get().println("MultiServiceFactory not set."); 974 return null; 975 } 976 // XFilterFactory aFilterFactory = null; 977 Object aObj = null; 978 try 979 { 980 aObj = _xMSF.createInstance("com.sun.star.document.FilterFactory"); 981 } 982 catch(com.sun.star.uno.Exception e) 983 { 984 GlobalLogWriter.get().println("Can't get com.sun.star.document.FilterFactory."); 985 return null; 986 } 987 if (aObj != null) 988 { 989 XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aObj); 990 if (aNameAccess != null) 991 { 992 993 // if (_sFilterName.toLowerCase().equals("help")) 994 // { 995 // System.out.println("Show all possible ElementNames from current version." ); 996 // String[] aElementNames = aNameAccess.getElementNames(); 997 // for (int i = 0; i<aElementNames.length; i++) 998 // { 999 // System.out.println(aElementNames[i]); 1000 // } 1001 // System.out.println("Must quit."); 1002 // System.out.exit(1); 1003 // } 1004 1005 if (! aNameAccess.hasByName(_sFilterName)) 1006 { 1007 GlobalLogWriter.get().println("FilterFactory.hasByName() says there exist no '" + _sFilterName + "'" ); 1008 return null; 1009 } 1010 1011 Object[] aElements = null; 1012 String[] aExtensions; 1013 try 1014 { 1015 aElements = (Object[]) aNameAccess.getByName(_sFilterName); 1016 if (aElements != null) 1017 { 1018 String sInternalFilterName = null; 1019 // System.out.println("getByName().length: " + String.valueOf(aElements.length)); 1020 for (int i=0;i<aElements.length; i++) 1021 { 1022 PropertyValue aPropertyValue = (PropertyValue)aElements[i]; 1023 // System.out.println("PropertyValue.Name: " + aPropertyValue.Name); 1024 if (aPropertyValue.Name.equals("Type")) 1025 { 1026 String sValue = (String)aPropertyValue.Value; 1027 // System.out.println("Type: " + sValue); 1028 sInternalFilterName = sValue; 1029 } 1030 } 1031 return sInternalFilterName; 1032 } 1033 else 1034 { 1035 GlobalLogWriter.get().println("There are no elements for FilterName '" + _sFilterName + "'"); 1036 return null; 1037 } 1038 } 1039 catch (com.sun.star.container.NoSuchElementException e) 1040 { 1041 GlobalLogWriter.get().println("NoSuchElementException caught. " + e.getMessage()); 1042 } 1043 catch (com.sun.star.lang.WrappedTargetException e) 1044 { 1045 GlobalLogWriter.get().println("WrappedTargetException caught. " + e.getMessage()); 1046 } 1047 } 1048 } 1049 return null; 1050 } 1051 1052 // ----------------------------------------------------------------------------- 1053 getServiceNameFromFilterName(String _sFilterName, XMultiServiceFactory _xMSF)1054 static String getServiceNameFromFilterName(String _sFilterName, XMultiServiceFactory _xMSF) 1055 { 1056 if (_sFilterName.length() == 0) 1057 { 1058 // System.out.println("No FilterName set."); 1059 return null; 1060 } 1061 1062 if (_xMSF == null) 1063 { 1064 GlobalLogWriter.get().println("MultiServiceFactory not set."); 1065 return null; 1066 } 1067 // XFilterFactory aFilterFactory = null; 1068 Object aObj = null; 1069 try 1070 { 1071 aObj = _xMSF.createInstance("com.sun.star.document.FilterFactory"); 1072 } 1073 catch(com.sun.star.uno.Exception e) 1074 { 1075 GlobalLogWriter.get().println("Can't get com.sun.star.document.FilterFactory."); 1076 return null; 1077 } 1078 if (aObj != null) 1079 { 1080 XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aObj); 1081 if (aNameAccess != null) 1082 { 1083 if (! aNameAccess.hasByName(_sFilterName)) 1084 { 1085 GlobalLogWriter.get().println("FilterFactory.hasByName() says there exist no '" + _sFilterName + "'" ); 1086 return null; 1087 } 1088 1089 Object[] aElements = null; 1090 String[] aExtensions; 1091 try 1092 { 1093 aElements = (Object[]) aNameAccess.getByName(_sFilterName); 1094 if (aElements != null) 1095 { 1096 String sServiceName = null; 1097 // System.out.println("getByName().length: " + String.valueOf(aElements.length)); 1098 for (int i=0;i<aElements.length; i++) 1099 { 1100 PropertyValue aPropertyValue = (PropertyValue)aElements[i]; 1101 if (aPropertyValue.Name.equals("DocumentService")) 1102 { 1103 String sValue = (String)aPropertyValue.Value; 1104 // System.out.println("DocumentService: " + sValue); 1105 sServiceName = sValue; 1106 break; 1107 } 1108 } 1109 return sServiceName; 1110 } 1111 else 1112 { 1113 GlobalLogWriter.get().println("There are no elements for FilterName '" + _sFilterName + "'"); 1114 return null; 1115 } 1116 } 1117 catch (com.sun.star.container.NoSuchElementException e) 1118 { 1119 GlobalLogWriter.get().println("NoSuchElementException caught. " + e.getMessage()); 1120 } 1121 catch (com.sun.star.lang.WrappedTargetException e) 1122 { 1123 GlobalLogWriter.get().println("WrappedTargetException caught. " + e.getMessage()); 1124 } 1125 } 1126 } 1127 return null; 1128 } 1129 // ----------------------------------------------------------------------------- 1130 getFileExtension(String _sInternalFilterName, XMultiServiceFactory _xMSF)1131 public static String getFileExtension(String _sInternalFilterName, XMultiServiceFactory _xMSF) 1132 { 1133 if (_sInternalFilterName.length() == 0) 1134 { 1135 // System.out.println("No FilterName set."); 1136 return null; 1137 } 1138 1139 if (_xMSF == null) 1140 { 1141 GlobalLogWriter.get().println("MultiServiceFactory not set."); 1142 return null; 1143 } 1144 XTypeDetection aTypeDetection = null; 1145 try 1146 { 1147 Object oObj = _xMSF.createInstance("com.sun.star.document.TypeDetection"); 1148 aTypeDetection =UnoRuntime.queryInterface(XTypeDetection.class, oObj); 1149 } 1150 catch(com.sun.star.uno.Exception e) 1151 { 1152 GlobalLogWriter.get().println("Can't get com.sun.star.document.TypeDetection."); 1153 return null; 1154 } 1155 if (aTypeDetection != null) 1156 { 1157 XNameAccess aNameAccess = UnoRuntime.queryInterface(XNameAccess.class, aTypeDetection); 1158 if (aNameAccess != null) 1159 { 1160 1161 // System.out.println("Show ElementNames" ); 1162 // String[] aElementNames = aNameAccess.getElementNames(); 1163 // for (int i = 0; i<aElementNames.length; i++) 1164 // { 1165 // System.out.println(aElementNames[i]); 1166 // } 1167 1168 if (! aNameAccess.hasByName(_sInternalFilterName)) 1169 { 1170 GlobalLogWriter.get().println("TypeDetection.hasByName() says there exist no '" + _sInternalFilterName + "'" ); 1171 return null; 1172 } 1173 1174 Object[] aElements = null; 1175 String[] aExtensions; 1176 try 1177 { 1178 aElements = (Object[]) aNameAccess.getByName(_sInternalFilterName); 1179 if (aElements != null) 1180 { 1181 String sExtension = null; 1182 // System.out.println("getByName().length: " + String.valueOf(aElements.length)); 1183 for (int i=0;i<aElements.length; i++) 1184 { 1185 PropertyValue aPropertyValue = (PropertyValue)aElements[i]; 1186 // System.out.println("PropertyValue.Name: " + aPropertyValue.Name); 1187 if (aPropertyValue.Name.equals("Extensions")) 1188 { 1189 aExtensions = (String[])aPropertyValue.Value; 1190 GlobalLogWriter.get().println(" Possible extensions are: " + String.valueOf(aExtensions.length)); 1191 if (aExtensions.length > 0) 1192 { 1193 for (int j=0;j<aExtensions.length;j++) 1194 { 1195 GlobalLogWriter.get().println(" " + aExtensions[j]); 1196 } 1197 sExtension = aExtensions[0]; 1198 GlobalLogWriter.get().println(""); 1199 } 1200 } 1201 } 1202 return sExtension; 1203 } 1204 else 1205 { 1206 GlobalLogWriter.get().println("There are no elements for FilterName '" + _sInternalFilterName + "'"); 1207 return null; 1208 } 1209 } 1210 catch (com.sun.star.container.NoSuchElementException e) 1211 { 1212 GlobalLogWriter.get().println("NoSuchElementException caught. " + e.getMessage()); 1213 } 1214 catch (com.sun.star.lang.WrappedTargetException e) 1215 { 1216 GlobalLogWriter.get().println("WrappedTargetException caught. " + e.getMessage()); 1217 } 1218 } 1219 } 1220 return null; 1221 } 1222 1223 // ----------------------------------------------------------------------------- convertDocument(String _sInputFile, String _sOutputPath, GraphicalTestArguments _aGTA)1224 public static void convertDocument(String _sInputFile, String _sOutputPath, GraphicalTestArguments _aGTA) throws ConvWatchCancelException 1225 { 1226 XMultiServiceFactory xMSF = _aGTA.getMultiServiceFactory(); 1227 if (xMSF == null) 1228 { 1229 GlobalLogWriter.get().println("MultiServiceFactory in GraphicalTestArgument not set."); 1230 return; 1231 } 1232 1233 String sInputURL = URLHelper.getFileURLFromSystemPath(_sInputFile); 1234 // showType(sInputURL, xMSF); 1235 XComponent aDoc = loadFromURL( _aGTA, sInputURL); 1236 if (aDoc == null) 1237 { 1238 GlobalLogWriter.get().println("Can't load document '"+ sInputURL + "'"); 1239 return; 1240 } 1241 1242 if (_sOutputPath == null) 1243 { 1244 GlobalLogWriter.get().println("Outputpath not set."); 1245 return; 1246 } 1247 1248 if (! _aGTA.isStoreAllowed()) 1249 { 1250 GlobalLogWriter.get().println("It's not allowed to store, check Input/Output path."); 1251 return; 1252 } 1253 // TODO: Do we need to wait? 1254 TimeHelper.waitInSeconds(1, "wait after loadFromURL."); 1255 1256 XServiceInfo xServiceInfo = UnoRuntime.queryInterface( XServiceInfo.class, aDoc ); 1257 // String sFilter = getFilterName_forExcel(xServiceInfo); 1258 // System.out.println("Filter is " + sFilter); 1259 1260 // store the document in an other directory 1261 XStorable xStorable = UnoRuntime.queryInterface( XStorable.class, aDoc); 1262 if (xStorable == null) 1263 { 1264 GlobalLogWriter.get().println("com.sun.star.frame.XStorable is null"); 1265 return; 1266 } 1267 1268 String sFilterName = _aGTA.getExportFilterName(); 1269 1270 // check how many Properties should initialize 1271 int nPropertyCount = 0; 1272 // if (sFilterName != null && sFilterName.length() > 0) 1273 // { 1274 // nPropertyCount ++; 1275 // } 1276 1277 // initialize PropertyArray 1278 // PropertyValue [] aStoreProps = new PropertyValue[ nPropertyCount ]; 1279 // int nPropertyIndex = 0; 1280 ArrayList<PropertyValue> aPropertyList = new ArrayList<PropertyValue>(); 1281 1282 String sExtension = ""; 1283 1284 if (sFilterName != null && sFilterName.length() > 0) 1285 { 1286 String sInternalFilterName = getInternalFilterName(sFilterName, xMSF); 1287 String sServiceName = getServiceNameFromFilterName(sFilterName, xMSF); 1288 1289 GlobalLogWriter.get().println("Filter detection:"); 1290 // check if service name from file filter is the same as from the loaded document 1291 boolean bServiceFailed = false; 1292 if (sServiceName == null || sInternalFilterName == null) 1293 { 1294 GlobalLogWriter.get().println("Given FilterName '" + sFilterName + "' seems to be unknown."); 1295 bServiceFailed = true; 1296 } 1297 if (! xServiceInfo.supportsService(sServiceName)) 1298 { 1299 GlobalLogWriter.get().println("Service from FilterName '" + sServiceName + "' is not supported by loaded document."); 1300 bServiceFailed = true; 1301 } 1302 if (bServiceFailed == true) 1303 { 1304 GlobalLogWriter.get().println("Please check '" + PropertyName.DOC_CONVERTER_EXPORT_FILTER_NAME + "' in the property file."); 1305 return; 1306 } 1307 1308 if (sInternalFilterName != null && sInternalFilterName.length() > 0) 1309 { 1310 // get the FileExtension, by the filter name, if we don't get a file extension 1311 // we assume the is also no right filter name. 1312 sExtension = getFileExtension(sInternalFilterName, xMSF); 1313 if (sExtension == null) 1314 { 1315 GlobalLogWriter.get().println("Can't found an extension for filtername, take it from the source."); 1316 } 1317 } 1318 1319 PropertyValue Arg = new PropertyValue(); 1320 Arg.Name = "FilterName"; 1321 Arg.Value = sFilterName; 1322 // aStoreProps[nPropertyIndex ++] = Arg; 1323 aPropertyList.add(Arg); 1324 showProperty(Arg); 1325 GlobalLogWriter.get().println("FilterName is set to: " + sFilterName); 1326 } 1327 1328 String sOutputURL = ""; 1329 try 1330 { 1331 // create the new filename with the extension, which is ok to the file format 1332 String sInputFileBasename = FileHelper.getBasename(_sInputFile); 1333 // System.out.println("InputFileBasename " + sInputFileBasename); 1334 String sInputFileNameNoSuffix = FileHelper.getNameNoSuffix(sInputFileBasename); 1335 // System.out.println("InputFilename no suffix " + sInputFileNameNoSuffix); 1336 String fs = System.getProperty("file.separator"); 1337 String sOutputFile = _sOutputPath; 1338 if (! sOutputFile.endsWith(fs)) 1339 { 1340 sOutputFile += fs; 1341 } 1342 if (sExtension != null && sExtension.length() > 0) 1343 { 1344 sOutputFile += sInputFileNameNoSuffix + "." + sExtension; 1345 } 1346 else 1347 { 1348 sOutputFile += sInputFileBasename; 1349 } 1350 1351 if (FileHelper.exists(sOutputFile) && _aGTA.getOverwrite() == false) 1352 { 1353 GlobalLogWriter.get().println("File already exist, don't overwrite. Set " + PropertyName.DOC_COMPARATOR_OVERWRITE_REFERENCE + "=true to force overwrite."); 1354 return; 1355 } 1356 1357 sOutputURL = URLHelper.getFileURLFromSystemPath(sOutputFile); 1358 1359 GlobalLogWriter.get().println("Store document as '" + sOutputURL + "'"); 1360 xStorable.storeAsURL(sOutputURL, PropertyHelper.createPropertyValueArrayFormArrayList(aPropertyList)); 1361 GlobalLogWriter.get().println("Document stored."); 1362 } 1363 catch (com.sun.star.io.IOException e) 1364 { 1365 GlobalLogWriter.get().println("Can't store document '" + sOutputURL + "'. Message is :'" + e.getMessage() + "'"); 1366 } 1367 // TODO: Do we need to wait? 1368 TimeHelper.waitInSeconds(1, "unknown in OfficePrint.convertDocument()"); 1369 1370 } 1371 1372 } 1373 1374