图片转pdf golang

最近我在开发一个文件转换工具时,需要将多张图片转换为一个pdf文件。由于我使用的是golang语言,因此我选择了使用go语言编写一个图片转pdf的程序。

在这篇文章中,我将分享我在开发过程中获得的经验和一些关键细节。以下是该程序的主要功能和流程:

读取多个图片文件创建PDF文件将所有的图片转换为PDF页面保存所有页面到PDF文件

首先,我们需要处理的是文件读取。Go中有一个标准库 “io/ioutil” 用于读取文件,并且非常方便易用。我们可以通过使用该库中的ReadDir()方法获取指定目录下的所有文件。

func getImagesFromDir(dir string) ([]string, error) {    files, err := ioutil.ReadDir(dir)    images := []string{}    if err != nil {        return images, err    }    for _, file := range files {        if !file.IsDir() && strings.Contains(file.Name(), ".jpg") {            images = append(images, filepath.Join(dir, file.Name()))        }    }    return images, nil}

登录后复制

接下来,我们需要创建一个PDF文件。Go中有多个第三方库可以创建PDF文件,我们可以选择使用GoFPDF库。该库提供多种自定义选项和功能,如调整页面大小,设置字体和颜色等。

pdf := gofpdf.New("P", "mm", "A4", "")pdf.AddPage()pdf.SetFont("Arial", "B", 16)pdf.Cell(40, 10, "Hello, world!")pdf.OutputFileAndClose("hello.pdf")

登录后复制

我们现在已经成功地创建了一个PDF文件,但是我们还没有将图片添加到其中。下一步是将所有的图片转换为PDF页面,这可以通过将图片添加为页面背景来实现。我们可以使用Go中的image和image/draw标准库来打开和处理图片。

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

