wps.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package office
  2. import (
  3. "github.com/go-ole/go-ole"
  4. "github.com/go-ole/go-ole/oleutil"
  5. "log"
  6. )
  7. func WPSWordSaveTo(wordFilePath, targetFilePath string, WdSaveAsFormat int) error {
  8. defer func() {
  9. if err := recover(); err != nil {
  10. log.Printf("WPSWordSaveTo error: %v\n", err)
  11. }
  12. }()
  13. ole.CoInitialize(0)
  14. defer ole.CoUninitialize()
  15. iunk, err := oleutil.CreateObject("kwps.Application")
  16. if err != nil {
  17. log.Printf("creating Word object error: %s", err)
  18. }
  19. defer iunk.Release()
  20. word := iunk.MustQueryInterface(ole.IID_IDispatch)
  21. defer word.Release()
  22. oleutil.PutProperty(word, "DisplayAlerts", false)
  23. oleutil.PutProperty(word, "Visible", false)
  24. // opening then saving works due to the call to doc.Settings.SetUpdateFieldsOnOpen(true) above
  25. docs := oleutil.MustGetProperty(word, "Documents").ToIDispatch()
  26. defer docs.Release()
  27. doc := oleutil.MustCallMethod(docs, "Open", wordFilePath).ToIDispatch()
  28. defer doc.Release()
  29. /*
  30. WdExportFormat
  31. wdExportFormatPDF 17 将文档导出为 PDF 格式。
  32. wdExportFormatXPS 18 将文档导出为 XML Paper Specification (XPS) 格式。
  33. */
  34. oleutil.MustCallMethod(doc, "SaveAs", targetFilePath, WdSaveAsFormat)
  35. oleutil.PutProperty(doc, "Saved", true)
  36. oleutil.MustCallMethod(doc, "Close")
  37. oleutil.MustCallMethod(word, "Quit")
  38. return nil
  39. }