pdf.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package util
  2. import (
  3. "context"
  4. "encoding/base64"
  5. "fmt"
  6. "github.com/gogf/gf/v2/errors/gerror"
  7. "github.com/gogf/gf/v2/frame/g"
  8. "github.com/gogf/gf/v2/os/gfile"
  9. "time"
  10. )
  11. func SavePdfFile(ctx context.Context, num, pdfBase64 string) (filePath string, err error) {
  12. var (
  13. rootDir = g.Cfg().MustGet(ctx, "pdfFilePathRootDir", "/out").String()
  14. pathPrefix = g.Cfg().MustGet(ctx, "pdfFilePathPrefix", "/invoice").String()
  15. webDoMain = g.Cfg().MustGet(ctx, "pdfFilePathDomain", "https://www.jianyu360.com").String()
  16. now = time.Now()
  17. requestPath = fmt.Sprintf("/%s/%s/%s_%d.pdf", pathPrefix, now.Format("2006-01-02"), num, now.Unix())
  18. fileFullPath = fmt.Sprintf("%s%s", rootDir, requestPath)
  19. )
  20. data, err := base64.StdEncoding.DecodeString(pdfBase64)
  21. if err != nil {
  22. return "", gerror.Wrap(err, "解析文件base64编码失败")
  23. }
  24. pdfFile, err := gfile.Create(fileFullPath)
  25. if err != nil {
  26. return "", gerror.Wrap(err, "创建pdf文件异常")
  27. }
  28. if _, err = pdfFile.Write(data); err != nil {
  29. return "", gerror.Wrap(err, "pdf文件写入异常")
  30. }
  31. return fmt.Sprintf("%s%s", webDoMain, requestPath), nil
  32. }
  33. func GetPdfBase64(filePath string) (base64Str string, err error) {
  34. fileBytes := gfile.GetBytes(filePath)
  35. if len(fileBytes) == 0 {
  36. return "", gerror.New("文件内容为空")
  37. }
  38. return base64.StdEncoding.EncodeToString(fileBytes), nil
  39. }