Golang如何在现有PDF文件中添加图像
Golang如何在现有PDF文件中添加图像 你好,
我需要在一个现有的PDF文件中添加一张图片和两段文字。 首先,我想知道用Go语言是否可以实现这个功能。 如果你能描述一个解决方案或实现方法,那就太好了(我知道如何为新建的文件操作)。
我在网上做了一些研究,但我是法国人(人无完人),在结果丛林中筛选对我来说并不容易。 我看到过像Pdftron这样的解决方案,但我不能使用付费方案,并且我更喜欢开源解决方案。 我会继续我的研究,但如果你能帮助我……
非常感谢。
保留打印-签署-扫描的工作流程,将签名图像插入文件并保留在某些司法管辖区可能被视为签名伪造,而在其他地区则可能完全没有法律效力。
更多关于Golang如何在现有PDF文件中添加图像的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
JPL:
首先,我想知道用 Go 语言是否可以实现。
这通常是可行的。
不过,通常你也不会想去编辑 PDF 文件。你要么从一些非 PDF 的源文件生成它们,要么使用 PDF 编辑器来编辑。PDF 是一种处理起来很麻烦的容器格式,任何修改它的操作,其成败都取决于原始 PDF 文件是如何创建的。
这并没有真正使用Go,但我认为你可以找到用Go编写的封装/库来帮助执行这些命令。
使用convert(或任何可用的工具)来转换PDF中的图像。 然后使用该PDF,通过pdftk的multistamp操作覆盖目标PDF文档。
几年前我使用PHP做过这个(同时使用了PDFjs和jSignature)来制作一个简单的编辑器,用于向PDF文件添加签名和注释。
您好,
感谢您的回答。
关于PDF格式,我无法做出让步。
我来解释一下我的问题。 我们是一个帮助年轻人的教育机构。 我们组织专业实习。 我们通过电子邮件以PDF格式发送实习协议。 公司或协会通过电子邮件发回签署好的协议。我们将所有内容都以PDF格式存储。 目前,他们打印协议,手动签名,扫描,然后将协议以PDF或图片形式发送回来。 我想简化这个流程,用一个工具来帮助他们整合签名,而无需打印协议或进行扫描。他们中很多是非常小的企业或协会,没有扫描仪,返回的协议只是一张(用手机拍的)照片。
我想到了一个替代方案,但不知道是否可行。 将PDF转换为图片,合并签名和协议图片。再将图片转换为PDF。我目前还不知道如何操作,但正在研究。 协议有两页(正面和背面)。
如果您能帮助我。不是给我一个现成的解决方案(虽然…… ;o)) ),而是给我一些可以探索的方向。
非常感谢。
在Go语言中,你可以使用开源的第三方库来操作现有的PDF文件并添加图像和文字。推荐使用 unidoc/unipdf/v3 库,它是一个功能强大的开源PDF处理库,支持编辑现有PDF文件。
以下是一个示例代码,展示如何打开一个现有的PDF文件,在指定位置添加一张图片和两段文字:
package main
import (
"fmt"
"os"
"github.com/unidoc/unipdf/v3/common/license"
"github.com/unidoc/unipdf/v3/creator"
"github.com/unidoc/unipdf/v3/model"
)
func init() {
// 设置UniDoc的免费许可证(有使用限制,适合开发测试)
err := license.SetMeteredKey("你的免费许可证密钥")
if err != nil {
panic(err)
}
}
func main() {
// 打开现有的PDF文件
inputPath := "input.pdf"
f, err := os.Open(inputPath)
if err != nil {
panic(err)
}
defer f.Close()
pdfReader, err := model.NewPdfReader(f)
if err != nil {
panic(err)
}
// 获取PDF页数
numPages, err := pdfReader.GetNumPages()
if err != nil {
panic(err)
}
// 创建新的PDF编辑器
c := creator.New()
// 遍历每一页
for i := 1; i <= numPages; i++ {
page, err := pdfReader.GetPage(i)
if err != nil {
panic(err)
}
// 将现有页面添加到编辑器
err = c.AddPage(page)
if err != nil {
panic(err)
}
// 如果是第一页,添加图像和文字
if i == 1 {
// 添加图像
img, err := c.NewImageFromFile("image.png")
if err != nil {
panic(err)
}
img.SetPos(50, 50) // 设置图像位置(x, y)
img.ScaleToWidth(100) // 设置图像宽度
err = c.Draw(img)
if err != nil {
panic(err)
}
// 添加第一段文字
p := c.NewParagraph("第一段文字内容")
p.SetPos(50, 200)
p.SetFontSize(12)
err = c.Draw(p)
if err != nil {
panic(err)
}
// 添加第二段文字
p2 := c.NewParagraph("第二段文字内容")
p2.SetPos(50, 220)
p2.SetFontSize(12)
err = c.Draw(p2)
if err != nil {
panic(err)
}
}
}
// 保存修改后的PDF文件
outputPath := "output.pdf"
err = c.WriteToFile(outputPath)
if err != nil {
panic(err)
}
fmt.Println("PDF文件已成功修改并保存为", outputPath)
}
注意:
- 你需要先安装
unidoc/unipdf/v3库:go get github.com/unidoc/unipdf/v3 - 需要注册UniDoc的免费许可证密钥(有使用限制,适合开发测试),可以在UniDoc官网申请。
- 图像位置和文字位置通过
SetPos(x, y)设置,坐标原点在页面左下角。 - 这个示例只在第一页添加内容,你可以根据需要修改条件。
如果你需要更复杂的操作(如多页添加、文字样式调整等),unipdf 库提供了丰富的API支持。

