如何通過Go語言html生成PDF?
之前我們在某景區開發了一個行人監測系統,系統上線後經過我們不斷的調整和優化,一直保持了穩定的執行,現在該景區需要製作一個網站,網站裡可以檢視一天中的每個時間點統計的人數,並生成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,這種也是最簡單的方法。
「其他文章」
- EasyCVR磁碟讀寫消耗大導致播放卡頓該如何解決?
- 智慧工廠:EasyNVR如何讓工廠實現現代化與智慧化影片監控與管理?
- AI人工智慧影片技術如何運用在森林火災監測中?
- 基於WebRTC開源框架的新版EasyRTC會議錄影播放下載實現邏輯
- 如何搭建多nginx實現影片分流?
- EasyGBS如何實現Nginx代理路徑的拼接?
- EasyCVR部署在Windows系統報錯“缺少dll處理檔案”,如何解決?
- EasyGBS安防影片平臺出現記憶體異常暴漲是什麼原因?
- 影片平臺人臉識別比對控制比對時間間隔的程式碼設計
- AI煙火檢測識別演算法在影片監控場景中的預警應用分析
- 程式設計師必看:13個GitHub開源又炫酷的計算機視覺專案
- 邊緣計算下的AI安全帽識別技術如何應用在工地安全生產中?
- EasyCVR影片 AI智慧檢測技術,助力電梯監控智慧化監管
- 影片直播點播EasyDSS如何實現C語言與Go語言的資料轉換?
- EasyNVR平臺Web頁面無法開啟的排查與解決步驟
- 安防影片監控平臺如何呼叫宇視SDK實現攝像機的雲臺控制?
- EasyCVR出現通道列表為空的問題排查與解決
- GB/T28181協議影片平臺EasyGBS影片快照優化,減少伺服器效能消耗
- 如何基於EasyCVR影片能力,搭建校園安防視覺化監管平臺?
- 淺析AI車牌識別技術與影片技術的融合