func (b *TextBox) setPosition(doc documents.Document) { if b.Position.Y >= 0 { doc.SetY(b.Position.Y) } if b.Position.X >= 0 { doc.SetX(b.Position.X) } }
// Register will register a font to the document for later usage. func (f FontType) Register(doc documents.Document) { if f.Color != "" { doc.SetTextColor(utils.HexToRGB(f.Color)) } if f.Type != "" && f.Size != 0 { doc.SetFont(f.Type, f.Weight, f.Size) } }
// Parse will draw the rectangle on the document with the given attributes. func (b *Rectangle) Parse(doc documents.Document) { if b.Rotation != 0 { doc.TransformBegin() fmt.Println(b.Position.X + b.Width/2) fmt.Println(b.Position.Y + b.Height/2) doc.TransformRotate(b.Rotation, b.Position.X+b.Width/2, b.Position.Y+b.Height/2) } doc.SetFillColor(utils.HexToRGB(b.Color)) doc.Rect(b.Position.X, b.Position.Y, b.Width, b.Height, "F") if b.Rotation != 0 { doc.TransformEnd() } }
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 }
// Parse will draw the line on the document for the given position and color. func (b *Line) Parse(doc documents.Document) { doc.SetDrawColor(utils.HexToRGB(b.Color)) doc.Line(b.Position.X, b.Position.Y, b.Position.X+b.W, b.Position.Y+b.H) }
// Parse will add a new page to the document and set the appropiate page // settings. func (b *AddPage) Parse(doc documents.Document) { doc.AddPage() doc.SetMargins(b.Margin.Left, b.Margin.Top, b.Margin.Right) doc.SetAutoPageBreak(true, b.Margin.Bottom) }
// Parse puts an image on the specified document for a specific position. func (i *Image) Parse(doc documents.Document) { tp := doc.ImageTypeFromMime(i.Mime) doc.RegisterImageReader(i.Url, tp, i.Image) doc.Image(i.Url, i.X, i.Y, i.W, i.H, false, tp, 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() } }