/* * Retain fonts: * Demonstrate performance benefits of keeping a font open across multiple * documents. * * Required software: PDFlib/PDFlib+PDI/PPS 9 * 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 encoding=unicode 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); } } }