TSINGSEE青犀視訊開發景區網站如何通過Go語言html生成PDF?
阿新 • • 發佈:2021-12-31
之前我們在某景區開發了一個行人監測系統,系統上線後經過我們不斷的調整和優化,一直保持了穩定的執行,現在該景區需要製作一個網站,網站裡可以檢視一天中的每個時間點統計的人數,並生成PDF,供下載檢視。由於在服務端我們使用的是Go語言製作,所以這裡我們用的一個go-wkhtmltopdf來實現該功能。
生成第一個PDF可以是想要的格式(沒有問題):
第二次生成PDF就會出現下圖錯誤的情況:
在檢視控制檯應用出現如下錯誤提示:
生成PDF的程式碼:
func WritePDFFile(htmlPath, pdfPath string) error { if err := pdf.Init(); err != nil { return err } pdf.Destroy() // Create object from URL. object2, err := pdf.NewObject(htmlPath) if err != nil { return err } // Create converter. converter, err := pdf.NewConverter() if err != nil { return err } defer converter.Destroy() // Add created objects to the converter. converter.Add(object2) // Set converter options. converter.Title = "人數統計" converter.PaperSize = pdf.A4 converter.Orientation = pdf.Portrait converter.MarginTop = "1cm" converter.MarginBottom = "1cm" converter.MarginLeft = "10mm" converter.MarginRight = "10mm" // Convert objects and save the output PDF document. outFile, err := os.Create(pdfPath) if err != nil { return err } defer outFile.Close() if err := converter.Run(outFile); err != nil { return err } return nil }
上面的程式碼是在該函式初始化PDF例項,並將該函式銷燬。呼叫下載PDF介面時,第一次呼叫沒有錯誤,但是第二次呼叫會出現不在主執行緒中的問題,所以需要將PDF初始化例項先例項化在主執行緒中,即可解決。
解決辦法有二個可以生成PDF:
1、在主函式初始化例項。
2、使用exe命令直接轉換PDF,這種也是最簡單的方法。