Go實戰--golang中操作PDF(rsc.io/pdf、jung-kurt/gofpdf、signintech/gopdf)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

生命不止,繼續 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")}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.