| 
					
				 | 
			
			
				@@ -1,12 +1,15 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 package renderer 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"bufio" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"encoding/json" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"fmt" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"html/template" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"io" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"mime" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net/http" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"net/url" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	"os" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"path" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"path/filepath" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	"reflect" 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -23,6 +26,7 @@ type Renderer interface { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type JSONRenderer struct{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type CSVRenderer struct{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+type PDFRenderer struct{} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type htmlTemplateData struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Data    interface{} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -47,6 +51,7 @@ var ( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"application/x-www-form-urlencoded": "html", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"application/json":                  "json", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		"text/csv; charset=utf-8":           "csv", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"application/pdf":                   "pdf", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 ) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -66,6 +71,11 @@ func init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	pdfRenderer, err := NewPDFRenderer() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Render = make(map[string]func(http.ResponseWriter, *http.Request, interface{}, ...url.Values)) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	Render["html"] = func(w http.ResponseWriter, r *http.Request, data interface{}, options ...url.Values) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -80,6 +90,10 @@ func init() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		csvRenderer.Render(w, r, data, options...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Render["pdf"] = func(w http.ResponseWriter, r *http.Request, data interface{}, options ...url.Values) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		pdfRenderer.Render(w, r, data, options...) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 func Query(values ...string) template.URL { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -164,6 +178,23 @@ func (rend *CSVRenderer) Render(w http.ResponseWriter, r *http.Request, data int 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func NewPDFRenderer() (*PDFRenderer, error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return &PDFRenderer{}, nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+func (rend *PDFRenderer) Render(w http.ResponseWriter, r *http.Request, data interface{}, options ...url.Values) error { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	w.Header().Set("Content-Type", "application/pdf") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	fileMap := data.(map[string]string) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	f, err := os.Open(filepath.Join("output", fileMap["document_id"], fileMap["id"], fileMap["filename"])) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if err != nil { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		panic(err) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	reader := bufio.NewReader(f) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	io.Copy(w, reader) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return nil 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 type HTMLRenderer struct { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	TemplatePath string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |