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 }