Page 1 of 1

Water mark in PDF export

Posted: Wed Feb 13, 2008 1:45 am
by mnuthan
Hi,
I am UNO objects in Java to convert doc file into PDF and its working fine. I wanted to add watermark and header/footer to the PDF file. Can some one please tell me what filteroptions will add watermark and header/footer in PDF file

Re: water mark in PDF export

Posted: Wed Feb 13, 2008 7:02 am
by squenson
mnuthan,

Can you post your code? It may be interesting to see how you have done it, and then we can enhance your solution further.

Re: water mark in PDF export

Posted: Wed Feb 13, 2008 4:32 pm
by mnuthan
here is the code ..

Code: Select all

import com.sun.star.bridge.XUnoUrlResolver; 
import com.sun.star.lang.XMultiServiceFactory; 
import com.sun.star.lang.XComponent; 
import com.sun.star.lang.XMultiComponentFactory; 
import com.sun.star.uno.XComponentContext; 
import com.sun.star.uno.UnoRuntime; 
import com.sun.star.frame.XComponentLoader; 
import com.sun.star.frame.XStorable; 
import com.sun.star.beans.PropertyValue; 
import com.sun.star.beans.XPropertySet; 

import java.io.File; 
import java.io.FileFilter; 
import java.io.FilenameFilter; 


/** The class <CODE>DocumentConverter</CODE> allows you to convert all documents in 
 * a given directory and in its subdirectories to a given type. A converted 
 * document will be created in the same directory as the origin document. 
 * 
 */ 
public class PDFConverter { 
	/** Containing the loaded documents 
	*/ 
	static XComponentLoader xcomponentloader = null; 
	/** Containing the given type to convert to 
	*/ 
	//  static String stringConvertType = "PDF - Portable Document Format"; 
	static String stringConvertType = "writer_pdf_Export"; 
	// stringConvertType = "MS Word 97"; 

	/** Containing the given extension 
	*/ 
	static String stringExtension = "pdf"; 
	 
	/** folder path  
	*/ 
	static String stringFolderPath = "C:\\conversion\\sample"; 

	/** source file extension 
	*/ 
	static String stringSourceExtension = "doc"; 

	/** Server IP address 
	*/ 
	static String stringHost = "IPaddress"; 

	/** Server port number 
	*/ 
	static String stringPort = "9999"; 

	/** Traversing the given directory recursively and converting their files to the 
	* favoured type if possible 
	* @param fileDirectory Containing the directory 
	*/ 
	static void traverse( File fileDirectory ) {
		// Testing, if the file is a directory, and if so, it throws an exception 
		if ( !fileDirectory.isDirectory() ) { 
			throw new IllegalArgumentException("not a directory: " + fileDirectory.getName()); 
		} 
   
		// Getting all files and directories in the current directory 
		File[] entries = fileDirectory.listFiles( 
			new FileFilter() {
				public boolean accept( File pathname ) { 
					return pathname.getName().endsWith(stringSourceExtension); 
				} 
			} 
		); 
    
		// Iterating for each file and directory 
		for ( int i = 0; i < entries.length; ++i ) { 
			 // Testing, if the entry in the list is a directory 
			if ( entries[ i ].isDirectory() ) { 
				// Recursive call for the new directory 
				traverse( entries[ i ] ); 
			} else { 
				 // Converting the document to the favoured type 
				try { 
					  // Composing the URL by replacing all backslashs 
					  String stringUrl = "file:///" + entries[ i ].getAbsolutePath().replace( '\\', '/' ); 
					//  System.out.println(entries[i] + ":" + stringUrl); 
					  // Loading the wanted document 
					  Object objectDocumentToStore = 
					  PDFConverter.xcomponentloader.loadComponentFromURL( 
					  stringUrl, "_blank", 0, new PropertyValue[0] ); 
					  
					  // Getting an object that will offer a simple way to store a document to a URL. 
					  XStorable xstorable = 
					  ( XStorable ) UnoRuntime.queryInterface( XStorable.class, 
					  objectDocumentToStore ); 
					  
					  // Preparing properties for converting the document 
					  PropertyValue propertyvalue[] = new PropertyValue[ 2 ]; 
					  // Setting the flag for overwriting 
					  propertyvalue[ 0 ] = new PropertyValue(); 
					  propertyvalue[ 0 ].Name = "FilterName"; 
					  propertyvalue[0].Value = stringConvertType; 
							  
					  //new modification here 
					  propertyvalue[1] = new PropertyValue(); 
					  propertyvalue[1].Name = "CompressionMode"; 
					  propertyvalue[1].Value = "1"; 

					  //new modification here 
					//  propertyvalue[1] = new PropertyValue(); 
					 // propertyvalue[1].Name = "Watermark"; 
					  //propertyvalue[1].Value = "test-water"; 
			  
					  // Appending the favoured extension to the origin document name 
					  int index = stringUrl.lastIndexOf("."); 
					  stringUrl = stringUrl.substring(0, index + 1) + PDFConverter.stringExtension; 
					  
					  // Storing and converting the document 
					  xstorable.storeToURL( stringUrl, propertyvalue ); 
					  // Getting the method dispose() for closing the document 
					  XComponent xcomponent = 
					  ( XComponent ) UnoRuntime.queryInterface( XComponent.class, 
					  xstorable ); 
					 
					  // Closing the converted document 
					  xcomponent.dispose(); 
				} 
				catch( Exception exception ) {
					System.out.println("Exception:"+exception.getMessage());
					//exception.printStackTrace(); 
				} 
        } 
    } 
   // indent = indent.substring(2); 
  } 
  
