|
||||
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=' + form.quoteNumber.value; 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;
try
{
Session session = getSession();
AgentContext agentContext =
session.getAgentContext();
lnDB = agentContext.getCurrentDatabase();
doc = agentContext.getDocumentContext( );
dbDump = session.getDatabase
(lnDB.getServer(), "Sales\qaSPDump.nsf");
//Parse URL from web form
strURLValue =
doc.getItemValueString("Query_String_Decoded");
Hashtable ht =
parseQueryString(strURLValue);
strGetQuoteNumber =
(String) ht.get( "pQuoteNumber" );
//Get Hook on Doc
View lnView = lnDB.getView
("wLKQuoteNumber");
lnDoc = lnView.getDocumentByKey
(strGetQuoteNumber, false);
lnDoc.copyToDatabase(dbDump);
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)
{
e.printStackTrace();
}
}
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.
equalsIgnoreCase("OpenAgent"))
{
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
java.io.FileOutputStream(outputPDFFile);
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(20, 10, 10, 10));
pd4ml.setHtmlWidth(950);
//pd4ml.setPageSize(pd4ml.changePage
Orientation(format));
pd4ml.setPageSize(format);
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.enableDebugInfo();
//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