'winansi',
'iso-8859-2' => 'iso8859-2',
'iso-8859-3' => 'iso8859-3',
'iso-8859-4' => 'iso8859-4',
'iso-8859-5' => 'iso8859-5',
'iso-8859-6' => 'iso8859-6',
'iso-8859-7' => 'iso8859-7',
'iso-8859-8' => 'iso8859-8',
'iso-8859-9' => 'iso8859-9',
'iso-8859-10' => 'iso8859-10',
'iso-8859-13' => 'iso8859-13',
'iso-8859-14' => 'iso8859-14',
'iso-8859-15' => 'iso8859-15',
'iso-8859-16' => 'iso8859-16',
'windows-1250' => 'cp1250',
'windows-1251' => 'cp1251',
'windows-1252' => 'cp1252',
'symbol' => 'symbol');
if (isset($translations[$encoding])) { return $translations[$encoding]; };
return $encoding;
}
function add_link($left, $top, $width, $height, $url) {
pdf_add_weblink($this->pdf, $left, $top-$height, $left+$width, $top, $url);
}
function add_local_link($left, $top, $width, $height, $anchor) {
pdf_add_locallink($this->pdf,
$left,
$top-$height - $this->offset ,
$left+$width,
$top - $this->offset,
$anchor->page,
"fitwidth");
}
function circle($x, $y, $r) {
pdf_circle($this->pdf, $x, $y, $r);
}
function clip() {
pdf_clip($this->pdf);
}
function close() {
pdf_end_page($this->pdf);
pdf_close($this->pdf);
pdf_delete($this->pdf);
}
function closepath() {
pdf_closepath($this->pdf);
}
function dash($x, $y) {
pdf_setdash($this->pdf, $x, $y);
}
function decoration($underline, $overline, $strikeout) {
// underline
pdf_set_parameter($this->pdf, "underline", $underline ? "true" : "false");
// overline
pdf_set_parameter($this->pdf, "overline", $overline ? "true" : "false");
// line through
pdf_set_parameter($this->pdf, "strikeout", $strikeout ? "true" : "false");
}
function fill() {
pdf_fill($this->pdf);
}
function findfont($name, $encoding) {
// PDFLIB is limited by 'builtin' encoding for "Symbol" font
if ($name == 'Symbol') {
$encoding = 'builtin';
};
global $g_font_resolver_pdf;
$embed = $g_font_resolver_pdf->embed[$name];
return pdf_findfont($this->pdf, $name, $this->encoding($encoding), $embed);
}
function font_ascender($name, $encoding) {
return pdf_get_value($this->pdf, "ascender", $this->findfont($name, $encoding));
}
function font_descender($name, $encoding) {
return -pdf_get_value($this->pdf, "descender", $this->findfont($name, $encoding));
}
function get_bottom() {
return $this->bottom + $this->offset;
}
function image($image, $x, $y, $scale) {
$tmpname = tempnam(WRITER_TEMPDIR,WRITER_FILE_PREFIX);
imagepng($image->get_handle(), $tmpname);
$pim = pdf_open_image_file($this->pdf, "png", $tmpname, "", 0);
pdf_place_image($this->pdf, $pim, $x, $y, $scale);
pdf_close_image($this->pdf, $pim);
unlink($tmpname);
}
function image_scaled($image, $x, $y, $scale_x, $scale_y) {
$tmpname = tempnam(WRITER_TEMPDIR,WRITER_FILE_PREFIX);
imagepng($image->get_handle(), $tmpname);
$pim = pdf_open_image_file($this->pdf, "png", $tmpname, "", 0);
$this->save();
pdf_translate($this->pdf, $x, $y);
pdf_scale($this->pdf, $scale_x, $scale_y);
pdf_place_image($this->pdf, $pim, 0, 0, 1);
$this->restore();
pdf_close_image($this->pdf, $pim);
unlink($tmpname);
}
function image_ry($image, $x, $y, $height, $bottom, $ox, $oy, $scale) {
$tmpname = tempnam(WRITER_TEMPDIR,WRITER_FILE_PREFIX);
imagepng($image->get_handle(), $tmpname);
$pim = pdf_open_image_file($this->pdf, "png", $tmpname, "", 0);
// Fill part to the bottom
$cy = $y;
while ($cy+$height > $bottom) {
pdf_place_image($this->pdf, $pim, $x, $cy, $scale);
$cy -= $height;
};
// Fill part to the top
$cy = $y;
while ($cy-$height < $y + $oy) {
pdf_place_image($this->pdf, $pim, $x, $cy, $scale);
$cy += $height;
};
pdf_close_image($this->pdf, $pim);
unlink($tmpname);
}
function image_rx($image, $x, $y, $width, $right, $ox, $oy, $scale) {
$tmpname = tempnam(WRITER_TEMPDIR,WRITER_FILE_PREFIX);
imagepng($image->get_handle(), $tmpname);
$pim = pdf_open_image_file($this->pdf, "png", $tmpname, "", 0);
// Fill part to the right
$cx = $x;
while ($cx < $right) {
pdf_place_image($this->pdf, $pim, $cx, $y, $scale);
$cx += $width;
};
// Fill part to the left
$cx = $x;
while ($cx+$width >= $x - $ox) {
pdf_place_image($this->pdf, $pim, $cx-$width, $y, $scale);
$cx -= $width;
};
pdf_close_image($this->pdf, $pim);
unlink($tmpname);
}
function image_rx_ry($image, $x, $y, $width, $height, $right, $bottom, $ox, $oy, $scale) {
$tmpname = tempnam(WRITER_TEMPDIR,WRITER_FILE_PREFIX);
imagepng($image->get_handle(), $tmpname);
$pim = pdf_open_image_file($this->pdf, "png", $tmpname, "", 0);
// Fill bottom-right quadrant
$cy = $y;
while ($cy+$height > $bottom) {
$cx = $x;
while ($cx < $right) {
pdf_place_image($this->pdf, $pim, $cx, $cy, $scale);
$cx += $width;
};
$cy -= $height;
}
// Fill bottom-left quadrant
$cy = $y;
while ($cy+$height > $bottom) {
$cx = $x;
while ($cx+$width > $x - $ox) {
pdf_place_image($this->pdf, $pim, $cx, $cy, $scale);
$cx -= $width;
};
$cy -= $height;
}
// Fill top-right quadrant
$cy = $y;
while ($cy < $y + $oy) {
$cx = $x;
while ($cx < $right) {
pdf_place_image($this->pdf, $pim, $cx, $cy, $scale);
$cx += $width;
};
$cy += $height;
}
// Fill top-left quadrant
$cy = $y;
while ($cy < $y + $oy) {
$cx = $x;
while ($cx+$width > $x - $ox) {
pdf_place_image($this->pdf, $pim, $cx, $cy, $scale);
$cx -= $width;
};
$cy += $height;
}
pdf_close_image($this->pdf, $pim);
unlink($tmpname);
}
function lineto($x, $y) {
pdf_lineto($this->pdf, $x, $y);
}
function moveto($x, $y) {
pdf_moveto($this->pdf, $x, $y);
}
// OutputDriver interface functions
function next_page($height) {
if ($this->_status == PDFLIB_STATUS_PAGE_STARTED) {
pdf_end_page($this->pdf);
};
pdf_begin_page($this->pdf, mm2pt($this->media->width()), mm2pt($this->media->height()));
// Calculate coordinate of the next page bottom edge
$this->offset -= $height - $this->offset_delta;
// Reset the "correction" offset to it normal value
// Note: "correction" offset is an offset value required to avoid page breaking
// in the middle of text boxes
$this->offset_delta = 0;
pdf_translate($this->pdf, 0, -$this->offset);
parent::next_page($height);
$this->_status = PDFLIB_STATUS_PAGE_STARTED;
}
function OutputDriverPdflib($version) {
$this->OutputDriverGenericPDF();
$this->set_pdf_version($version);
$this->_currentfont = null;
$this->_radiogroups = array();
$this->_field_names = array();
$this->_status = PDFLIB_STATUS_INITIALIZED;
}
function prepare() {
parent::prepare();
// Generate custom encoding vector mappings
$manager_encoding = ManagerEncoding::get();
for ($i = 1, $size = $manager_encoding->get_custom_vector_index(); $i <= $size; $i++) {
$encoding_name = $manager_encoding->get_custom_encoding_name($i);
$filename = $this->generate_cpg($encoding_name,
true);
pdf_set_parameter($this->pdf,
'Encoding',
sprintf('%s=%s',
$encoding_name,
$filename));
};
}
function reset(&$media) {
OutputDriverGenericPDF::reset($media);
// Check if PDFLIB is available
if (!extension_loaded('pdf')) {
// Try to use "dl" to dynamically load PDFLIB
$result = dl(PDFLIB_DL_PATH);
if (!$result) {
readfile(HTML2PS_DIR.'templates/missing_pdflib.html');
error_log("No PDFLIB extension found");
die("HTML2PS Error");
}
}
$this->pdf = pdf_new();
// Set PDF compatibility level
pdf_set_parameter($this->pdf, "compatibility", $this->get_pdf_version());
/**
* Use PDF license key, if present
*
* PDFLIB_LICENSE constant is defined in 'config.inc.php' file in "PDFLIB-specific" section.
*/
if (defined("PDFLIB_LICENSE")) {
pdf_set_parameter($this->pdf, "license", PDFLIB_LICENSE);
};
pdf_open_file($this->pdf, $this->get_filename());
// @TODO: compression level, debug
pdf_set_value($this->pdf, "compress", 0);
// Set path to the PDFLIB UPR file containig information about fonts and encodings
if (defined("PDFLIB_UPR_PATH")) {
pdf_set_parameter($this->pdf, "resourcefile", PDFLIB_UPR_PATH);
};
// Setup encodings not bundled with PDFLIB
$filename = $this->generate_cpg('koi8-r');
pdf_set_parameter($this->pdf, 'Encoding', sprintf('koi8-r=%s', $filename));
// Setup font outlines
global $g_font_resolver_pdf;
$g_font_resolver_pdf->setup_ttf_mappings($this->pdf);
$pdf = $this->pdf;
pdf_set_info($pdf, "Creator", "html2ps (PHP version)");
// No borders around links in the generated PDF
pdf_set_border_style($this->pdf, "solid", 0);
$this->_status = PDFLIB_STATUS_DOCUMENT_STARTED;
}
function rect($x, $y, $w, $h) {
pdf_rect($this->pdf, $x, $y, $w, $h);
}
function restore() {
pdf_restore($this->pdf);
}
function save() {
pdf_save($this->pdf);
}
function setfont($name, $encoding, $size) {
$this->_currentfont = $this->findfont($name, $encoding);
pdf_setfont($this->pdf, $this->_currentfont, $size);
return true;
}
// function setfontcore($name, $size) {
// $this->_currentfont = pdf_findfont($this->pdf, $name, 'host', 1 /* embed */);
// pdf_setfont($this->pdf, $this->_currentfont, $size);
// return true;
// }
function setlinewidth($x) {
pdf_setlinewidth($this->pdf, $x);
}
// PDFLIB wrapper functions
function setrgbcolor($r, $g, $b) {
pdf_setcolor($this->pdf, "both", "rgb", $r, $g, $b, 0);
}
function show_xy($text, $x, $y) {
pdf_show_xy($this->pdf, $text, $x, $y);
}
function stroke() {
pdf_stroke($this->pdf);
}
function stringwidth($string, $name, $encoding, $size) {
return pdf_stringwidth($this->pdf, $string, $this->findfont($name, $encoding), $size);
}
/* private routines */
function _show_watermark($watermark) {
$font = $this->findfont('Helvetica', 'iso-8859-1');
pdf_setfont($this->pdf, $font, 100);
$x = $this->left + $this->width / 2;
$y = $this->bottom + $this->height / 2 + $this->offset;
pdf_set_value($this->pdf, "textrendering", 1);
pdf_translate($this->pdf, $x, $y);
pdf_rotate($this->pdf, 60);
pdf_show_xy($this->pdf, $watermark, -pdf_stringwidth($this->pdf, $watermark, $font, 100)/2, -50);
}
function generate_cpg($encoding, $force = false) {
if (!$force) {
$filename = CACHE_DIR.$encoding.'.cpg';
} else {
$filename = CACHE_DIR.uniqid('', false).'.cpg';
};
if (file_exists($filename)) {
return $filename;
};
$output = fopen($filename, 'w');
$manager_encoding =& ManagerEncoding::get();
$vector = $manager_encoding->get_encoding_vector($encoding);
foreach ($vector as $code => $utf) {
fwrite($output, sprintf("0x%04X 0x%02X\n", $utf, ord($code)));
};
fclose($output);
return $filename;
}
}
?>