  /** Connecting to the office with the component UnoUrlResolver and calling the 
   * static method traverse 
   * @param args The array of the type String contains the directory, in which all files should be 
   * converted, the favoured converting type and the wanted extension 
   */ 
  public static void main( String args[] ) { 
    try { 
      
      /* Bootstraps a component context with the jurt base components 
         registered. Component context to be granted to a component for running. 
         Arbitrary values can be retrieved from the context. */ 
      XComponentContext xComponentContext = 
      com.sun.star.comp.helper.Bootstrap.createInitialComponentContext( null ); 
      
      /* Gets the service manager instance to be used (or null). This method has 
         been added for convenience, because the service manager is a often used 
         object. */ 
      XMultiComponentFactory xMultiComponentFactory = 
      xComponentContext.getServiceManager(); 
            
      /* Creates an instance of the component UnoUrlResolver which 
         supports the services specified by the factory. */ 
      Object objectUrlResolver = xMultiComponentFactory.createInstanceWithContext( 
      "com.sun.star.bridge.UnoUrlResolver", xComponentContext ); 
      
      // Create a new url resolver 
      XUnoUrlResolver xurlresolver = ( XUnoUrlResolver ) 
      UnoRuntime.queryInterface( XUnoUrlResolver.class, 
      objectUrlResolver ); 
      
      // Resolves an object that is specified as follow: 
      // uno:<connection description>;<protocol description>;<initial object name> 
      Object objectInitial = xurlresolver.resolve( "uno:socket,host="+stringHost+",port="+stringPort+";urp;StarOffice.ServiceManager" ); 
      
      // Create a service manager from the initial object 
      xMultiComponentFactory = ( XMultiComponentFactory ) 
      UnoRuntime.queryInterface( XMultiComponentFactory.class, objectInitial ); 
      
      // Query for the XPropertySet interface. 
      XPropertySet xpropertysetMultiComponentFactory = ( XPropertySet ) 
      UnoRuntime.queryInterface( XPropertySet.class, xMultiComponentFactory ); 
      
      // Get the default context from the office server. 
      Object objectDefaultContext = 
      xpropertysetMultiComponentFactory.getPropertyValue("DefaultContext" ); 
      
      // Query for the interface XComponentContext. 
      xComponentContext = ( XComponentContext ) UnoRuntime.queryInterface( 
      XComponentContext.class, objectDefaultContext ); 
      
      /* A desktop environment contains tasks with one or more 
         frames in which components can be loaded. Desktop is the 
         environment for components which can instanciate within 
         frames. */ 
      xcomponentloader = ( XComponentLoader ) 
      UnoRuntime.queryInterface( XComponentLoader.class, 
      xMultiComponentFactory.createInstanceWithContext( 
      "com.sun.star.frame.Desktop", xComponentContext ) ); 
      
      // Getting the given starting directory 
      File file = new File(stringFolderPath); 
      
      // Starting the conversion of documents in the given directory and subdirectories 
	   traverse( file ); 
	   System.exit(0); 
    } 
    catch( Exception e ) { 
		System.out.println(" in the main catch");
      e.printStackTrace(); 
    } 
  } 
} 
I am not sure how to use watermark property ,
 Edit: Hagar: added the BBCode tags for the code for a better readability. 

Re: water mark in PDF export

Posted: Thu Feb 14, 2008 8:37 pm
by hol.sten
mnuthan wrote:I wanted to add watermark and header/footer to the PDF file. Can some one please tell me what filteroptions will add watermark and header/footer in PDF file
As far as I know, it is not possible to do this by adding some PDF filter settings. What you can do is after loading the .doc file add a watermark and a header and footer to the document and export that file as a PDF. You can find more on working with text documents in the OOo Developer's Guide: http://api.openoffice.org/docs/Develope ... _Documents

Re: water mark in PDF export

Posted: Thu Feb 14, 2008 9:34 pm
by mnuthan
Hi ,
Thanks for your reply, I have checked documentation and it seems there is no direct way to add watermark to a document. Can you please give example code to add watermark to document.

Re: water mark in PDF export

Posted: Thu Feb 14, 2008 10:52 pm
by hol.sten
mnuthan wrote:Can you please give example code to add watermark to document.
No, because I have none. But I can tell you, that you can add a watermark to a document by setting a background graphic for the PageStyle (com.sun.star.style.PageStyle, com.sun.star.style.PageProperties => BackGraphicURL) of the document: http://api.openoffice.org/docs/Develope ... age_Layout

Re: water mark in PDF export

Posted: Fri May 06, 2016 3:46 pm
by bprateek28
You can add watermark using the following property

Code: Select all

PropertyValue[] filterProps = (PropertyValue[]) java.lang.reflect.Array.newInstance(PropertyValue.class, 1);
  filterProps[0] = new PropertyValue(); 
  filterProps[0].Name = "Watermark"; 
  filterProps[0].Value = "kota"; 

  //set up an array of PropertyValue objects used to save the document
  PropertyValue[] storeProps = new PropertyValue[3];
  storeProps[0] = new PropertyValue();
  storeProps[0].Name = "FilterName";
  storeProps[0].Value = "writer_pdf_Export";
  storeProps[1] = new PropertyValue();
  storeProps[1].Name = "Overwrite ";
  storeProps[1].Value = true;
  storeProps[2] = new PropertyValue();
  storeProps[2].Name = "FilterData";
  storeProps[2].Value = filterProps;
  xStorable.storeToURL(storeUrl, storeProps);
I have been able to come this far, haven't been able to handle the position on orientation of it.

Thanks,
Prateek.