From 20be238175eecc5e68b74d0e98e5ec428610a904 Mon Sep 17 00:00:00 2001 From: Joop Kiefte Date: Mon, 31 Dec 2018 17:53:02 +0100 Subject: Beginning of the new structure under the Lexington name --- pdf/create.go | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 pdf/create.go (limited to 'pdf/create.go') diff --git a/pdf/create.go b/pdf/create.go new file mode 100644 index 0000000..abf0284 --- /dev/null +++ b/pdf/create.go @@ -0,0 +1,52 @@ +package pdf + +import ( + "github.com/lapingvino/lexington/lex" + "github.com/lapingvino/lexington/rules" + + "github.com/jung-kurt/gofpdf" +) + +var tr func(string) string + +type Tree struct { + PDF *gofpdf.Fpdf + Rules rules.Set + F lex.Screenplay +} + +func (t Tree) pr(a string, text string) { + line(t.PDF, t.Rules.Get(a), text) +} + +func (t Tree) Render() { + for _, row := range t.F { + if t.Rules.Get(row.Type).Hide { + continue + } + t.pr(row.Type, row.Contents) + } +} + +func line(pdf *gofpdf.Fpdf, format rules.Format, text string) { + pdf.SetFont(format.Font, format.Style, format.Size) + pdf.SetX(format.Left) + pdf.MultiCell(format.Width, 0.19, tr(text), "", "aligned", false) +} + +func Create(file string, format rules.Set, contents lex.Screenplay) { + pdf := gofpdf.New("P", "in", "Letter", "") + tr = pdf.UnicodeTranslatorFromDescriptor("") + pdf.AddPage() + pdf.SetMargins(1, 1, 1) + pdf.SetXY(1, 1) + f := Tree{ + Rules: format, + F: contents, + } + f.Render() + err := pdf.OutputFileAndClose(file) + if err != nil { + panic(err) + } +} -- cgit v1.2.3-70-g09d2