Manage Learn to apply best practices and optimize your operations.

Converting Lotus Notes Domino Web pages to PDF files with a Java agent Hall of Famer Michael Marcavage explains how to create a Java agent that lets Lotus Notes Domino users convert Web pages to PDF documents with the push of a Web form button.

Want to provide your Lotus Notes Domino users with the ability to convert Web pages to PDF documents on the fly? Place the code below into a Java agent.

More related information from
Creating Microsoft Word documents from Lotus Notes

Creating PDF documents from Lotus Notes

Converting Web pages to images using Java

Java for Lotus Notes and Domino advice

Java Reference Center

Called via a JavaScript button on a Web form, this agent parses the URL used to call the agent and returns the key that it is looking for. It then copies the document to a Lotus Notes Domino database that is wide open and calls the document via a URL. Finally, it converts it to a PDF file.

You will need to create a shareable Web folder so that the PDF file has somewhere to land. From there, you just need to call the PDF document to present it to the Lotus Notes user.

You also need to buy a Jar file from and add it to your Java agent to make this work.

There may be better methods to accomplish this task, but this is a quick-and-dirty technique I successfully implemented in a rush situation.

Here is the code that resides in the Javascript Button:

var getDBPath = "/" + form.DBPath.value; 
var varURL = getDBPath + '/webCreatePDF?
OpenAgent&pQuoteNumber=' + 
form.quoteNumber.value;, '_blank', "menubar=yes,
width=900,height=600, scrollbars=yes,
resizable=yes, top=4, left=4");

Here is the code for the Java agent:

import lotus.domino.*;
import java.awt.Dimension;
import java.awt.Insets;
import java.util.*;

import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;
import org.zefer.pd4ml.PD4PageMark;

public class JavaAgent extends AgentBase 
 public void NotesMain() 
          lotus.domino.Database lnDB = null;
          lotus.domino.Document lnDoc = null;
          Document doc = null;
          Database dbDump = null;
          String strURLValue = null;
          String strGetQuoteNumber = null;

Session session = getSession();
AgentContext agentContext = 
lnDB = agentContext.getCurrentDatabase();
doc = agentContext.getDocumentContext( );
dbDump = session.getDatabase
(lnDB.getServer(), "Sales\qaSPDump.nsf");
//Parse URL from web form
                 strURLValue = 
                 Hashtable ht = 
                 strGetQuoteNumber = 
(String) ht.get( "pQuoteNumber" );

//Get Hook on Doc
                 View lnView = lnDB.getView
                 lnDoc = lnView.getDocumentByKey
(strGetQuoteNumber, false);

                 String htmlFileName = 
"http://<Your Domain>/Sales/qaSPDump.nsf/wPDF/" 
+ strGetQuoteNumber + "?OpenDocument";
File pdfFile = new File("<server name or 
IP>\Temp\" + strGetQuoteNumber + ".pdf");
 Converter converter = new Converter();
converter.generatePDF(htmlFileName, pdfFile, 
PD4Constants.A4, null, null);

               } catch(Exception e) 

public static Hashtable 
parseQueryString(String queryString) {
  StringTokenizer tokens = 
new StringTokenizer(queryString, "&");
  Hashtable params = new Hashtable();

  while (tokens.hasMoreTokens()) 
               String token = tokens.nextToken();
               int equalIdx = token.indexOf('=');
               if (equalIdx != -1 && !token.
                    String name = token.
substring(0, equalIdx);
                    String value = token.
substring(equalIdx + 1);
                    params.put(name, value);
return params;


//Converter Class
import java.awt.Dimension;
import java.awt.Insets;

import org.zefer.pd4ml.PD4Constants;
import org.zefer.pd4ml.PD4ML;
import org.zefer.pd4ml.PD4PageMark;

public class Converter
public void generatePDF(String inputHTMLFileName, 
File outputPDFFile, Dimension format, 
String fontsDir, String headerBody) throws Exception 
    { fos = new;
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(20, 10, 10, 10));

if (fontsDir != null && fontsDir.length() > 0)
pd4ml.useTTF( fontsDir, true );
if (headerBody != null && 
headerBody.length() > 0 )
PD4PageMark header = new PD4PageMark();
header.setAreaHeight( -1 ); 
header.setHtmlTemplate( headerBody );
pd4ml.setPageHeader( header );
//pd4ml.render("file:" + inputHTMLFileName, fos);
          pd4ml.render("url:" + inputHTMLFileName, fos);

Do you have comments on this tip? Let us know.

This tip was submitted to the tip library by member Michael Marcavage. Please let others know how useful it is via the rating scale below. Do you have a useful Lotus Notes, Domino, Workplace or WebSphere tip or code snippet to share? Submit it to our monthly tip contest and you could win a prize.

Dig Deeper on Java for Lotus Notes Domino

  • Favorite iSeries cheat sheets

    Here you'll find a collection of valuable cheat sheets gathered from across the iSeries/ community. These cheat ...