pdf.go 1.4 KB

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