func traceCurve(a, b, c, d pdf.Point, canvas *pdf.Canvas) { path := new(pdf.Path) path.Move(a) path.Curve(b, c, d) canvas.Stroke(path) }
func main() { doc := pdf.New() canvas := doc.NewPage(pdf.USLetterWidth, pdf.USLetterHeight) canvas.Translate(500, 500) // canvas.SetColor(230, 100, 30) canvas.SetStrokeColor(20, 40, 60) path := new(pdf.Path) path.Move(pdf.Point{0, 0}) path.Line(pdf.Point{0, 50}) canvas.Stroke(path) text := new(pdf.Text) text.SetFont(pdf.Helvetica, 14) text.Text("Hello, World!") canvas.DrawText(text) canvas.Close() err := doc.Encode(os.Stdout) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } }
func EngraveStaff(origin pdf.Point, width, height, lineWidth pdf.Unit, canvas *pdf.Canvas) { path := new(pdf.Path) noteHeight := pdf.Unit(height / 4) for i := 0; i < 5; i++ { path.Move(origin) path.Line(pdf.Point{origin.X + width, origin.Y}) origin.Y = origin.Y + noteHeight } canvas.Push() canvas.SetLineWidth(lineWidth) canvas.Stroke(path) canvas.Pop() }
// pdfPath returns a pdf.Path from a vg.Path. func pdfPath(c *Canvas, path vg.Path) *pdf.Path { p := new(pdf.Path) for _, comp := range path { switch comp.Type { case vg.MoveComp: p.Move(pdfPoint(comp.X, comp.Y)) case vg.LineComp: p.Line(pdfPoint(comp.X, comp.Y)) case vg.ArcComp: arc(p, comp) case vg.CloseComp: p.Close() default: panic(fmt.Sprintf("Unknown path component type: %d\n", comp.Type)) } } return p }
func EngraveSurrogateNoteHead(origin pdf.Point, size pdf.Unit, canvas *pdf.Canvas) { outline := new(pdf.Path) topRight := pdf.Point{origin.X + size, origin.Y + size} outline.Rectangle(pdf.Rectangle{origin, topRight}) mid := pdf.Point{origin.X + pdf.Unit(size/2), origin.Y + pdf.Unit(size/2)} midPoints := new(pdf.Path) midPoints.Move(pdf.Point{mid.X, origin.Y}) midPoints.Line(pdf.Point{mid.X, origin.Y + size}) midPoints.Move(pdf.Point{origin.X, mid.Y}) midPoints.Line(pdf.Point{origin.X + size, mid.Y}) canvas.Push() canvas.SetColor(0.6, 0.6, 0.6) canvas.Fill(outline) canvas.SetLineWidth(pdf.Unit(0.1)) canvas.Stroke(midPoints) canvas.Pop() }
func main() { doc := pdf.New() canvas := doc.NewPage(pdf.A4Width, pdf.A4Height) path := new(pdf.Path) bottomLeft := pdf.Point{borderWidth, borderWidth} topRight := pdf.Point{pdf.A4Width - borderWidth, pdf.A4Height - borderWidth} path.Rectangle(pdf.Rectangle{bottomLeft, topRight}) canvas.Stroke(path) left := 5 * pdf.Cm right := 15 * pdf.Cm top := 15 * pdf.Cm bottom := 10 * pdf.Cm curve := new(pdf.Path) a := pdf.Point{left, bottom} b := pdf.Point{left, top} c := pdf.Point{right, top} d := pdf.Point{right, bottom} curve.Move(a) curve.Curve(b, c, d) beneath := 5 * pdf.Cm e := pdf.Point{left, beneath} f := pdf.Point{right, beneath} curve.Curve(f, e, a) left = 6.5 * pdf.Cm right = 13.5 * pdf.Cm top = 13.5 * pdf.Cm bottom = 10 * pdf.Cm beneath = 6.5 * pdf.Cm a = pdf.Point{left, 9 * pdf.Cm} b = pdf.Point{left, top} c = pdf.Point{right, top} d = pdf.Point{right, 11 * pdf.Cm} curve.Move(d) curve.Curve(c, b, a) e = pdf.Point{left, beneath} f = pdf.Point{right, beneath} curve.Curve(e, f, d) canvas.FillStroke(curve) canvas.Close() file, err := os.Create("curves.pdf") if err != nil { log.Fatal(err) } err = doc.Encode(file) if err != nil { log.Fatal(err) os.Exit(1) } file.Close() }