func imageToPdf(imagePath string, pdf *gofpdf.Fpdf) {    image.RegisterFormat("jpeg", "jpeg", jpeg.Decode, jpeg.DecodeConfig)    f, err := os.Open(imagePath)    defer f.Close()    if err != nil {        log.Fatal("Failed to open file:", err)    }    // decode the image    img, _, err := image.Decode(f)    if err != nil {        log.Fatal("Failed to decode image:", err)    }    // get image dimensions    w := float64(img.Bounds().Max.X)    h := float64(img.Bounds().Max.Y)    // add page to pdf    pdf.AddPageFormat("P", gofpdf.SizeType{Wd: w, Ht: h})    pdf.Image(imagePath, 0, 0, w, h, false, "", 0, "")}

登录后复制

最后一步是将所有的页面保存到PDF文件中。我们可以使用golang中的WriteFile()方法来将所有页面写入到以pdf为后缀的文件中。

func savePdf(pdf *gofpdf.Fpdf, outputPath string) error {    return pdf.OutputFileAndClose(outputPath)}

登录后复制

现在我们可以将上述所有代码整合在一起来实现一个完整的图片转PDF的程序。

package mainimport (    "fmt"    "github.com/jung-kurt/gofpdf"    "image"    "image/jpeg"    "io/ioutil"    "log"    "os"    "path/filepath"    "strings")func getImagesFromDir(dir string) ([]string, error) {    files, err := ioutil.ReadDir(dir)    images := []string{}    if err != nil {        return images, err    }    for _, file := range files {        if !file.IsDir() && strings.Contains(file.Name(), ".jpg") {            images = append(images, filepath.Join(dir, file.Name()))        }    }    return images, nil}func imageToPdf(imagePath string, pdf *gofpdf.Fpdf) {    image.RegisterFormat("jpeg", "jpeg", jpeg.Decode, jpeg.DecodeConfig)    f, err := os.Open(imagePath)    defer f.Close()    if err != nil {        log.Fatal("Failed to open file:", err)    }    // decode the image    img, _, err := image.Decode(f)    if err != nil {        log.Fatal("Failed to decode image:", err)    }    // get image dimensions    w := float64(img.Bounds().Max.X)    h := float64(img.Bounds().Max.Y)    // add page to pdf    pdf.AddPageFormat("P", gofpdf.SizeType{Wd: w, Ht: h})    pdf.Image(imagePath, 0, 0, w, h, false, "", 0, "")}func savePdf(pdf *gofpdf.Fpdf, outputPath string) error {    return pdf.OutputFileAndClose(outputPath)}func main() {    inputDir := "input"    outputPdf := "output.pdf"    fmt.Printf("Reading images from '%v'", inputDir)    images, err := getImagesFromDir(inputDir)    if err != nil {        log.Fatal("Failed to read images:", err)    }    if len(images) == 0 {        log.Fatal("No images found in directory")    }    fmt.Printf("Found %v images", len(images))    pdf := gofpdf.New("P", "mm", "A4", "")    for _, imagePath := range images {        fmt.Printf("Converting '%v'", imagePath)        imageToPdf(imagePath, pdf)    }    if err = savePdf(pdf, outputPdf); err != nil {        log.Fatal("Failed to save PDF:", err)    }    fmt.Printf("Saved PDF to '%v'", outputPdf)}

登录后复制

几点建议:

改进扩展。如果您的应用程序需要使用更多的文件扩展名,请记得在getImagesFromDir函数中进行相应的变更。缩放图片。您可以使用image/draw库中的方法可以缩放图片以避免溢出PDF页面。添加页码或文本。除了应用程序中显示的图片之外,您还可以添加文本、标题、页码等内容。

结论:

图片转PDF是一项常见的任务,但这并不意味着它应该过于困难或复杂。主要关注文件读取、PDF文件创建、将图片转换为PDF页面以及将所有页面保存到单个文件的过程,就可以构建自己的转换程序。如果您的项目依赖于将图片转换为PDF文件,我们建议您使用Golang语言。

以上就是图片转pdf golang的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2546360.html

(0)
上一篇 2025年3月6日 04:31:46
下一篇 2025年3月6日 04:31:59

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用Linux进行文件系统性能调优

    如何使用linux进行文件系统性能调优 引言:文件系统是操作系统中非常关键的一部分,它负责管理和存储文件数据。在Linux系统中,有多种文件系统可供选择,如ext4、XFS、Btrfs等。为了获得更好的性能和效率,对文件系统进行调优是至关重…

    编程技术 2025年4月5日
    100
  • 超实用的 Linux 高级命令,程序员一定要懂!

    前言 在运维的坑里摸爬滚打好几年了,我还记得我刚开始的时候,我只会使用一些简单的命令,写脚本的时候,也是要多简单有多简单,所以有时候写出来的脚本又长又臭。 像一些高级点的命令,比如说 Xargs 命令、管道命令、自动应答命令等,如果当初我要…

    2025年4月5日 编程技术
    200
  • 如何使用Nginx进行HTTP请求的重定向和URL重写

    如何使用nginx进行http请求的重定向和url重写 Nginx是一个高性能的Web服务器和反向代理服务器,它也提供了强大的功能来管理HTTP请求的重定向和URL重写。在本文中,我们将介绍如何使用Nginx配置文件来实现这些功能,并提供代…

    编程技术 2025年4月5日
    100
  • 如何使用Linux进行网络性能调优

    如何使用linux进行网络性能调优 网络性能是计算机网络中一个非常重要的指标,它直接关系到用户的网络体验。在Linux系统中,我们可以通过一些简单的网络性能调优来提升网络的传输速度和稳定性。本文将介绍常见的Linux网络性能调优方法,并提供…

    编程技术 2025年4月5日
    100
  • 4 个 Linux 技巧,你值得拥有

    Linux 已经逐渐成为了最受开发者欢迎的操作系统。本文将介绍四个极为实用的技巧,相信这将能够提高您在 Linux 下的工作效率和流畅性,也让工作变得更为舒适、优雅。 1. 跳转目录优雅顺滑 1.1 bd 命令 快速回到 Bash 中的特定…

    2025年4月5日 编程技术
    100
  • 如何使用Nginx进行高性能的静态文件缓存

    如何使用nginx进行高性能的静态文件缓存 Nginx是一款轻量级的开源Web服务器,以其高性能和高并发能力而受到广泛的关注和使用。除了作为Web服务器之外,Nginx还有一个重要的功能,就是提供静态文件缓存功能,可以大幅优化网站的访问速度…

    编程技术 2025年4月5日
    100
  • 如何使用Linux进行进程调度优化

    如何使用linux进行进程调度优化 随着计算机技术的发展和互联网的普及,对计算机系统的性能要求越来越高。进程调度作为操作系统的重要功能之一,在提高系统性能方面起着重要作用。Linux作为一个开源的操作系统,具有良好的可定制性和扩展性,使得我…

    编程技术 2025年4月5日
    100
  • Linux 怎么防止 ssh 被暴力破解

    SSH 是一种广泛使用的协议,用于安全地访问 Linux 服务器。大多数用户使用默认设置的 SSH 连接来连接到远程服务器。但是,不安全的默认配置也会带来各种安全风险。 具有开放 SSH 访问权限的服务器的 root 帐户可能存在风险。尤其…

    2025年4月5日
    100
  • CentOS 7 系统优化脚本

    一、介绍 作为一名运维,经常会部署各种用途的操作系统,但在这些工作中,我们会发现很多工作其实是重复性的劳动,操作的内容也是大同小异,基于这类情况,我们可以把相同的操作做成统一执行的脚本,不同的东西作为变量手动输入。节约下来的时间不就可以做更…

    2025年4月5日
    100
  • 《恶魔城 多米尼斯合集》宣传片 现已推出

    《恶魔城 多米尼斯合集》公布最新宣传片,现已登陆switch。 https://www.bilibili.com/video/BV1ozs4etEir/ 以上就是《恶魔城 多米尼斯合集》宣传片 现已推出的详细内容,更多请关注【创想鸟】其它相…

    2025年4月5日
    100

发表回复

登录后才能评论