<< 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.
Starting with v397 there is an alternative way to define palaceholders:
<pd4ml:include dynvalue="var"> and <pd4ml:include dynblock="var">.
In simple cases <pd4ml:include dynvalue="var"> is identical to $[var],
but it also allows to pass HTML code via the dynamic values logic. When
dynblock attribute is used, the dynamically passed HTML is rendered as a
block element in an isolated context.
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://old.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." );
}
}
|