Derick,
   Here are the patch files (printer.c.patch to be applied on printer.c and 
printer.php.patch to be applied on printer.php). In order to make settings 
effect, the printer_set_option($handle,PRINTER_SET_OPTIONS,0) should be 
called after send a series of settings. The third parameter in this case is 
ignored (but it must be supplied since I didn't change the way original 
printer_set_option() check parameters. I'd love to take a look on any 
problems my change might cause. Just mail me.

Regards,
Tanes Sriviroolchai


>From: Derick Rethans <[EMAIL PROTECTED]>

TS>    If you point me out where I can get latest sources in 
php4/ext/printer, I
TS> would love to provide a patch for this problem. I don't know why source
TS> codes of this module (printer) is not included in php distribution 
source
TS> code.

DR>It was moved to pear/PECL:
DR>
DR>http://cvs.php.net/cvs.php/pear/PECL/printer
DR>
DR>regards,
DR>Derick


_________________________________________________________________
Join the world’s largest e-mail service with MSN Hotmail. 
http://www.hotmail.com
*** org\printer.c       Fri May 17 18:49:42 2002
--- printer.c   Mon Aug 26 15:11:08 2002
***************
*** 17,22 ****
--- 17,36 ----
     
+----------------------------------------------------------------------+
   */

+ /*
+  * Modified by Tanes Sriviroolchai
+  * On Aug 26, 2002
+  *
+  * Modified function: printer_set_option()
+  * Reason: To make setting options working, the printer_set_option() must
+  *         call Win32 API DocumentProperties() with DM_OUT_BUFFER |
+  *         DM_IN_BUFFER in order for all settings in resource->device to
+  *         be effected. Also, while setting parameters dmXXX in resource->
+  *         device, a bit mask resource->dmFields of correspondent setting
+  *         should be set too.
+  *
+  */
+
  /* $Id: printer.c,v 1.23 2002/05/17 18:49:42 fmk Exp $ */

  #ifdef HAVE_CONFIG_H
***************
*** 146,151 ****
--- 160,166 ----
  #define TEXT_ALIGN            12
  #define DEVICENAME            13
  #define DRIVER_VERSION        14
+ #define SET_OPTIONS   99
  #define BRUSH_SOLID           -1
  #define BRUSH_CUSTOM  -2

***************
*** 176,181 ****
--- 191,197 ----
        REGP_CONSTANT("PRINTER_TITLE",                          TITLE);
        REGP_CONSTANT("PRINTER_DEVICENAME",                     DEVICENAME);
        REGP_CONSTANT("PRINTER_DRIVERVERSION",          DRIVER_VERSION);
+       REGP_CONSTANT("PRINTER_SET_OPTIONS",            SET_OPTIONS);
        REGP_CONSTANT("PRINTER_RESOLUTION_Y",           YRESOLUTION);
        REGP_CONSTANT("PRINTER_RESOLUTION_X",           XRESOLUTION);
        REGP_CONSTANT("PRINTER_SCALE",                          SCALE);
***************
*** 484,489 ****
--- 500,506 ----
                case COPIES:
                        convert_to_long_ex(arg3);
                        resource->device->dmCopies              = 
(short)Z_LVAL_PP(arg3);
+                       resource->device->dmFields             |= DM_COPIES;
                        break;

                case MODE:
***************
*** 501,536 ****
--- 518,560 ----
                case ORIENTATION:
                        convert_to_long_ex(arg3);
                        resource->device->dmOrientation = (short)Z_LVAL_PP(arg3);
+                       resource->device->dmFields     |= DM_ORIENTATION;
                        break;

                case YRESOLUTION:
                        convert_to_long_ex(arg3);
                        resource->device->dmYResolution = (short)Z_LVAL_PP(arg3);
+                       resource->device->dmFields     |= DM_YRESOLUTION;
                        break;

                case XRESOLUTION:
                        convert_to_long_ex(arg3);
                        resource->device->dmPrintQuality= (short)Z_LVAL_PP(arg3);
+                       resource->device->dmFields     |= DM_PRINTQUALITY;
                        break;

                case PAPER_FORMAT:
                        convert_to_long_ex(arg3);
                        resource->device->dmPaperSize   = (short)Z_LVAL_PP(arg3);
+                       resource->device->dmFields     |= DM_PAPERSIZE;
                        break;

                case PAPER_LENGTH:
                        convert_to_long_ex(arg3);
                        resource->device->dmPaperLength = Z_LVAL_PP(arg3) * 10;
+                       resource->device->dmFields     |= DM_PAPERLENGTH;
                        break;

                case PAPER_WIDTH:
                        convert_to_long_ex(arg3);
                        resource->device->dmPaperWidth  = Z_LVAL_PP(arg3) * 10;
+                       resource->device->dmFields     |= DM_PAPERWIDTH;
                        break;

                case SCALE:
                        convert_to_long_ex(arg3);
                        resource->device->dmScale               = 
(short)Z_LVAL_PP(arg3);
+                       resource->device->dmFields             |= DM_SCALE;
                        break;

                case BG_COLOR:
***************
*** 548,553 ****
--- 572,588 ----
                        SetTextAlign(resource->dc, Z_LVAL_PP(arg3));
                        break;

+               case SET_OPTIONS:
+                       DocumentProperties(NULL, resource->handle, resource->name, 
resource->device, resource->device, DM_OUT_BUFFER | DM_IN_BUFFER);
+
+                       if( resource->dc != NULL ) {
+                               php_error(E_NOTICE, "Deleting old DeviceContext in 
+order for new 
settings to be effective");
+                               DeleteDC(resource->dc);
+                       }
+
+                       resource->dc = CreateDC(NULL, resource->name, NULL, 
+resource->device);
+                       break;
+
                default:
                        php_error(E_WARNING,"unknown option passed to 
printer_set_option()");
                        RETURN_FALSE;

*** org\printer.php     Thu Apr  5 12:36:00 2001
--- printer.php Mon Aug 26 15:33:34 2002
***************
*** 1,6 ****
--- 1,11 ----
  <?php
   $handle = printer_open();

+  printer_set_option( $handle, PRINTER_ORIENTATION, 
PRINTER_ORIENTATION_LANSCAPE );
+  printer_set_option( $handle, PRINTER_COPIES, 2 );
+  printer_set_option( $handle, PRINTER_SET_OPTIONS, 0 );
+
+
   printer_start_doc($handle, "PHP Test");
   printer_start_page($handle);



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to