Example #1
0
// 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)
}
Example #2
0
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)
	}
}
Example #4
0
// 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
}
Example #5
0
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)
	}
}
Example #6
0
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)
	}

}
Example #7
0
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)
	}
}
Example #8
0
// 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)
}
Example #9
0
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()
}
Example #10
0
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()
}
Example #11
0
func output() pdf.Document {
	doc := pdf.New()

	return *doc
}