pdf.go 1.4 KB

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