Water mark in PDF export

Creating a macro - Writing a Script - Using the API (OpenOffice Basic, Python, BeanShell, JavaScript)
Post Reply
mnuthan
Posts: 4
Joined: Wed Feb 13, 2008 1:39 am

Water mark in PDF export

Post 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
User avatar
squenson
Volunteer
Posts: 1885
Joined: Wed Jan 30, 2008 9:21 pm
Location: Lausanne, Switzerland

Re: water mark in PDF export

Post 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.
LibreOffice 4.2.3.3. on Ubuntu 14.04
mnuthan
Posts: 4
Joined: Wed Feb 13, 2008 1:39 am

Re: water mark in PDF export

Post 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. 
hol.sten
Volunteer
Posts: 495
Joined: Mon Oct 08, 2007 1:31 am
Location: Hamburg, Germany

Re: water mark in PDF export

Post 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
OOo 3.2.0 on Ubuntu 10.04 • OOo 3.2.1 on Windows 7 64-bit and MS Windows XP
mnuthan
Posts: 4
Joined: Wed Feb 13, 2008 1:39 am

Re: water mark in PDF export

Post 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.
hol.sten
Volunteer
Posts: 495
Joined: Mon Oct 08, 2007 1:31 am
Location: Hamburg, Germany

Re: water mark in PDF export

Post 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
OOo 3.2.0 on Ubuntu 10.04 • OOo 3.2.1 on Windows 7 64-bit and MS Windows XP
bprateek28
Posts: 2
Joined: Fri May 06, 2016 3:05 pm

Re: water mark in PDF export

Post 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.
OpenOffice 4.1.0 on Windows 7
Post Reply