<< back
PD4ML: Substitution of placeholders with dynamic values.HTML is a quite simple file format and normally there is no big problem to generate entire dynamic HTML document on-a-fly: either completely from scratch or by populating of a template. However there are situations, when a passing of HTML template plus a list of dynamic values directly to PD4ML is more preferrable. For example in a case you use PD4Cmd (command-line wrapper tool). PD4ML defines a placeholder format like the following: $[var], where var is a variable name. A map with varname->value pairs is passed to PD4ML with pd4ml.setDynamicParams() API call. Pd4Cmd accepts the pairs in -param <name> <value> form. There are 3 built-in placeholders: $[page], $[total] and $[title] used in headers/footers. Their names are reserved. Unfortunately you cannot use the built-in placeholders in the document body, as page numbering info and the total page number is known only at the very final stages of conversion process.
package samples; import java.awt.Color; import java.awt.Insets; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.security.InvalidParameterException; import java.util.HashMap; import java.util.Map; import org.zefer.pd4ml.PD4Constants; import org.zefer.pd4ml.PD4ML; import org.zefer.pd4ml.PD4PageMark; public class DynamicValues { protected int topValue = 10; protected int leftValue = 20; protected int rightValue = 10; protected int bottomValue = 10; protected int userSpaceWidth = 1300; public static void main(String[] args) { try { DynamicValues jt = new DynamicValues(); jt.doConversion("http://pd4ml.com/dynsample.htm", "c:/pd4ml.pdf"); } catch (Exception e) { e.printStackTrace(); } } public void doConversion( String url, String outputPath ) throws InvalidParameterException, MalformedURLException, IOException { File output = new File(outputPath); java.io.FileOutputStream fos = new java.io.FileOutputStream(output); PD4ML pd4ml = new PD4ML(); pd4ml.setHtmlWidth(userSpaceWidth); pd4ml.setPageSize(pd4ml.changePageOrientation(PD4Constants.A4)); pd4ml.setPageInsetsMM(new Insets(topValue, leftValue, bottomValue, rightValue)); pd4ml.useTTF("c:/windows/fonts", true); PD4PageMark footer = new PD4PageMark(); footer.setPageNumberTemplate("page $[page] of $[total]"); footer.setTitleTemplate("Title: $[title]"); footer.setTitleAlignment(PD4PageMark.LEFT_ALIGN); footer.setPageNumberAlignment(PD4PageMark.RIGHT_ALIGN); footer.setColor(new Color(0x008000)); footer.setFontSize(14); footer.setAreaHeight(18); pd4ml.setPageFooter(footer); Map m = new HashMap(); m.put("product", "DJVU to PDF eBook Converter"); m.put("price", "$9.99"); pd4ml.setDynamicParams( m ); pd4ml.render(new URL(url), fos); fos.close(); System.out.println( outputPath + "\ndone." ); } } |