/*
* $Id: escape_sequences.java,v 1.14 2013/01/15 10:11:58 stm Exp $
*
* Escape sequences:
* Use escape sequences in text lines to output octal or hexadecimal values
*
* Output simple text in octal as well as hexadecimal notation using
* fit_textline().
*
* Required software: PDFlib/PDFlib+PDI/PPS 9
* Required data: none
*/
import com.pdflib.pdflib;
import com.pdflib.PDFlibException;
public class escape_sequences {
public static void main(String argv[]) {
final String outfile = "escape_sequences.pdf";
final String title = "Escape Sequences";
pdflib p = null;
final int x = 100, xoff = 200, y = 650, yoff = 35;
try {
p = new pdflib();
/* 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_errmsg());
p.set_info("Creator", "PDFlib Cookbook");
p.set_info("Title", title + " $Revision: 1.14 $");
final int font = p.load_font("Helvetica", "unicode", "");
if (font == -1)
throw new Exception("Error: " + p.get_errmsg());
/*
* While it is possible to specify the the expansion of escape
* sequences with a global parameter, this can have unwanted
* consequences because for example environment variables are
* treated by PDFlib as "name strings", and on Windows the backslash
* is used in pathnames (example: environment variable
* "PDFLIBLICENSEFILE" for specifying the pathname of the PDFlib
* license file).
*
* Therefore it is strongly recommended to always specify the
* "escapesequence" option for each function where it is necessary,
* and not to set it as a global option.
*/
/* Start page */
p.begin_page_ext(0, 0, "width=a4.width height=a4.height");
/* Set the font and font size */
p.setfont(font, 18);
/*
* Output some descriptive text, i.e. the header for a kind of
* input/output table
*/
p.fit_textline("Input", x, y, "underline underlinewidth=1");
p.fit_textline("Output", x + xoff, y, "underline underlinewidth=1");
/*
* Output some text in octal notation using escape sequences. At the
* Java level we need an additional backslash to escape the
* backslash itself.
*/
final String testcases[] = {
// octal notation
"\\160", // "p"
// hexadecimal notation
"\\xC4", // LATIN CAPITAL LETTER A WITH DIARESIS
"\\xD6", // LATIN CAPITAL LETTER O WITH DIARESIS
"\\xDC" // LATIN CAPITAL LETTER U WITH DIARESIS
};
int i;
for (i = 0; i < testcases.length; i += 1) {
final int ypos = y - ((i + 1) * yoff);
/*
* Show the input text. As the default for the "escapesequence"
* option is "false", the string will be shown as-is.
*/
p.fit_textline(testcases[i], x, ypos, "");
/*
* Let PDFlib replace the escape sequence and show the resulting
* text.
*/
p.fit_textline(testcases[i], x + xoff, ypos,
"escapesequence=true");
}
/* Finish page */
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");
}
catch (Exception e) {
System.err.println(e.getMessage());
}
finally {
if (p != null) {
p.delete();
}
}
}
}