示例#1
0
func (b *TextBox) getRotation(doc documents.Document) (rotationX float64, rotationY float64) {
	if b.Width == 0 {
		pageWidth, _ := doc.GetPageSize()
		leftMargin, _, rightMargin, _ := doc.GetMargins()

		rotationX = (pageWidth - leftMargin - rightMargin - b.Position.X) / 2
	} else {
		rotationX = b.Position.X + b.Width/2
	}

	if b.Height == 0 {
		rotationY = b.Position.Y + doc.PointConvert(b.Font.LineHeight)/2
	} else {
		rotationY = b.Position.Y + b.Height/2
	}

	return
}
示例#2
0
// Parse puts the text on a specific position on the page.
func (b *TextBox) Parse(doc documents.Document) {
	b.Font.Register(doc)

	if b.Rotation != 0 {
		doc.TransformBegin()

		rotationX, rotationY := b.getRotation(doc)
		doc.TransformRotate(b.Rotation, rotationX, rotationY)
	}

	if b.Text != "" {
		b.setPosition(doc)
		doc.MultiCell(b.Width, doc.PointConvert(b.Font.LineHeight), b.Text, "", b.Align, b.Fill)
	}

	if b.HTML != "" {
		leftMargin, topMargin, rightMargin, _ := doc.GetMargins()
		doc.SetLeftMargin(leftMargin + b.Position.X)
		doc.SetY(b.Position.Y + topMargin)

		if b.Width > 0 {
			pageWidth, _ := doc.GetPageSize()
			rm := pageWidth - rightMargin - (b.Position.X + b.Width)
			doc.SetRightMargin(rm)
		}

		html := doc.HTMLBasicNew()
		html.Write(doc.PointConvert(b.Font.LineHeight), b.HTML)

		doc.SetLeftMargin(leftMargin)
		doc.SetRightMargin(rightMargin)
	}

	if b.Rotation != 0 {
		doc.TransformEnd()
	}
}