Golang实现DOCX转PDF的最佳实践

Golang实现DOCX转PDF的最佳实践 大家好。

有没有允许将 .docx 转换为 pdf 格式的库? 我找到的那些库能够将不同格式转换为 txt,或者从 HTML 转换为 PDF,但不能从 .docx 转换为 pdf。

你们能在这方面帮助我吗?

4 回复

谢谢,我会查看一下。

更多关于Golang实现DOCX转PDF的最佳实践的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你提供的那些链接对我没用。它们要么使用云上传,要么依赖LibreOffice,这些选项对我都不适用,因为我的文件中包含敏感数据。

你知道还有其他方法可以实现吗?

在Go中实现DOCX转PDF,推荐使用unidoc/unioffice库,它提供了完整的Office文档处理能力。以下是具体实现:

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/unidoc/unioffice/document"
    "github.com/unidoc/unioffice/document/convert"
)

func convertDocxToPDF(inputPath, outputPath string) error {
    // 读取DOCX文档
    doc, err := document.Open(inputPath)
    if err != nil {
        return fmt.Errorf("打开DOCX文件失败: %v", err)
    }
    defer doc.Close()

    // 创建PDF转换器
    converter := convert.NewConverter(doc)

    // 转换为PDF
    pdfBytes, err := converter.ToPDF()
    if err != nil {
        return fmt.Errorf("转换PDF失败: %v", err)
    }

    // 保存PDF文件
    err = os.WriteFile(outputPath, pdfBytes, 0644)
    if err != nil {
        return fmt.Errorf("保存PDF文件失败: %v", err)
    }

    return nil
}

func main() {
    input := "document.docx"
    output := "document.pdf"

    err := convertDocxToPDF(input, output)
    if err != nil {
        log.Fatal(err)
    }
    
    fmt.Printf("转换成功: %s -> %s\n", input, output)
}

安装依赖:

go get github.com/unidoc/unioffice/v2

如果需要处理复杂的格式和布局,可以使用更高级的配置:

func convertWithOptions(inputPath, outputPath string) error {
    doc, err := document.Open(inputPath)
    if err != nil {
        return err
    }
    defer doc.Close()

    converter := convert.NewConverter(doc)
    
    // 设置转换选项
    converter.SetDPI(300) // 设置DPI
    converter.SetImageQuality(90) // 设置图片质量
    
    // 添加水印
    converter.AddWatermark("CONFIDENTIAL", 45, 0.5)
    
    pdfBytes, err := converter.ToPDF()
    if err != nil {
        return err
    }

    return os.WriteFile(outputPath, pdfBytes, 0644)
}

对于批量处理:

func batchConvert(files []string) {
    for _, file := range files {
        output := strings.TrimSuffix(file, ".docx") + ".pdf"
        err := convertDocxToPDF(file, output)
        if err != nil {
            log.Printf("转换失败 %s: %v", file, err)
            continue
        }
        log.Printf("已转换: %s", output)
    }
}

这个方案能保持原始DOCX文档的格式、图片、表格和样式,转换质量较高。

回到顶部