Files
luos/gulliver/thirdparty/html2ps_pdf/output.fastps.l2.class.php

109 lines
2.8 KiB
PHP
Executable File

<?php
class OutputDriverFastPSLevel2 extends OutputDriverFastPS {
function image($image, $x, $y, $scale) {
$this->image_scaled($image, $x, $y, $scale, $scale);
}
function image_scaled($image, $x, $y, $scale_x, $scale_y) {
$image_encoder = $this->get_image_encoder();
$lines = $image_encoder->by_lines($image, $size_x, $size_y);
$offset = 0;
foreach ($lines as $line) {
$this->moveto($x,$y-$offset*$scale_y);
$this->write(sprintf("gsave\n"));
$this->write(sprintf(" << /ImageType 1 /Width %d /Height 1 /BitsPerComponent 8 /Decode [0 1 0 1 0 1] /ImageMatrix %s /DataSource %s >> image\n",
$size_x,
sprintf("matrix currentpoint translate %.2f %.2f scale 0 %.2f translate",
$scale_x, $scale_y,
$size_y
),
"currentfile /ASCIIHexDecode filter"));
$this->write(sprintf("%s\n", $line));
$this->write(sprintf("grestore\n"));
$offset ++;
};
}
function image_ry($image, $x, $y, $height, $bottom, $ox, $oy, $scale) {
// Fill part to the bottom
$cy = $y;
while ($cy+$height > $bottom) {
$this->image($image, $x, $cy, $scale);
$cy -= $height;
};
// Fill part to the top
$cy = $y;
while ($cy-$height < $y + $oy) {
$this->image($image, $x, $cy, $scale);
$cy += $height;
};
}
function image_rx($image, $x, $y, $width, $right, $ox, $oy, $scale) {
// Fill part to the right
$cx = $x;
while ($cx < $right) {
$this->image($image, $cx, $y, $scale);
$cx += $width;
};
// Fill part to the left
$cx = $x;
while ($cx+$width >= $x - $ox) {
$this->image($image, $cx-$width, $y, $scale);
$cx -= $width;
};
}
function image_rx_ry($image, $x, $y, $width, $height, $right, $bottom, $ox, $oy, $scale) {
// Fill bottom-right quadrant
$cy = $y;
while ($cy+$height > $bottom) {
$cx = $x;
while ($cx < $right) {
$this->image($image, $cx, $cy, $scale);
$cx += $width;
};
$cy -= $height;
}
// Fill bottom-left quadrant
$cy = $y;
while ($cy+$height > $bottom) {
$cx = $x;
while ($cx+$width > $x - $ox) {
$this->image($image, $cx, $cy, $scale);
$cx -= $width;
};
$cy -= $height;
}
// Fill top-right quadrant
$cy = $y;
while ($cy < $y + $oy) {
$cx = $x;
while ($cx < $right) {
$this->image($image, $cx, $cy, $scale);
$cx += $width;
};
$cy += $height;
}
// Fill top-left quadrant
$cy = $y;
while ($cy < $y + $oy) {
$cx = $x;
while ($cx+$width > $x - $ox) {
$this->image($image, $cx, $cy, $scale);
$cx -= $width;
};
$cy += $height;
}
}
}
?>