github.com/signintech/pdft@v0.5.0/minigopdf/cache_content_oval.go (about)

     1  package gopdf
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  )
     7  
     8  type cacheContentOval struct {
     9  	pageHeight float64
    10  	x1         float64
    11  	y1         float64
    12  	x2         float64
    13  	y2         float64
    14  }
    15  
    16  func (c *cacheContentOval) toStream(protection *PDFProtection) (*bytes.Buffer, error) {
    17  
    18  	h := c.pageHeight
    19  	x1 := c.x1
    20  	y1 := c.y1
    21  	x2 := c.x2
    22  	y2 := c.y2
    23  
    24  	var buff bytes.Buffer
    25  	cp := 0.55228                              // Magnification of the control point
    26  	v1 := [2]float64{x1 + (x2-x1)/2, h - y2}   // Vertex of the lower
    27  	v2 := [2]float64{x2, h - (y1 + (y2-y1)/2)} // .. Right
    28  	v3 := [2]float64{x1 + (x2-x1)/2, h - y1}   // .. Upper
    29  	v4 := [2]float64{x1, h - (y1 + (y2-y1)/2)} // .. Left
    30  
    31  	buff.WriteString(fmt.Sprintf("%0.2f %0.2f m\n", v1[0], v1[1]))
    32  	buff.WriteString(fmt.Sprintf(
    33  		"%0.2f %0.2f %0.2f %0.2f %0.2f %0.2f c\n",
    34  		v1[0]+(x2-x1)/2*cp, v1[1], v2[0], v2[1]-(y2-y1)/2*cp, v2[0], v2[1],
    35  	))
    36  	buff.WriteString(fmt.Sprintf(
    37  		"%0.2f %0.2f %0.2f %0.2f %0.2f %0.2f c\n",
    38  		v2[0], v2[1]+(y2-y1)/2*cp, v3[0]+(x2-x1)/2*cp, v3[1], v3[0], v3[1],
    39  	))
    40  	buff.WriteString(fmt.Sprintf(
    41  		"%0.2f %0.2f %0.2f %0.2f %0.2f %0.2f c\n",
    42  		v3[0]-(x2-x1)/2*cp, v3[1], v4[0], v4[1]+(y2-y1)/2*cp, v4[0], v4[1],
    43  	))
    44  	buff.WriteString(fmt.Sprintf(
    45  		"%0.2f %0.2f %0.2f %0.2f %0.2f %0.2f c S\n",
    46  		v4[0], v4[1]-(y2-y1)/2*cp, v1[0]-(x2-x1)/2*cp, v1[1], v1[0], v1[1],
    47  	))
    48  
    49  	return &buff, nil
    50  }