Create a Type 3 font which contains a single logo derived from an image. Import image data from a bitmap TIF image to create a Type 3 logo font containing one glyph. Add the glyph to a custom encoding and output text with that glyph.
Download PHP Code Switch to Java Code Show Output PDF
/* $Id: type3_rasterlogo.php,v 1.3 2009/07/03 12:18:14 rp Exp $
* Type 3 raster logo font:
* Create a Type 3 font which contains a single logo derived from an image
*
* Import image data from a bitmap TIF image to create a Type 3 logo font
* containing one glyph. Add the glyph to a custom encoding and output text
* with that glyph.
*
* Required software: PDFlib/PDFlib+PDI/PPS 7
* Required data: bitmap TIFF image
*/
/* This is where the data files are. Adjust as necessary. */
$searchpath = "../input";
$outfile = "";
$title = "Type 3 Raster Logo Font";
$logofile = "phone.tif";
try {
$p = new pdflib();
$p->set_parameter("SearchPath", $searchpath);
/* This means we must check return values of load_font() etc. */
$p->set_parameter("errorpolicy", "return");
if ($p->begin_document($outfile, "") == 0)
throw new Exception("Error: " . $p->get_errmsg());
$p->set_info("Creator", "PDFlib Cookbook");
$p->set_info("Title", $title);
/* Import an image from "phone.tif" to create the "PhoneLogofont" 3
* Type font with one glyph "p" (0x70). Add a glyph to the
* "PhoneLogoEncoding" encoding with the glyphname "phone" and
* the slot "p" (0x70). Output text containing the glyph by
* addressing via slot values and "PhoneLogoEncoding".
*/
/* Load the bitmap data for the glyph from the file. */
$image = $p->load_image("auto", $logofile, "mask");
if ($image == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Create the font PhoneLogofont. The matrix entries are chosen to
* create the common 1000x1000 coordinate system. These numbers are
* also used when placing the logo within the glyph box below
* (option "boxsize").
*/
$p->begin_font("PhoneLogofont", 0.001, 0.0, 0.0, 0.001, 0.0, 0.0, "");
/* The .notdef (fallback) glyph should be contained in all Type 3
* fonts to avoid problems with some PDF viewers. It is usually
* empty.
*/
$p->begin_glyph(".notdef", 1000, 0, 0, 0, 0);
$p->end_glyph();
/* Add a Glyph with the name "phone" and width 1000 */
$p->begin_glyph("phone", 1000, 0, 0, 1000, 1000);
/* Fit the image in a box similar to the dimensions of the glyph box.
*/
$p->fit_image($image, 0, 0, "boxsize={1000 1000} fitmethod=auto");
$p->end_glyph();
$p->end_font();
$p->close_image($image);
/* Assign the logo to slot 0x70 in our "PhoneLogoEncoding" encoding */
$p->encoding_set_char("PhoneLogoEncoding", 0x70, "phone", 0xF000);
/* Load the new "PhoneLogofont" font with the encoding "LogoEncoding" */
$logofont = $p->load_font("PhoneLogofont", "PhoneLogoEncoding", "");
if ($logofont == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Load the "Helvetica" font */
$normalfont = $p->load_font("Helvetica", "winansi", "");
if ($normalfont == 0)
throw new Exception("Error: " . $p->get_errmsg());
/* Start page */
$p->begin_page_ext(0, 0, "width=300 height=100");
/* Output the character "p" (0x70) of the "PhoneLogofont" font */
$p->fit_textline("p", 50, 50, "font=" . $logofont . " fontsize=14");
/* Output standard text */
$p->fit_textline("This is the phone logo", 70, 50, "font=" . $normalfont .
" fontsize=14");
/* Alternatively, we can select the logo glyph via a character
* reference which refers to the glyph name "phone". Use the
* "charref" option to enable character referencing. This requires
* a Unicode assignment for the glyph (we use a PUA value), and
* "unicode" encoding:
$logofont = $p->load_font("PhoneLogofont", "unicode", "");
if ($logofont == 0)
throw new Exception("Error: " . $p->get_errmsg());
$p->fit_textline("&.phone;", 215, 50, "font=" . $logofont .
" fontsize=14 charref");
*/
/* The third method addresses the logo glyph via its Unicode
* PUA value directly:
$p->fit_textline("\uF000", 215, 50, "font=" . $logofont .
" fontsize=14 charref");
*/
/* Finish page */
$p->end_page_ext("");
$p->end_document("");
$buf = $p->get_buffer();
$len = strlen($buf);
header("Content-type: application/pdf");
header("Content-Length: $len");
header("Content-Disposition: inline; filename=type3_rasterlogo.pdf");
print $buf;
} catch (PDFlibException $e) {
die("PDFlib exception occurred:\n".
"[" . $e->get_errnum() . "] " . $e->get_apiname() .
": " . $e->get_errmsg() . "\n");
} catch (Exception $e) {
die($e->getMessage());
}
$p=0;
?>