首页 > 后端开发 > Golang > 正文

golang pdf转png

王林
发布: 2023-05-15 12:54:37
原创
1306人浏览过

随着数字化时代的到来,越来越多的文件被转化为了电子文档,其中 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:

立即学习go语言免费学习笔记(深入)”;

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 图像的一些配置信息。

PNG Maker
PNG Maker

利用 PNG Maker AI 将文本转换为 PNG 图像。

PNG Maker 36
查看详情 PNG Maker

接下来,我们可以使用 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的详细内容,更多请关注php中文网其它相关文章!

相关标签:
WPS零基础入门到精通全套教程!
WPS零基础入门到精通全套教程!

全网最新最细最实用WPS零基础入门到精通全套教程!带你真正掌握WPS办公! 内含Excel基础操作、函数设计、数据透视表等

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号