HTML to PDF / DOCX / RTF Java converter library › Forums › PD4ML v3 Archived Forums (Read Only) › PD4ML Tips & Tricks › How to render multiple Notes Documents to single PDF output? › Re: Re: How to render multiple Notes Documents to single PDF output?
I would implement the multi-doc converter this way (replace the correspondingreference agent http://pd4ml.com/i/PdfAgentR7.java methods with the following):
[language=java:9u9s00sk]public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
System.out.println(“AGENT start.”);
Database db = agentContext.getCurrentDatabase();
String xsl = null;
if (readXslFromJar) {
xsl = getXsl();
} else {
DocumentCollection dcx =
db.search(“@Contains(Form; “” + xslDocumentFormName + “”)”);
Document xsldoc = dcx.getFirstDocument();
if (xsldoc != null) {
xsl = xsldoc.getItemValueString(xslDocumentFieldName);
} else {
throw new IOException( “Can not find ” + xslName);
}
}
// System.out.println(“XSL: ” + xsl);
// collect selected documents
DocumentCollection dc = agentContext.getUnprocessedDocuments();
URL[] urls = new URL[dc.getCount()];
int ind = 0;
Document doc = dc.getFirstDocument();
while (doc != null) {
Document tmp = db.createDocument();
RichTextItem rti = tmp.createRichTextItem(“PD4MLBody”);
doc.renderToRTItem(rti);
DxlExporter dxl = session.createDxlExporter();
dxl.setConvertNotesBitmapsToGIF(true);
dxl.setOutputDOCTYPE(false);
String xml = dxl.exportDxl(tmp);
String xml = getTestDxl();
System.out.println(“DXL FORM: ” + xml);
System.out.println(“TRANS: ” + System.getProperty(“java.version”));
System.out.println(“TRANS: ” + System.getProperty(“java.vm.version”));
System.out.println(“TRANS: ” + System.getProperty(“java.vm.vendor”));
System.out.println(“TRANS: ” + System.getProperty(“java.vm.name”));
long start = System.currentTimeMillis();
String html = transformXML(xml, xsl);
long middle = System.currentTimeMillis();
System.out.println(“XSL transformation: ” + (middle-start) + “ms”);
System.out.println(“HTML: ” + html);
File htmlFile = File.createTempFile(“pd4dxl”, “.html”);
java.io.FileOutputStream fos = new java.io.FileOutputStream( htmlFile );
fos.write( html.getBytes() );
urls[ind++] = htmlFile.toURL();
doc = dc.getNextDocument();
}
File pdf = File.createTempFile(“pd4ml”, “.pdf”);
java.io.FileOutputStream fos = new java.io.FileOutputStream(pdf);
generatePDF( urls,
fos,
PD4Constants.A4,
“java:/fonts”,
“DXL to PDF convesion result.” +
” $[page] of $[total]“);
System.out.println(“PDF file ” + pdf.toURL() + ” is generated” );
System.out.println(“AGENT done.”);
} catch (SAXException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
public static final void generatePDF(URL[] urls, OutputStream fos,
Dimension format, String fontsDir, String footerBody)
throws Exception {
PD4ML pd4ml = new PD4ML();
pd4ml.setPageInsets(new Insets(20, 10, 10, 10));
pd4ml.setHtmlWidth(1000);
pd4ml.setPageSize(format);
if (fontsDir != null && fontsDir.length() > 0) {
pd4ml.useTTF(fontsDir, true);
}
if (footerBody != null && footerBody.length() > 0) {
PD4PageMark footer = new PD4PageMark();
footer.setAreaHeight(-1);
footer.setHtmlTemplate(footerBody);
pd4ml.setPageFooter(footer);
}
pd4ml.render( urls, fos);
fos.flush();
fos.close();
}[/language:9u9s00sk]
The code is schematic and needs to be optimized.
After the resulting PDF is stored/sent/etc, the TEMP directory needs to be cleaned up. So it makes sence to register object references, created by the calls
File htmlFile = File.createTempFile(“pd4dxl”, “.html”);
File pdf = File.createTempFile(“pd4ml”, “.pdf”);
and to remove them later, close to the agent code end.