printer_draw_bmp

(PECL)

printer_draw_bmp -- Draw a bmp

Description

bool printer_draw_bmp ( resource handle, string filename, int x, int y [, int width, int height] )

The function simply draws an bmp the bitmap filename at position x, y. handle must be a valid handle to a printer.

如果成功则返回 TRUE,失败则返回 FALSE

例子 1. printer_draw_bmp() example

<?php
$handle
= printer_open();
printer_start_doc($handle, "My Document");
printer_start_page($handle);

printer_draw_bmp($handle, "c:\\image.bmp", 1, 1);

printer_end_page($handle);
printer_end_doc($handle);
printer_close($handle);
?>

add a note add a note User Contributed Notes
Fuzzmaster
01-Feb-2006 07:30
Added a bit a fuzz:

  function print_img($doc,$img,$res,$pos_x,$pos_y)
   {
     $img_size = getimagesize($img);
     $img_resolution = $res;

     $img_width = $img_size[0];
     $img_height = $img_size[1];

     echo $img_width.'<BR>';
     echo $img_height.'<BR>';

     $ptr_resolution_x = printer_get_option($doc, PRINTER_RESOLUTION_X);
     $ptr_resolution_y = printer_get_option($doc, PRINTER_RESOLUTION_Y);

     echo $ptr_resolution_x.'<BR>';
     echo $ptr_resolution_y.'<BR>';

     $img_scale_x = $ptr_resolution_x / $img_resolution;
     $img_scale_y = $ptr_resolution_y / $img_resolution;

     echo $img_scale_x.'<BR>';
     echo $img_scale_y.'<BR>';

     $ptr_width = $img_width * $img_scale_x;                           
     $ptr_height = $img_height * $img_scale_y;

     echo $doc.'<BR>';
     echo $ptr_width.'<BR>';
     echo $ptr_height.'<BR>';
 
     printer_draw_bmp($doc,$img,$pos_x,$pos_y,$ptr_width,$ptr_height);
   }

print_img($handle, '../img/someimage.bmp', 72, 10, 10);

Of course, if someone can figure out how to capture the resolution of the image from the file that's one less value to manually assign.
ramiro_puc[AT]hotmail[DOT]com
15-Jan-2006 06:51
When trying to print any image file it was getting a very, very small as someone said above. To solve this problem, ive made a script that will calculate the correct size of image before output it to printer.

Most of InkJet printers use 300 dpi. You can change values if you have any other printer... In this case, im using a HP DeskJet 930c.

To make this script better, you can use GD to discover image resolution automatically.

<?php
$handle
= printer_open();
printer_start_doc($handle, "My Document");
printer_start_page($handle);

$largura = 415; //Image Width in Pixels
$altura = 284//Image Height in Pixels

$fator_x = $largura / 72; //Image Resolution (72 ppi)
$fator_y = $largura / 300; //Printer Resolution (300 dpi)
$fator_z = $fator_x / $fator_y;

$largura_f = $largura * $fator_z;
$altura_f = $altura * $fator_z;

printer_set_option($handle, PRINTER_MODE, "RAW");
printer_draw_bmp($handle, "c:\image.bmp", 1, 1, $largura_f, $altura_f);

printer_end_page($handle);
printer_end_doc($handle);
printer_close($handle);
?>
da_vinci7[at]hotmail[dot]com
17-Mar-2005 06:25
what i notice was that
[qoute]
void printer_draw_bmp ( resource handle, string filename, int x, int y)
[/qoute]
is only that here only the starting x and y are shown
and that if you have an bmp with the size 600 x 120 wil be shown as 600x120 pixels and printed very very smale

and when i tried giving ending x and y like this:
<?
  printer_draw_bmp
($handle, $file, 1, 1, 4600, 860)
?>

it printed the image in the correct size
lapoA at TseanetD dot O dot Tcom
09-Dec-2004 02:08
something I found out the hard way...
in order for the example above to work, the file being printed must be in a directory that has been opened for reading.
The example in the docs should probably have been listed as:
(There should probably be a check for the filename, but this should give an idea)

<?php
$dir
= 'c:\\somedir';
$file = 'myimage.bmp';

if (
is_dir($dir)) {
   if(
$dhandle = opendir($dir)) {
    
$handle = printer_open();
    
printer_start_doc($handle, "My Document");
    
printer_start_page($handle);

    
printer_draw_bmp($handle, $file, 1, 1);

    
printer_end_page($handle);
    
printer_end_doc($handle);
    
printer_close($handle);
   }
  
closedir($dhandle);
}
?>