Go实战--golang中操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)
来源:互联网 发布:中国顺差逆差数据 编辑:程序博客网 时间:2024/04/28 06:10
生命不止,继续 go go go !!!
昨天介绍了golang中如何操作excel:
Go实战–golang中操作excel(tealeg/xlsx、360EntSecGroup-Skylar/excelize)
那么今天就跟大家分享一下,golang中如何操作PDF。
PDF简介
The Portable Document Format (PDF) is a file format used to present documents in a manner independent of application software, hardware, and operating systems.[3] Each PDF file encapsulates a complete description of a fixed-layout flat document, including the text, fonts, graphics, and other information needed to display it.
pdf(Portable Document Format的简称,意为“便携式文档格式”),是由Adobe Systems用于与应用程序、操作系统、硬件无关的方式进行文件交换所发展出的文件格式。PDF文件以PostScript语言图象模型为基础,无论在哪种打印机上都可保证精确的颜色和准确的打印效果,即PDF会忠实地再现原稿的每一个字符、颜色以及图象。
rsc.io/pdf
github地址:
https://github.com/rsc/pdf
Star: 202
文档地址:
https://godoc.org/rsc.io/pdf
获取:
go get rsc.io/pdf
读取PDF文件,获取总页数
package mainimport ( "fmt" "rsc.io/pdf")func main() { file, err := pdf.Open("go.pdf") if err != nil { panic(err) } fmt.Println(file.NumPage())}
读取某一页的内容
package mainimport ( "fmt" "rsc.io/pdf")func main() { file, err := pdf.Open("test.pdf") if err != nil { panic(err) } fmt.Println(file.Page(2).Content())}
jung-kurt/gofpdf
注意:该库不支持中文!!!
github地址:
https://github.com/jung-kurt/gofpdf
Star: 733
文档地址:
https://godoc.org/github.com/jung-kurt/gofpdf
获取:
go get github.com/jung-kurt/gofpdf
生成PDF文档
package mainimport ( "fmt" "github.com/jung-kurt/gofpdf")func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "B", 26) pdf.Cell(40, 10, "Hello PDF World") err := pdf.OutputFileAndClose("write_pdf.pdf") if err != nil { fmt.Println(err) }}
生成加密的PDF
package mainimport ( "fmt" "github.com/jung-kurt/gofpdf")func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.SetProtection(gofpdf.CnProtectPrint, "123", "abc") pdf.AddPage() pdf.SetFont("Arial", "", 12) pdf.Write(10, "You Must Enter the Password!!!") err := pdf.OutputFileAndClose("write_pdf_with_password.pdf") if err != nil { fmt.Println(err) }}
PDF中插入图片
package mainimport ( "fmt" "github.com/jung-kurt/gofpdf")func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Arial", "", 11) pdf.Image("test.png", 10, 10, 30, 0, false, "", 0, "") pdf.Text(50, 20, "test.png") pdf.Image("test.gif", 10, 40, 30, 0, false, "", 0, "") pdf.Text(50, 50, "test.gif") pdf.Image("test.jpg", 10, 130, 30, 0, false, "", 0, "") pdf.Text(50, 140, "test.jpg") err := pdf.OutputFileAndClose("write_pdf_with_image.pdf") if err != nil { fmt.Println(err) }}
PDF中增加链接、HTML
package mainimport ( "fmt" "github.com/jung-kurt/gofpdf")func main() { pdf := gofpdf.New("P", "mm", "A4", "") pdf.AddPage() pdf.SetFont("Helvetica", "", 20) _, lineHt := pdf.GetFontSize() pdf.Write(lineHt, "To find out what's new in this tutorial, click ") pdf.SetFont("", "U", 0) link := pdf.AddLink() pdf.WriteLinkID(lineHt, "here", link) pdf.SetFont("", "", 0) // Second page: image link and basic HTML with link pdf.AddPage() pdf.SetLink(link, 0, -1) pdf.Image("test.png", 10, 12, 30, 0, false, "", 0, "http://blog.csdn.net/wangshubo1989?viewmode=contents") pdf.SetLeftMargin(45) pdf.SetFontSize(14) _, lineHt = pdf.GetFontSize() htmlStr := `You can now easily print text mixing different styles: <b>bold</b>, ` + `<i>italic</i>, <u>underlined</u>, or <b><i><u>all at once</u></i></b>!<br><br>` + `<center>You can also center text.</center>` + `<right>Or align it to the right.</right>` + `You can also insert links on text, such as ` + `<a href="http://www.fpdf.org">http://blog.csdn.net/wangshubo1989?viewmode=contents</a>, or on an image: click on the logo.` html := pdf.HTMLBasicNew() html.Write(lineHt, htmlStr) err := pdf.OutputFileAndClose("write_html.pdf") if err != nil { fmt.Println(err) }}
signintech/gopdf
既然jung-kurt/gofpdf不支持中文,那么就介绍一个支持中文的signintech/gopdf。
github地址:
https://github.com/signintech/gopdf
Star: 422
获取:
go get -u github.com/signintech/gopdf
生成PDF文件
为了炫酷一点,自己从网上下载一个字体。
package mainimport ( "log" "github.com/signintech/gopdf")func main() { pdf := gopdf.GoPdf{} pdf.Start(gopdf.Config{PageSize: gopdf.Rect{W: 595.28, H: 841.89}}) //595.28, 841.89 = A4 pdf.AddPage() err := pdf.AddTTFFont("wts11", "TTENuoJ_0.ttf") if err != nil { log.Print(err.Error()) return } err = pdf.SetFont("wts11", "", 14) if err != nil { log.Print(err.Error()) return } pdf.Cell(nil, "我闭目在经殿的香雾中, 蓦然听见你颂经中的真言;") pdf.WritePdf("hello.pdf")}
- Go实战--golang中操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)
- Go实战--golang中使用WebSocket实时聊天室(gorilla/websocket、nkovacs/go-socket.io)
- Go实战--golang中使用go-spew(davecgh/go-spew)
- Go实战--golang中使用MongoDB(mgo)
- Go实战--golang中操作excel(tealeg/xlsx、360EntSecGroup-Skylar/excelize)
- Go实战--golang中文件以及文件夹路径相关操作
- Go实战--golang中使用JWT(JSON Web Token)
- Go实战--golang中读写文件的几种方式
- Go实战--golang中使用markdown(russross/blackfriday)
- Go实战--golang中读写文件的几种方式
- Go实战--golang中使用firebase实时数据库(zabawaba99/firego)
- Go实战--golang中使用RethinkDB(gorethink/gorethink.v3)
- 实战Pdf怎么分割
- Python开发实战pdf
- Netty实战(精髓)pdf
- React开发实战pdf
- Spring Boot实战pdf
- Redis实战pdf
- BZOJ1934: [Shoi2007]Vote 善意的投票
- 扩增子分析还聚OTU就真OUT了,试试unoise3
- HttpClient_Post请求
- 控件
- HDU-2490-Parade
- Go实战--golang中操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)
- Windows2003远程桌面出现网格线的解决方法
- #!/usr/bin/env python与#!/usr/bin/python的区别-*-coding:utf-8-*-和 coding:utf-8区别
- post
- Es优化(二)
- 自然语言处理入门阶段
- 洛克菲勒难题三
- String was not recognized as a valid DateTime.
- Two Sum