# ps_translate

(PECL ps >= 1.1.0)

ps_translate — Sets translation

### 说明

ps_translate ( resource `$psdoc` , float `$x` , float `$y` ) : bool

Sets a new initial point of the coordinate system.

### 参数

`psdoc`

  Resource identifier of the postscript file as returned by ps_new().

`x`

  x-coordinate of the origin of the translated coordinate system.

`y`

  y-coordinate of the origin of the translated coordinate system.

### 返回值

成功时返回 `TRUE`， 或者在失败时返回 `FALSE`。

### 范例

Example #1 Translation of the coordinate system

    <?php
    function rectangle($ps) {
        ps_moveto($ps, 0, 0);
        ps_lineto($ps, 0, 50);
        ps_lineto($ps, 50, 50);
        ps_lineto($ps, 50, 0);
        ps_lineto($ps, 0, 0);
        ps_stroke($ps);
    }

    $ps = ps_new();
    if (!ps_open_file($ps, "translate.ps")) {
      print "Cannot open PostScript file\n";
      exit;
    }

    ps_set_info($ps, "Creator", "translate.php");
    ps_set_info($ps, "Author", "Uwe Steinmann");
    ps_set_info($ps, "Title", "Translated example");
    ps_set_info($ps, "BoundingBox", "0 0 596 842");

    $psfont = ps_findfont($ps, "Helvetica", "", 0);

    ps_begin_page($ps, 596, 842);
    ps_set_text_pos($ps, 100, 100);
    ps_translate($ps, 500, 750);
    rectangle($ps);
    ps_translate($ps, -500, -750);
    ps_setfont($ps, $psfont, 8.0);
    ps_show($ps, "Text at initial position");
    ps_end_page($ps);

    ps_begin_page($ps, 596, 842);
    ps_set_text_pos($ps, 100, 100);
    ps_save($ps);
    ps_translate($ps, 500, 750);
    rectangle($ps);
    ps_restore($ps);
    ps_setfont($ps, $psfont, 8.0);
    ps_show($ps, "Text at initial position");
    ps_end_page($ps);

    ps_delete($ps);
    ?>

The above example demonstrates two possible ways to place a graphic (in this case just a rectangle) at any position on the page, while the graphic itself uses its own coordinate system. The trick is to change the origin of the current coordinate system before drawing the rectangle. The translation has to be undone after the graphic has been drawn.

On the second page a slightly different and more elegant approach is applied. Instead of undoing the translation with a second call of ps_translate() the graphics context is saved before modifying the coordinate system and restored after drawing the rectangle.

### 参见

- ps_scale() - Sets scaling factor
- ps_rotate() - Sets rotation factor