BASKET
Search
PDFlib

Complex_Scripts/Gaiji_eudc

Download Java Code      Switch to PHP Code     Show Output PDF

/* $Id: gaiji_eudc.java,v 1.9 2017/01/26 13:11:45 stm Exp $

 *

 * Demonstrate the use of SING and EUDC fonts for merging a

 * Gaiji character into an existing font

 *

 * Required software: PDFlib/PDFlib+PDI/PPS 9

 * Required data: MS Mincho font;

 * Please put the file msmincho.ttc into the "extra_input" directory.

 *

 * This example is not run by default from the Ant build.xml file and can be

 * executed either specifically by invoking "ant gaiji_eudc" or together

 * with the other topics that require extra configuration by invoking "ant

 * run-extra-topics".

 */


package com.pdflib.cookbook.pdflib.complex_scripts;


import com.pdflib.pdflib;

import com.pdflib.PDFlibException;


class gaiji_eudc {

    public static void main(String argv[]) {

        /* This is where the data files are. Adjust as necessary. */

        final String searchpath = "../input";

        /* Extra search path for files not delivered with the Cookbook */

        final String extra_searchpath = "../extra_input";

        final String outfile = "gaiji_eudc.pdf";

        final String title = "Gaiji and EUDC Fonts";


        int exitcode = 0;

        String optlist;

        pdflib p = null;

        int i, table;

        final double llx = 50, lly = 50, urx = 800, ury = 550;

        String result;


        final String headers[] = { "Use case",

            "Option list for the 'fallbackfonts' option", "Base font",

            "With fallback font" };


        class testcase {

            testcase(String usecase, String fontname, String encoding,

                    String fallbackoptions, String text) {

                this.usecase = usecase;

                this.fontname = fontname;

                this.encoding = encoding;

                this.fallbackoptions = fallbackoptions;

                this.text = text;

            }


            String usecase;

            String fontname;

            String encoding;

            String fallbackoptions;

            String text;

        }


        final testcase testcases[] = {

            /*

             * Font with end-user defined character (EUDC) with Unicode value

             * U+E000. We map the Unicode range U+E000-U+E0FF to the EUDC

             * font.

             */

            new testcase("Gaiji with EUDC font", "MS Mincho",

                "unicode",

                "{fontname=EUDC encoding=unicode forcechars={U+E000-U+E0FF} "

                    + "fontsize=140% textrise=-20%}", "Gaiji: \uE000"),


            /*

             * SING fontlet containing a single gaiji character with Unicode

             * value U+E000. Usage of "forcechars=gaiji" allows to automatically

             * map the Unicode value of the character in the SING font, although

             * the Unicode value must also be explicitly known for making use of

             * the character.

             */

            new testcase("Gaiji with SING font", "MS Mincho",

                "unicode",

                "{fontname=PDFlibWing encoding=unicode forcechars=gaiji}",

                "Gaiji: \uE000"), };


        try {

            p = new pdflib();


            p.set_option("searchpath={" + searchpath + "}");

            p.set_option("searchpath={" + extra_searchpath + "}");

            p.set_option("charref=true");

            p.set_option("glyphcheck=replace");


            /*

             * This means that formatting and other errors will raise an

             * exception. This simplifies our sample code, but is not

             * recommended for production code.

             */

            p.set_option("errorpolicy=exception");


            /* Set an output path according to the name of the topic */

            if (p.begin_document(outfile, "") == -1) {

                throw new Exception("Error: " + p.get_errmsg());

            }


            p.set_info("Creator", "PDFlib Cookbook");

            p.set_info("Title", title + " $Revision: 1.9 $");


            /* Start Page */

            p.begin_page_ext(0, 0, "width=a4.height height=a4.width");


            table = -1;


            /* Table header */

            for (i = 0; i < headers.length; i++) {

                final int col = i + 1;


                optlist = "fittextline={fontname=Helvetica-Bold "

                    + "encoding=unicode fontsize=11} margin=4";

                table = p.add_table_cell(table, col, 1, headers[i], optlist);

            }


            /* Create fallback samples, one use case per row */

            for (i = 0; i < testcases.length; i++) {

                final int row = i + 2;

                final testcase testcase = testcases[i];

                int col = 1;


                /* Column 1: description of the use case */

                optlist = "fittextline={fontname=Helvetica encoding=unicode "

                            + "fontsize=11} margin=4";

                table = p.add_table_cell(table, col++, row, testcase.usecase,

                        optlist);


                /* Column 2: reproduce option list literally */

                optlist = "fittextline={fontname=Helvetica encoding=unicode " +

                                "fontsize=10} margin=4";

                table = p.add_table_cell(table, col++, row,

                        testcase.fallbackoptions, optlist);


                /* Column 3: text with base font */

                optlist = "fittextline={fontname={" + testcase.fontname + "}"

                        + " encoding=" + testcase.encoding

                        + " fontsize=11 } margin=4";

                table = p.add_table_cell(table, col++, row, testcase.text,

                        optlist);


                /* Column 4: text with base font and fallback fonts */

                optlist = "fittextline={fontname={" + testcase.fontname + "}"

                        + " encoding=" + testcase.encoding

                        + " fontsize=11 fallbackfonts={"

                        + testcase.fallbackoptions + "}} margin=4";

                table = p.add_table_cell(table, col++, row, testcase.text,

                        optlist);

            }


            /* Place the table */

            optlist = "header=1 fill={{area=rowodd "

                    + "fillcolor={gray 0.9}}} stroke={{line=other}} ";

            result = p.fit_table(table, llx, lly, urx, ury, optlist);


            if (result.equals("_error")) {

                throw new Exception("Couldn't place table: " + p.get_errmsg());

            }


            p.end_page_ext("");

            p.end_document("");

        }

        catch (PDFlibException e) {

            System.err.print("PDFlib exception occurred:\n");

            System.err.print("[" + e.get_errnum() + "] " + e.get_apiname()

                    + ": " + e.get_errmsg() + "\n");

            exitcode = 1;

        }

        catch (Exception e) {

            System.err.println(e.getMessage());

            exitcode = 1;

        }

        finally {

            if (p != null) {

                p.delete();

            }

            System.exit(exitcode);

        }

    }

}