用于 PDF 文档创建和处理的 Go API
开源 Go 库,使开发人员能够创建、编辑、操作和转换 PDF 文档。
unipdf 入门
要在您的系统上安装 unipdf,请运行以下命令。
通过 Go API 生成 PDF 报告
开源 unipdf API 为开发人员提供了在自己的 Go 应用程序中创建 PDF 报告的能力。该库允许开发人员有效地处理 PDF 文档,并支持轻松地将图像、表格、页眉、页脚等添加到 PDF 报告中。您还可以使用几行代码将动态内容放入 PDF 报告中。
通过 Go API 将 PDF 文件转换为 CSV
unipdf 库使软件开发人员能够在自己的 Go 应用程序中将 PDF 文件转换为 CSV 文件格式。 PDF 到 Excel 转换器对于商业和研究机构来说是一个非常有用的工具。它非常易于使用,并提供从 PDF 中提取 TextMarks 的功能,并将它们组合成单词、行和列以进行 CSV 数据提取。
将图像插入 PDF
开源 unipdf API 使软件程序员能够将自己选择的图像添加到 GO 应用程序内的 PDF 文档中。它使开发人员的工作更轻松,同时将图像放置在 PDF 文档中,而不必担心坐标。您只需要提供图像路径和大小,而不用担心坐标。该库支持流行的图像格式,例如 JPEG、PNG、GIF、TIFF 等。
// Images to PDF.
func imagesToPdf(inputPaths []string, outputPath string) error {
c := creator.New()
for _, imgPath := range inputPaths {
common.Log.Debug("Image: %s", imgPath)
img, err := c.NewImageFromFile(imgPath)
if err != nil {
common.Log.Debug("Error loading image: %v", err)
return err
}
img.ScaleToWidth(612.0)
// Use page width of 612 points, and calculate the height proportionally based on the image.
// Standard PPI is 72 points per inch, thus a width of 8.5"
height := 612.0 * img.Height() / img.Width()
c.SetPageSize(creator.PageSize{612, height})
c.NewPage()
img.SetPos(0, 0)
_ = c.Draw(img)
}
err := c.WriteToFile(outputPath)
return err
}
为 PDF 文档添加密码
免费的 unipdf API 使开发人员能够通过使用 Go 命令向其应用密码来保护他们的 PDF 文档。您可以限制用户打开和阅读 PDF 文档。您还可以设置所有者密码以授予对 PDF 文件的完全访问权限。此外,您还可以限制用户对 PDF 文档的某些部分进行任何类型的更改。
func protectPdf(inputPath string, outputPath string, userPassword, ownerPassword string) error {
permissions := security.PermPrinting | // Allow printing with low quality
security.PermFullPrintQuality |
security.PermModify | // Allow modifications.
security.PermAnnotate | // Allow annotations.
security.PermFillForms |
security.PermRotateInsert | // Allow modifying page order, rotating pages etc.
security.PermExtractGraphics | // Allow extracting graphics.
security.PermDisabilityExtract // Allow extracting graphics (accessibility)
encryptOptions := &model.EncryptOptions{
Permissions: permissions,
}
f, err := os.Open(inputPath)
if err != nil {
return err
}
defer f.Close()
pdfReader, err := model.NewPdfReader(f)
if err != nil {
return err
}
isEncrypted, err := pdfReader.IsEncrypted()
if err != nil {
return err
}
if isEncrypted {
return fmt.Errorf("The PDF is already locked (need to unlock first)")
}
// Generate a PdfWriter instance from existing PdfReader.
pdfWriter, err := pdfReader.ToWriter(nil)
if err != nil {
return err
}
// Encrypt document before writing to file.
err = pdfWriter.Encrypt([]byte(userPassword), []byte(ownerPassword), encryptOptions)
if err != nil {
return err
}
// Write to file.
err = pdfWriter.WriteToFile(outputPath)
return err
}