使用 go-wkhtmltopdf 將html轉pdf

  1. GoLand IDE創建go項目
    這裏項目名稱爲 toPDF

  2. 添加main.go文件,添加main函數,
    例子來自: https://github.com/adrg/go-wkhtmltopdf

package main

import (
	"fmt"
	"github.com/adrg/go-wkhtmltopdf"
	"log"
)

func main(){
	pdf.Init()
	defer pdf.Destroy()

	// Create object from url
	object1, err := pdf.NewObject("https://www.baidu.com/")
	if err != nil {
		log.Fatal(err)
	}
	object1.SetOption("footer.right", "[page]")
	
	// Create converter
	converter := pdf.NewConverter()
	defer converter.Destroy()

	// Add created objects to the converter
	converter.AddObject(object1)

	// Add converter options
	converter.SetOption("documentTitle", "Sample document")
	converter.SetOption("margin.left", "10mm")
	converter.SetOption("margin.right", "10mm")
	converter.SetOption("margin.top", "10mm")
	converter.SetOption("margin.bottom", "10mm")

	// Convert the objects and get the output PDF document
	output, err := converter.Convert()
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println(string(output))
}

  1. GoLand terminal 執行 go run main.go
    GoLand會自動提示下載github.com/adrg/go-wkhtmltopdf
    也可以手動在terminal中輸入: go get github.com/adrg/go-wkhtmltopdf來下載

下載下來之後,運行go run main.go
報:找不到gcc編譯器

  1. 下載安裝MinGW
    下載安裝mingw-w64-install.exe
    添加到path環境變量:C:\javaware\mingw\mingw64\bin

  2. 下載wkhtmltopdf
    go-wkhtmltopdf項目又依賴於wkhtmltopdf,
    terminal中輸入: go get github.com/wkhtmltopdf/wkhtmltopdf進行下載

再次執行:go run main.go
結果報錯:fatal error: wkhtmltox/pdf.h: No such file or directory
報錯原因,看了一下,應該是如下的include引起的:

package pdf

/*
#cgo LDFLAGS: -lwkhtmltox
#include <stdio.h>
#include <stdlib.h>
#include <wkhtmltox/pdf.h>
*/
import "C"

import (
	"errors"
	"unsafe"
)

type Converter struct {
	converter *C.wkhtmltopdf_converter
	settings  *C.wkhtmltopdf_global_settings

	objects []*Object
}
...
  1. wkhtmltox
    又牽扯到了wkhtmltox,繼續下載github.com/tcort/wkhtmltox
    嘗試go get github.com/tcort/wkhtmltox
    結果報:go: warning: “github.com/tcort/wkhtmltox/…” matched no packages
    手動下載binary:https://wkhtmltopdf.org/downloads.html
    這裏我下載了wkhtmltox-0.12.5-1.mxe-cross-win64.7z,裏面包含:
    ./bin
    libwkhtmltox.a
    wkhtmltox.dll
    wkhtmltoimage.exe
    wkhtmltopdf.exe
    ./include/wkhtmltox
    dllbegin.inc
    dllend.inc
    image.h
    pdf.h
    然後
    把include裏面的wkhtmltox目錄複製到MinGW64的安裝目錄:
    C:\javaware\mingw\mingw64\x86_64-w64-mingw32\include
    把bin裏面的 libwkhtmltox.a, wkhtmltox.dll拷貝到:
    C:\javaware\mingw\mingw64\x86_64-w64-mingw32\lib
    把bin裏面的wkhtmltoimage.exe,wkhtmltopdf.exe拷貝到:
    C:\javaware\mingw\mingw64\x86_64-w64-mingw32\bin

再次執行:go run main.go
這次終於運行成功了:

/CreationDate (D:20181025170310+08'00')
>>
endobj
3 0 obj
<<
/Type /ExtGState
/SA true
/SM 0.02
/ca 1.0
/CA 1.0
...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章