utils.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. package utils
  2. import(
  3. "fmt"
  4. //"fmt"
  5. //"html"
  6. //"net/mail"
  7. "os"
  8. "time"
  9. "bytes"
  10. "regexp"
  11. "os/exec"
  12. //"reflect"
  13. "strings"
  14. "io/ioutil"
  15. "encoding/base64"
  16. "golang.org/x/net/html/charset"
  17. //"errors"
  18. //"strings"
  19. //"encoding/json"
  20. //"gopkg.in/mgo.v2"
  21. //"gopkg.in/mgo.v2/bson"
  22. //"git.gojus.com.br/eugeniucarvalho/gojus/shared"
  23. //"git.gojus.com.br/eugeniucarvalho/gojus/config"
  24. //"git.gojus.com.br/eugeniucarvalho/gojus/services"
  25. )
  26. func Now() int64{
  27. return time.Now().Unix()
  28. }
  29. func ToUTF8(str, origEncoding string) string {
  30. byteReader := bytes.NewReader([]byte(str))
  31. reader, _ := charset.NewReaderLabel(origEncoding, byteReader)
  32. strBytes, _ := ioutil.ReadAll(reader)
  33. return string(strBytes)
  34. }
  35. func FileGetContents(filename string) (string, error){
  36. b, err := ioutil.ReadFile(filename)
  37. if err != nil { return "", err }
  38. return string(b), nil
  39. }
  40. func FilePutContents(filename string, content string, perm os.FileMode) error {
  41. cont := []byte(content)
  42. if err := ioutil.WriteFile(filename, cont, perm) ; err != nil { return err }
  43. f, err1 := os.Create(filename)
  44. if err1 != nil { return err1 }
  45. defer f.Close()
  46. _, err2 := f.Write(cont)
  47. //if err2 != nil { return err2 }
  48. //f.Sync()
  49. return err2
  50. }
  51. func RemoveFile(file string) error {
  52. err := os.Remove(file)
  53. if err != nil {
  54. return err
  55. }
  56. return nil
  57. }
  58. func Encode(delimiter string, values ...string) string {
  59. return ToBase64(strings.Join(values, delimiter))
  60. }
  61. func ToBase64(s string) string {
  62. return base64.StdEncoding.EncodeToString([]byte(s))
  63. }
  64. func FromBase64(value string) (string, error) {
  65. dec, err := base64.StdEncoding.DecodeString(value)
  66. return string(dec), err
  67. }
  68. func Decode(delimiter, value string) ([]string, error) {
  69. decoded, err := FromBase64(value)
  70. if err != nil { return []string{}, err }
  71. return strings.Split(string(decoded), delimiter), nil
  72. }
  73. type Thumbnail struct {
  74. Resolution string
  75. // Adiciona o arquivo de entrada
  76. // path e o caminho do arquivo e pages sao as paginas a serem convertidas
  77. // pages = "[0]" - representa a pagina 1
  78. // pages = "" - representa todas as paginas
  79. Input string
  80. Output string
  81. InExt string
  82. Page string
  83. }
  84. func NewThumbnail() *Thumbnail {
  85. t := &Thumbnail{}
  86. t.Resolution = "x300"
  87. return t;
  88. }
  89. var (
  90. ThumbSoffice = regexp.MustCompile("(doc|ppt|pps|pot|xls|xlt|xlw|dot|csv|txt|rtf)(x|m)?")
  91. )
  92. func(t *Thumbnail) Gen() error {
  93. var err error
  94. if t.Input == "" {
  95. return fmt.Errorf("Input is empty")
  96. }
  97. if t.InExt == "" {
  98. // todo -- pegar a extensao do arquivo de entrada
  99. }
  100. cmd := ""
  101. remove := false
  102. // Converte alguns tipos de arquivo para a imagem para depois converter para thumbnail
  103. if ThumbSoffice.Match([]byte(strings.ToLower(t.InExt))) {
  104. //cmd = "convert -thumbnail %s -background white -alpha remove %s %s"
  105. cmd = "soffice --headless --convert-to png --outdir %s %s"
  106. index := strings.LastIndex(t.Output,"/")
  107. outputdir := t.Output[0: index]
  108. if err = Exec(fmt.Sprintf(cmd, outputdir, t.Input)); err != nil {
  109. return err
  110. }
  111. t.Input = t.Output
  112. // strings.Replace(t.Input, t.InExt, ".png", -1)
  113. fmt.Println("new input -", t.InExt,"-", t.Input)
  114. remove = true
  115. }
  116. // Cria o thumbnail
  117. cmd = "convert -thumbnail %s -background white -alpha remove %s %s"
  118. Exec(fmt.Sprintf(cmd, t.Resolution, t.Input + t.Page, t.Output))
  119. // Apaga o arquivo temporario gerado pela conversao intermediaria
  120. if remove {
  121. // RemoveFile(t.Input)
  122. }
  123. return nil;
  124. }
  125. func Exec(cmd string) error {
  126. fmt.Println("Executando .. ", cmd)
  127. out, err := exec.Command("bash", "-c", cmd).Output()
  128. if err != nil {
  129. fmt.Println("error occured ", err.Error())
  130. return err
  131. }
  132. fmt.Println("out >> ", string(out))
  133. return err
  134. }
  135. /*
  136. func Push(slice interface{}, el interface{}, call func(interface{}) bool) {
  137. switch reflect.TypeOf(slice).Kind() {
  138. case reflect.Slice:
  139. s := reflect.ValueOf(t)
  140. push := true
  141. item := reflect.ValueOf(el).Elem()
  142. for i := 0; i < s.Len(); i++ {
  143. push = call(s. ,item)
  144. }
  145. if push {
  146. s = append(s, item)
  147. }
  148. }
  149. }
  150. */