zoukankan      html  css  js  c++  java
  • TSINGSEE青犀视频开发景区网站如何通过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,这种也是最简单的方法。

  • 相关阅读:
    什么是 go vendor
    Golang包管理工具之govendor的使用
    国内的go get问题的解决
    集群、限流、缓存 BAT 大厂无非也就是这么做
    Gin框架中文文档
    GO——beego简单开发实例(二)
    C++11 并发指南四(<future> 详解一 std::promise 介绍)(转)
    C++11 并发指南三(std::mutex 详解)(转)
    C++11 并发指南二(std::thread 详解)(转)
    用C++设计一个不能被继承的类(转)
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/15752191.html
Copyright © 2011-2022 走看看