完整代碼:https://github.com/tangfc/signintech-gopdf.git
文檔地址:https://github.com/signintech/gopdf.git
1.導出數據到PDF(部分代碼)
package dbops
import (
"github.com/signintech/gopdf"
"strconv"
"go-test/pdf/defs"
"go-test/pdf/comm"
"log"
)
var (
downloadData []*defs.MemberInfo // 數據
curX float64
curY float64
k int
page int
)
func getSliceByString(str string) []string {
var s []string
r := []rune(str)
for i := 0; i < len(r); i++ {
s = append(s, string(r[i]))
}
return s
}
func getStringFormSliceString(strSlice []string) string {
var str string
for i := 0; i < len(strSlice); i++ {
str += strSlice[i]
}
return str
}
func WritePdf(filePath string, data []*defs.MemberInfo) error {
// 創建路徑
err = comm.CreateFilePath(filePath)
if err != nil {
log.Printf("%s", err.Error())
return err
}
pdf := gopdf.GoPdf{}
defer pdf.Close()
pdf.Start(gopdf.Config{PageSize: *gopdf.PageSizeA4})
pdf.AddPage()
page = page + 1 //
err := pdf.AddTTFFont("msyh", "./pdf/ttf/MicrosoftYaqiHeiLight-2.ttf") // 添加字體文件
if err != nil {
return err
}
err = pdf.SetFont("msyh", "", 14) // 設置字體和大小
if err != nil {
return err
}
pdf.SetLineWidth(0.5) // 設置線寬度
pdf.SetLineType("normal") // 設置線類型
pdf.SetX(220)
pdf.SetY(40)
pdf.Text("斗羅大陸史萊克七怪人員名單")
pdf.Line(30, 60, 565.28, 60) // 表單頂部
pdf.Line(30, 60, 30, 815) // 表單左1
pdf.Line(70, 60, 70, 815) // 表單左2
pdf.Line(140, 60, 140, 815) // 表單左3
pdf.Line(210, 60, 210, 815) // 表單左4
pdf.Line(280, 60, 280, 815) // 表單左5
pdf.Line(320, 60, 320, 815) // 表單左6
pdf.Line(565.28, 60, 565.28, 815) // 表單右1
pdf.Line(30, 815, 565.28, 815) // 表單底部
for i := 0; i <= 12; i++ {
pdf.Line(30, 35+60*float64(i+1), 565.28, 35+60*float64(i+1)) // 生成每行線
}
// 表單頭部
pdf.SetX(36)
pdf.SetY(70)
pdf.Cell(nil, "序號")
pdf.SetX(90)
pdf.SetY(70)
pdf.Cell(nil, "封號")
pdf.SetX(160)
pdf.SetY(70)
pdf.Cell(nil, "外號")
pdf.SetX(230)
pdf.SetY(70)
pdf.Cell(nil, "姓名")
pdf.SetX(285)
pdf.SetY(70)
pdf.Cell(nil, "性別")
//
pdf.SetX(420)
pdf.SetY(70)
pdf.Cell(nil, "簽名")
// 主體
for k, val := range data {
pdf.SetY(120 + float64((k)*60))
pdf.SetX(45)
pdf.Cell(nil, strconv.Itoa(k+1))
pdf.SetX(75)
pdf.Cell(nil, val.Username)
pdf.SetX(145)
pdf.Cell(nil, val.Nickname)
pdf.SetX(225)
pdf.Cell(nil, val.Realname)
pdf.SetX(295)
pdf.Cell(nil, val.Sex)
tipSlcie := getSliceByString(val.Signature)
tiplen := len(tipSlcie)
pdf.SetX(330)
pdf.SetY(110 + float64((k)*60))
pdf.Cell(nil, getStringFormSliceString(tipSlcie[0:16]))
if (tiplen >= 16) {
pdf.SetX(330)
pdf.SetY(130 + float64((k)*60))
pdf.Cell(nil, getStringFormSliceString(tipSlcie[16:32]))
}
}
err = pdf.WritePdf(filePath)
return err
}