pdf.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package pdf
  2. import (
  3. "bytes"
  4. "fmt"
  5. "gbase/glog"
  6. "github.com/axgle/mahonia" //编码转换
  7. "os"
  8. "os/exec"
  9. "path/filepath"
  10. )
  11. // @title XPdfToPng
  12. // @description 把整个pdf渲染成png
  13. // @param
  14. // @return
  15. func ConvertPdfFileToPng(pdfPath string, subPath, fileName string) error {
  16. currentDir, _ := os.Getwd()
  17. xpdfPath := filepath.Join(currentDir, "tool", "pdftopng.exe")
  18. //println(xpdfPath)
  19. _, err := os.Stat(xpdfPath)
  20. if os.IsNotExist(err) {
  21. fmt.Println("file no exist.")
  22. return fmt.Errorf("pdftopng.exe not found in ./tools")
  23. }
  24. //cmdLine := fmt.Sprintf("cd %s && %s %s %s", subPath,xpdfPath,pdfPath, fileName)
  25. //println(cmdLine)
  26. cmdArgs := []string{
  27. "/C",
  28. "cd",
  29. subPath,
  30. "&&",
  31. xpdfPath,
  32. "-f",
  33. "1",
  34. "-l",
  35. "1",
  36. "-r",
  37. "250",
  38. pdfPath,
  39. fileName,
  40. }
  41. c := exec.Command("cmd.exe", cmdArgs...)
  42. var stdout bytes.Buffer
  43. var stderr bytes.Buffer
  44. var enc mahonia.Decoder
  45. enc = mahonia.NewDecoder("gbk")
  46. c.Stdout = &stdout
  47. c.Stderr = &stderr
  48. err = c.Run()
  49. if err != nil {
  50. fmt.Printf("XPdfToPng Error: %s %s\n", err, enc.ConvertString(stderr.String()))
  51. //go Xlog(logPath, strings.Join(cmdArgs, " "))
  52. glog.XWarning(fmt.Sprintf("%s,XPdfToPng Error: %s %s\n", pdfPath, err, enc.ConvertString(stderr.String())))
  53. return fmt.Errorf("%s,XPdfToPng Error: %s %s\n", pdfPath, err, enc.ConvertString(stderr.String()))
  54. }
  55. //fmt.Printf("XPdfToPng Result: %s\n", stdout.String())
  56. return nil
  57. }