Converting Lotus Notes Domino Web pages to PDF files with a Java agent

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 SearchDomino.com:
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 http://pd4ml.com/ 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=' + 

window.open(varURL, '_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.io.File;
import java.io.*;
import java.net.*;
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 java.io.File;

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 
java.io.FileOutputStream 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 SearchDomino.com 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.

This was first published in August 2007

There are Comments. Add yours.

TIP: Want to include a code block in your comment? Use <pre> or <code> tags around the desired text. Ex: <code>insert code</code>

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
Sort by: OldestNewest

Forgot Password?

No problem! Submit your e-mail address below. We'll send you an email containing your password.

Your password has been sent to:

Disclaimer: Our Tips Exchange is a forum for you to share technical advice and expertise with your peers and to learn from other enterprise IT professionals. TechTarget provides the infrastructure to facilitate this sharing of information. However, we cannot guarantee the accuracy or validity of the material submitted. You agree that your use of the Ask The Expert services and your reliance on any questions, answers, information or other materials received through this Web site is at your own risk.