Ранее мы разработали систему мониторинга пешеходов в живописном месте, после запуска системы продолжили ее настройку и оптимизацию, и она стабильно работает, теперь нужно создать сайт для живописного места, а сайт можно проверить статистику каждой временной точки дня. , и создать 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, что также является самым простым способом.