// ImageToPdfDirect converts image to PDF using gpdf func ImageToPdfDirect(w io.Writer, r io.Reader) error { img, _, err := image.Decode(r) if err != nil { return err } ib := img.Bounds().Canon().Size() doc := pdf.New() canvas := doc.NewPage(pdf.A4Width, pdf.A4Height) canvas.Translate(pdf.Cm, canvas.CropBox().Max.Y-pdf.Cm) // TODO: A4 Portrait ratio vs. ib ratio ir := float32(ib.X) / float32(ib.Y) bb := canvas.CropBox() cbw, cbh := int(bb.Max.X-bb.Min.X), int(bb.Max.Y-bb.Min.Y) if ir > float32(cbw/cbh) { bb.Max.Y = bb.Min.Y + pdf.Unit(1.0/ir*float32(cbw)) } else { bb.Max.X = bb.Min.X + pdf.Unit(ir*float32(cbh)) } canvas.DrawImage(img, bb) if err = canvas.Close(); err != nil { return err } return doc.Encode(w) }
func main() { doc := pdf.New() canvas := doc.NewPage(pdf.USLetterWidth, pdf.USLetterHeight) canvas.Translate(pdf.USLetterWidth/2, pdf.USLetterHeight/2) f, err := os.Open("testdata/suzanne.jpg") if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } defer f.Close() img, err := jpeg.Decode(f) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } rect := &pdf.Rectangle{ pdf.Point{-100, -100}, // min pdf.Point{100, 100}} // max // draw an image canvas.DrawImage(img, *rect) canvas.Close() err = doc.Encode(os.Stdout) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } }
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) } }
// New creates a new PDF Canvas. func New(w, h vg.Length) *Canvas { c := &Canvas{ doc: pdf.New(), w: w, h: h, } c.page = c.doc.NewPage(unit(w), unit(h)) vg.Initialize(c) return c }
func main() { doc := pdf.New() canvas := doc.NewPage(pdf.USLetterWidth, pdf.USLetterHeight) canvas.Translate(100, pdf.USLetterHeight-100) text := new(pdf.Text) text.SetFont(pdf.Times, 12) 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 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) staffOrigin := pdf.Point{bottomLeft.X + pdf.Unit(10), bottomLeft.Y + pdf.Unit(500)} largeStaff := engraving.NewStaffSpec(engraving.RastralZero) engraving.EngraveStaff(staffOrigin, 12*pdf.Cm, largeStaff.Height(), 0.1*pdf.Pt, canvas) engraving.EngraveSurrogateNoteHead(staffOrigin, largeStaff.StaffSpace(), canvas) nextNote := pdf.Point{} nextNote.X = pdf.Unit(staffOrigin.X + largeStaff.StaffSpace()) nextNote.Y = pdf.Unit(staffOrigin.Y + largeStaff.IndexOffset(0)) engraving.EngraveSurrogateNoteHead(nextNote, largeStaff.StaffSpace(), canvas) nextNote.X = pdf.Unit(staffOrigin.X + (2 * largeStaff.StaffSpace())) nextNote.Y = pdf.Unit(staffOrigin.Y + largeStaff.IndexOffset(7)) engraving.EngraveSurrogateNoteHead(nextNote, largeStaff.StaffSpace(), canvas) nextNote.X = pdf.Unit(staffOrigin.X + (3 * largeStaff.StaffSpace())) nextNote.Y = pdf.Unit(staffOrigin.Y + largeStaff.IndexOffset(-1)) engraving.EngraveSurrogateNoteHead(nextNote, largeStaff.StaffSpace(), canvas) nextNote.X = pdf.Unit(staffOrigin.X + (4 * largeStaff.StaffSpace())) nextNote.Y = pdf.Unit(staffOrigin.Y + largeStaff.IndexOffset(2)) engraving.EngraveSurrogateNoteHead(nextNote, largeStaff.StaffSpace(), canvas) smallStaff := engraving.NewStaffSpec(engraving.RastralEight) staffOrigin.Y = staffOrigin.Y + 5*pdf.Cm engraving.EngraveStaff(staffOrigin, 12*pdf.Cm, smallStaff.Height(), 0.1*pdf.Pt, canvas) canvas.Close() err := doc.Encode(os.Stdout) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } }
func main() { doc := pdf.New() canvas := doc.NewPage(pdf.USLetterWidth, pdf.USLetterHeight) canvas.Translate(pdf.USLetterWidth/2, pdf.USLetterHeight/2) text := new(pdf.Text) text.SetFont(pdf.Times, 480) r := float32(45) for i := 0; i < int(360/r); i++ { canvas.Rotate(r * 0.0174532925) text.Text("a") canvas.DrawText(text) } canvas.Close() err := doc.Encode(os.Stdout) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } }
// WriteTextAsPdf writes text to Pdf func WriteTextAsPdf(w io.Writer, r io.Reader) error { doc := pdf.New() canvas, text := newPage(doc) br := bufio.NewReader(r) m := canvas.CropBox().Max maxrowchars := int((m.X - 3*pdf.Cm) / 6) for line, err := br.ReadString('\n'); err == nil; { //fmt.Fprintln(os.Stderr, text.Y()+m.Y) //line = line + line if text.Y()+m.Y < 3*pdf.Cm { canvas.DrawText(text) if err = canvas.Close(); err != nil { return err } canvas, text = newPage(doc) } //for i := 0; i < 3; i++ { for j, k, n := 0, maxrowchars, len(line)-1; j < n; k += maxrowchars { if k > n { k = n } //fmt.Fprintf(os.Stderr, "n=%d j=%d k=%d\n", n, j, k) text.Text(line[j:k]) text.NextLine() j = k } //} line, err = br.ReadString('\n') } canvas.DrawText(text) //fmt.Fprintf(os.Stderr, "maxlen=%d = maxwidth=%f\n", maxlen, maxwidth) if err := canvas.Close(); err != nil { return err } return doc.Encode(w) }
func main() { doc := pdf.New() canvas := doc.NewPage(pdf.A4Height, pdf.A4Width) engraving.Grid(canvas, 1.7, 1.5, 18, 18, 0.2) staves(canvas) canvas.Close() file, err := os.Create("grau.pdf") if err != nil { log.Fatal(err) } err = doc.Encode(file) if err != nil { log.Fatal(err) os.Exit(1) } file.Close() }
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() }
func output() pdf.Document { doc := pdf.New() return *doc }