文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

golang pdf转png

2023-05-15 12:37

关注

随着数字化时代的到来,越来越多的文件被转化为了电子文档,其中 PDF 文件是最常用的一种。PDF 文件的阅读体验相比于其他文件格式更加友好,但在一些特定场景中,PDF 文件的转化也是必要的,例如将 PDF 文件转化为 PNG 图片格式。

在 Golang 编程语言中,有多种方式可以实现 PDF 转 PNG 的功能。这些方法通常基于不同的第三方库实现。本文将介绍其中几种比较常用的方法。

方法一:使用 Ghostscript 和 ImageMagick

Ghostscript 是一种跨平台的 PostScript 和 PDF 解释器,可以将 PostScript 或 PDF 文件转换为多种格式的图像文件。ImageMagick 是一种功能强大的图像处理工具,可以处理多种图像格式。通过结合使用 Ghostscript 和 ImageMagick,我们可以实现 PDF 转 PNG 的功能。

首先,我们需要在命令行中执行以下命令来安装 Ghostscript 和 ImageMagick:

sudo apt install ghostscript imagemagick

然后,在 Golang 代码中,我们可以通过 os.Exec 函数在命令行中执行以下命令来进行 PDF 转 PNG:

cmd := exec.Command(
  "bash",
  "-c",
  fmt.Sprintf("gs -sDEVICE=pngalpha -r72 -o - %s | convert - %s.png", pdfFilePath, pngFilePath),
)
err := cmd.Run()

在上述代码中,我们使用 Ghostscript 将 PDF 文件转化为 PNG 流,然后使用 ImageMagick 将 PNG 流转化为 PNG 文件。其中,gs 命令的参数 -sDEVICE=pngalpha 表示输出 PNG 格式的图像,-r72 表示设置分辨率为 72dpi,-o 表示输出到标准输出流。

方法二:使用 GoFPDF 库和 rsvg-convert

GoFPDF 是一个基于 FPDF 和 UFPDF 的模块化 PDF 文档生成库,它可以用于创建和操作 PDF 文件。rsvg-convert 是一个基于 rsvg 库的命令行工具,可以将 SVG 文件转化为多种图像格式。通过结合使用 GoFPDF 和 rsvg-convert,我们可以实现 PDF 转 PNG 的功能。

首先,我们需要在命令行中执行以下命令来安装 rsvg-convert:

sudo apt install librsvg2-bin

然后,在 Golang 代码中,我们可以使用 GoFPDF 读取 PDF 文件,并将其转化为 SVG 文件,代码如下:

pdfReader := gofpdf.New("P", "mm", "A4", "")
pdfReader.SetSourceFile(pdfFile)

var buf bytes.Buffer
for i := 1; i <= pdfReader.GetPageCount(); i++ {
  tpl := pdfReader.ImportPage(i)
  opt := gofpdf.ImageOptions{}
  svg, err := tpl.ToSVG(&opt)
  if err != nil {
    return err
  }
  buf.Write(svg)
}

svgData := buf.Bytes()
svgFile, err := os.Create(svgFilePath)
if err != nil {
  return err
}
defer svgFile.Close()

_, err = svgFile.Write(svgData)
if err != nil {
  return err
}

在上述代码中,我们使用 gofpdf.ImportPage 将 PDF 文件的每一页转化为模板(Template),然后使用 ToSVG 方法将每个模板转化为 SVG 文件,并将多个 SVG 文件合并为一个文件保存在本地。需要注意的是,gofpdf.ToSVG 的参数 opt 是一个 gofpdf.ImageOptions 结构体,它包含了转换后 SVG 图像的一些配置信息。

接下来,我们可以使用 rsvg-convert 命令将 SVG 文件转化为 PNG 文件,代码如下:

cmd := exec.Command(
  "bash",
  "-c",
  fmt.Sprintf("rsvg-convert -f png -o %s %s", pngFilePath, svgFilePath),
)
err := cmd.Run()

在上述代码中,我们使用 rsvg-convert 命令将 SVG 文件转化为 PNG 文件,并保存在本地文件系统中。

方法三:使用 UniDoc 库

UniDoc 是一个针对 PDF 文件和其他文档类型的功能强大的 Golang 库,支持各种 PDF 操作,包括 PDF 转 PNG。UniDoc 使用的是 Ghostscript 进行 PDF 转 PNG 的操作。

使用 UniDoc 的代码如下:

pdfReader, err := unipdf.NewPdfReaderFromFile(pdfFilePath)
if err != nil {
  log.Fatalf("Error: %v", err)
}

numPages, err := pdfReader.GetNumPages()
if err != nil {
  log.Fatalf("Error: %v", err)
}

for i := 1; i <= numPages; i++ {
  page, err := pdfReader.GetPageAsImg(i)
  if err != nil {
    log.Fatalf("Error: %v", err)
  }

  pngFile, err := os.Create(pngFilePath)
  defer pngFile.Close()

  if err := png.Encode(pngFile, page); err != nil {
    log.Fatalf("Error: %v", err)
  }
}

在上述代码中,我们使用 UniDoc 的 GetPageAsImg 方法将 PDF 文件的每一页转化为包含图片数据的 Image 类型,然后使用 Golang 内置的 png 库将 Image 类型转化为 PNG 文件并保存到本地磁盘。

总结:

以上三种方法中,对于基于 Ghostscript 和 ImageMagick 的方法和基于 GoFPDF 库和 rsvg-convert 工具的方法,我们需要先在命令行中安装相关的工具,然后在 Golang 代码中使用 os.Exec 函数执行相应的命令。对于基于 UniDoc 库的方法,我们只需要导入 UniDoc 库并使用其中的相关方法即可。

综上所述,除了 Golang 自带的 PNG 库外,以上三种方法都使用了第三方库或命令行工具来实现 PDF 转 PNG 的功能。在选择具体实现方法时,我们可以根据项目需要和自身技术栈的特点进行选择。

以上就是golang pdf转png的详细内容,更多请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