关闭

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

标签: pdfgolanggo
5216人阅读 评论(0) 收藏 举报
分类:

生命不止,继续 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 main

import (
    "fmt"

    "rsc.io/pdf"
)

func main() {
    file, err := pdf.Open("go.pdf")
    if err != nil {
        panic(err)
    }
    fmt.Println(file.NumPage())
}

读取某一页的内容

package main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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 main

import (
    "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")

}

这里写图片描述

1
0
查看评论

golang语言的电子书5本

  • 2013-05-23 09:36
  • 13.77MB
  • 下载

Go语言圣经中文版golang pdf

  • 2017-07-20 11:13
  • 3.84MB
  • 下载

Go语言编程pdf

  • 2018-01-19 09:56
  • 8.78MB
  • 下载

Golang学习书籍(pdf)

  • 2016-12-15 09:46
  • 12.57MB
  • 下载

Go语言圣经中文版golang pdf

  • 2016-04-01 11:38
  • 4.24MB
  • 下载

Go语言圣经(中文版)

http://golang-china.github.io/gopl-zh/index.html
  • dazheng
  • dazheng
  • 2016-01-29 14:12
  • 5182

Golang测试技术

本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,即介绍使用Golang开发 时会使用到的测试技术(主要针对单元测试),包括基本技术、高级技术(并发测试、mock/fake、竞争条件测试...
  • sunnyql
  • sunnyql
  • 2015-04-10 09:02
  • 2274

GoPdf的简单使用

GoPdf的简单使用 项目地址:https://github.com/signintech/gopdf 在最近的工作中要求使用go去生成一份PDF文档。一开始是选择的https://github.com/jung-kurt/gofpdf这家的,但是在测试的时候发现这货不支持中文。因此换...
  • u010846177
  • u010846177
  • 2017-01-12 00:06
  • 177

将网页转成pdf的方法

转自:http://www.novapdf.com/kb/convert-a-web-page-to-pdf-100.html Convert a web page to PDF Jan 27, 2015 Re...
  • yasi_xi
  • yasi_xi
  • 2015-08-31 14:24
  • 857

Go语言实战 文字版PDF 免费

  • 2017-08-20 15:09
  • 8.06MB
  • 下载
    个人资料
    • 访问:4746634次
    • 积分:42221
    • 等级:
    • 排名:第96名
    • 原创:571篇
    • 转载:29篇
    • 译文:13篇
    • 评论:784条
    微信公众号
      我的微信公众号
      为你推荐最新的博文~更有惊喜等着你
    时光荏苒
      白驹过隙
    博客专栏
    文章分类
    百度统计
    Google Analytics