fonts/retain_font
Performance benefits of keeping a font open across multiple documents.
Download Java Code Switch to PHP Code Show Output
/*
* Retain fonts:
* Demonstrate performance benefits of keeping a font open across multiple
* documents.
*
* Required software: PDFlib/PDFlib+PDI/PPS 10
* Required data: Fallback font
*/
package com.pdflib.cookbook.pdflib.fonts;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Locale;
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class retain_font {
/**
* Name of the font to load.
*/
private static final String FONTNAME = "NotoSerif-Regular";
/**
* Number of documents to generate.
*/
final static int N_DOCS = 100;
/**
* This is where the data files are. Adjust as necessary.
*/
final static String SEARCH_PATH = "../input";
/**
* Page width
*/
final static double WIDTH = 595;
/**
* Page height
*/
final static double HEIGHT = 842;
/**
* Method that creates N_DOCS documents in memory.
*
* @param keepfont
* if true, retain font across all generated documents, otherwise
* load it again for each document
*/
static void make_test_docs(boolean keepfont) {
pdflib p = null;
try {
int font = -1;
p = new pdflib();
p.set_option("searchpath={" + SEARCH_PATH + "}");
/*
* Load a font
*/
if (keepfont) {
/*
* keepfont=true is default here, so it does not need to be
* specified explicitly.
*/
font = p.load_font(FONTNAME, "unicode", "keepfont=true");
if (font == -1)
throw new Exception("Error: " + p.get_apiname() + ": "
+ p.get_errmsg());
}
for (int i = 0; i < N_DOCS; i += 1) {
/*
* Create a simple document that makes use of the font. The
* document is generated in memory and immediately discarded.
*/
if (p.begin_document("", "") == -1)
throw new Exception("Error: " + p.get_apiname() + ": "
+ p.get_errmsg());
p.set_info("Creator", "PDFlib Cookbook");
p.set_info("Title", "Dummy test document");
p.begin_page_ext(WIDTH, HEIGHT, "");
if (!keepfont) {
/*
* keepfont=false is default here.
*/
font = p.load_font(FONTNAME, "unicode", "keepfont=false");
if (font == -1)
throw new Exception("Error: " + p.get_apiname() + ": "
+ p.get_errmsg());
}
p.fit_textline("Hello world!", 50, 700,
"font=" + font + " fontsize=24");
p.end_page_ext("");
p.end_document("");
}
}
catch (PDFlibException e) {
System.err.println("PDFlib exception occurred:");
System.err.println("[" + e.get_errnum() + "] " + e.get_apiname()
+ ": " + e.get_errmsg());
}
catch (Exception e) {
System.err.println(e);
}
finally {
if (p != null) {
p.delete();
}
}
}
public static void main(String argv[]) {
final String outfile = "retain_font.pdf";
final String title = "Retain Fonts";
final NumberFormat form = NumberFormat.getInstance(Locale.US);
form.setMaximumFractionDigits(2);
form.setMinimumFractionDigits(0);
pdflib p = null;
int exitcode = 0;
/*
* Time creation of test documents with and without retaining of font.
*/
long start_date1 = new Date().getTime();
make_test_docs(false);
String time_diff1 =
form.format((new Date().getTime() - start_date1) / 1000.0);
long start_date2 = new Date().getTime();
make_test_docs(true);
String time_diff2 =
form.format((new Date().getTime() - start_date2) / 1000.0);
try {
p = new pdflib();
p.set_option("searchpath={" + SEARCH_PATH + "}");
/* This means we must check return values of load_font() etc. */
p.set_option("errorpolicy=return");
if (p.begin_document(outfile, "") == -1)
throw new Exception("Error: " + p.get_apiname() + ": "
+ p.get_errmsg());
p.set_info("Creator", "PDFlib Cookbook");
p.set_info("Title", title);
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
int tf = -1;
tf = p.add_textflow(tf,
"Performance benefit of retaining a font across documents:\n\n",
"fontname=NotoSerif-Regular fontsize=18");
tf = p.add_textflow(tf, "Time spent for creating " + N_DOCS
+ " documents without retaining font:\n", "fontsize=16");
tf = p.add_textflow(tf, time_diff1 + " seconds\n\n", "");
tf = p.add_textflow(tf, "Time spent for creating " + N_DOCS
+ " documents while retaining font:\n", "");
tf = p.add_textflow(tf, time_diff2 + " seconds\n\n", "");
tf = p.add_textflow(tf,
"Note: Actual results will vary depending on various factors,\n" +
"including font, complexity of the document and platform.", "");
p.fit_textflow(tf, 50, 50, 545, 716, "");
p.end_page_ext("");
p.end_document("");
}
catch (PDFlibException e) {
System.err.println("PDFlib exception occurred:");
System.err.println("[" + e.get_errnum() + "] " + e.get_apiname() +
": " + e.get_errmsg());
exitcode = 1;
}
catch (Exception e) {
System.err.println(e);
exitcode = 1;
}
finally {
if (p != null) {
p.delete();
}
System.exit(exitcode);
}
}
}